文章内容
2018/10/18 16:28:29,作 者: 黄兵
nginx 设置https
最近服务器出了一点问题,升级nginx失败,但是服务器cpu经常100%,检查了一下nginx的配置文件,将某个网站升级成为全站https。
server {
listen 80;
listen [::]:80 ssl ipv6only=on;
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
server_name www.pdflibr.com;
ssl on;
ssl_certificate /etc/ssl/private/www.pdflibr.com/1_www.pdflibr.com_bundle.crt;
ssl_certificate_key /etc/ssl/private/www.pdflibr.com/2_www.pdflibr.com.key;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
keepalive_timeout 70;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
#鍏ㄧ珯https
add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
location / {
try_files $uri @gunicorn_proxy;
}
location @gunicorn_proxy {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://0.0.0.0:5000;
proxy_connect_timeout 500s;
proxy_read_timeout 500s;
uwsgi_buffers 16 16k;
uwsgi_buffer_size 32k;
proxy_send_timeout 500s;
}
}
要开启 HTTPS 服务,在配置文件信息块(server block),必须使用监听命令 listen 的 ssl 参数和定义服务器证书文件和私钥文件,如下所示:
ssl on;
ssl_certificate /etc/ssl/private/www.pdflibr.com/1_www.pdflibr.com_bundle.crt;
ssl_certificate_key /etc/ssl/private/www.pdflibr.com/2_www.pdflibr.com.key;
证书文件会作为公用实体發送到每台连接到服务器的客戶端,私钥文件作为安全实体,应该被存放在具有一定权限限制的目录文件,并保证 Nginx 主进程有存取权限。
命令 ssl_protocols 和 ssl_ciphers 可以用来限制连接只包含 SSL/TLS 的加強版本和算法,默认值如下:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
强制使用https:
HSTS – HTTP Strict Transport Security,HTTP严格传输安全。它允许一个 HTTPS 网站要求浏览器总是通过 HTTPS 来访问,这使得攻击者在用戶与服务器通讯过程中拦截、篡改信息以及冒充身份变得更为困难。
只要在 Nginx 配置文件加上以下头信息就可以了:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;
max-age:设置单位时间内強制使用 HTTPS 连接
includeSubDomains:可选,所有子域同时生效
preload:可选,非规范值,用于定义使用『HSTS 预加载列表』
always:可选,保证所有响应都发送此响应头,包括各种內置错误响应
当用户进行 HTTPS 连接的时候,服务器会发送一个 Strict-Transport-Security 响应头:
定义D-H算法(迪菲-赫尔曼密钥交换):
#使用DH文件 ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #定义算法 ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; #...
参考资料:Nginx 配置 HTTPS 服务器
评论列表