nginx配置ssl证书,开启https安全访问

/ 服务器部署 / 没有评论 / 569浏览

前言(背景):
最近,笔者想在个人网站上开启https访问。笔者是在腾讯云上注册的域名,在服务上使用的Nginx+Tomcat。但是,Tomcat项目所有的请求由Nginx进行代理转发。所以,经过资料查询,这里只需要进行Nginx的配置即可。

一、准备工作

1、假设Nginx+Tomcat都已配置完成。 2、笔者在腾讯云上申请免费版DVSSL证书(有效期一年)。 test1 这里采用自动DNS验证的方式最简便。等待大概10分钟左右申请成功。申请成功后,将证书下载到本地。证书的目录结构如下: test2 在不同服务器下,使用不同的配置方式。这里使用WinSCP将Nginx文件夹中的两个文件传到服务器的Nginx配置文件中:

二、Nginx配置文件

#监听443端口,配置ssl
server {
	listen 443 ssl;
	#填写绑定证书的域名
	server_name  www.zksky.top;
	#网站主页路径
	root /var/www/zkPage; 
	index index.html index.htm;   
	#证书文件名称
	ssl_certificate  /usr/local/nginx/conf/myConf/1_www.zksky.top_bundle.crt; 
	#私钥文件名称
	ssl_certificate_key /usr/local/nginx/conf/myConf/2_www.zksky.top.key;  
	#指定客户端可以重用会话参数的时间
	ssl_session_timeout 5m;
	#配置加密套件。为空字符串时,由openssl自行选择加密算法
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	#为遵循安全规范,配置协议不支持SSLv3、SSLv2 、TLSv1 
	ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
	#依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
	ssl_prefer_server_ciphers on;
	add_header Strict-Transport-Security "max-age=31536000";
}
#转发http请求到https
server {
	listen 80;
	listen [::]:80;
	charset     utf-8;
	server_name  www.zksky.top;
	return 301 https://$host$request_uri; 
}

重启Nginx就已经开启https访问了!

三、Nginx反向代理,配置https

server {
	listen 443 ssl;
	server_name  blog.zksky.top; 
	ssl_certificate  /usr/local/nginx/conf/myConf/1_blog.zksky.top_bundle.crt; 
	ssl_certificate_key /usr/local/nginx/conf/myConf/2_blog.zksky.top.key; 
	ssl_session_timeout 5m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;

	location / {
		proxy_pass    http://localhost:8081/;
        		proxy_set_header Host $host;  
        		proxy_set_header X-Real-IP $remote_addr;   
        		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        		proxy_connect_timeout      300; 
        		proxy_send_timeout         300;
        		proxy_read_timeout         300; 		
	}
}

将域名blog.zksky.top的请求转发到8081端口。开启https请求成功!

注意:
经过nginx代理转发到Tomcat的请求,使用request.getRemoteAddr ()只能获得本地ip,经过以上配置使用request.getHeader("x-forwarded-for")可以获得远程客户端ip。

四、后记:

我的个人网站主页: https://www.zksky.top/
我的博客网站主页: https://blog.zksky.top/