nginx配置https
HTTPS,超文本传输安全协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。以下将介绍如何设置https。
一、配置文件设置
这里我使用的是虚拟主机设置https
nginx.conf文件,在http中加入
include /usr/local/nginx/vhost/*.conf;
mkdir /usr/local/nginx/vhost
vim /usr/local/nginx/default.conf
server { listen 80; server_name _; #这里的rewrite,访问80端口强制跳转到https rewrite ^ https://$host$request_uri? permanent; } server { # listen 443; 1.15版本后 ssl on; 这条被废弃了,开启443方式如下 listen 443 ssl; server_name localhost; #浏览器直接重定向到https,避免中途的302重定向URL被篡改。进一步提高通信的安全性。 HSTS max-age=31536000是指接下来一年 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; #证书存放位置 ssl_certificate /opt/system/nginx/ssl/server.crt; #免密key存放位置 ssl_certificate_key /opt/system/nginx/ssl/server.key #依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码 ssl_prefer_server_ciphers On; #指定密码为openssl支持的格式 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #密码加密方式 ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS; location / { #主配置文件中有upstream模块,代理后台的两个tomcat。 proxy_pass http://backend; gzip on; gzip_min_length 40000; gzip_types application/javascript application/json text/css text/plain; client_max_body_size 5000M; proxy_connect_timeout 60; proxy_send_timeout 1000; proxy_read_timeout 200; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header SERVER_ADDR $server_addr; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header REMOTE_PORT $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; error_page 500 501 502 503 504 404 400 /error.html; location = /error.html { root /usr/local/nginx/html/; } }
二、创建ca证书
1、生成服务器私钥:
openssl genrsa -des3 -out server.key 1024
#des3是算法, -out [filename] 1024是长度,默认 会让你输入密码,不小于4个字符
2、创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr
-new 创建一个新的证书请求文件 -key filename 指定私钥的输入文件,创建证书请求时需要 -out filename.csr 输出指定的文件名
3、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
4、最后标记证书使用上述私钥和CSR
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
5、最后会有4个文件,有用的是server.crt和server.key,放到配置文件中指定的位置即可
server.crt server.csr server.key server.key.org
最后启动nginx,访问http://ip/ 会强制跳转https,这里我是代理的两个tomcat节点,所以配置文件中使用的是proxy_pass
扩展:nginx中内置变量
$args 请求中的参数,如www.abc.com/test/hello?a=1&b=2的$args就是a=1&b=2
$document_root Nginx虚拟主机配置文件中的root参数对应的值
$document_uri 当前请求中不包含指令的URI,如www.test.com/test/ok?a=1&b=2的document_uri就是/test/hello,不包含后面的参数
$host 主机头,也就是域名
$http_user_agent 客户端的详细信息,也就是浏览器的标识,用curl -A可以指定
$http_cookie 客户端的cookie信息
$limit_rate 如果Nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置,则显示0
$remote_addr 客户端的公网IP
$remote_port 客户端的端口
$request_method 请求资源的方式,GET/PUT/DELETE等
$request_filename 当前请求的资源文件的路径名称,相当于是$document_root/$document_uri的组合
$request_uri 请求的链接,包括$document_uri和$args
$scheme 请求的协议,如ftp、http、https
$server_protocol 客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr 服务器IP地址
$server_name 服务器的主机名
$server_port 服务器的端口号
$uri 和$document_uri相同
$http_referer 客户端请求时的referer,通俗讲就是该请求是通过哪个链接跳过来的