如何通过SSL将Nginx非www重定向到www域
时间:2020-01-09 10:43:12 来源:igfitidea点击:
我收到一条错误消息:尝试使用HTTP 301将https://theitroad.com/重定向到https://www.theitroad.com/域时,您的连接不安全。
如何将Nginx非www重定向到通过SSL的www域?
首先,您需要两个域名theitroad.com和www.theitroad.com的SSL证书。
另一种选择是SAN证书或者通配符证书,用于保护整个域中的所有第一级子域,例如* .theitroad.com,包括www.theitroad.com,theitroad.com,forum.theitroad.com等。
Thi的页面显示了如何使用简单的配置选项通过SSL将Nginx非www重定向到www域。
如何通过SSL配置将Nginx非www重定向到www域
我将假设您对名为theitroad.com和www.theitroad.com的域具有通配符证书或者两个SSL证书。
步骤1将https://theitroad.com重定向到https://www.theitroad.com
使用文本编辑器(如vim命令)编辑nginx.conf或者域级别的conf文件:
$ sudo vi /etc/nginx/sites-enabled/theitroad.com.conf
追加以下配置:
### redirect HTTPS n server { listen 443 ssl; server_name theitroad.com; ssl_certificate /etc/nginx/ssl/letsencrypt/non-www.theitroad.com/theitroad.com.cer; ssl_certificate_key /etc/nginx/ssl/letsencrypt/non-www.theitroad.com/theitroad.com.key; return 301 https://www.theitroad.com$request_uri; }
步骤2为https://www.theitroad.com配置Nginx
这是我的示例配置:
server { access_log /var/log/nginx/www.theitroad.com_access.log; error_log /var/log/nginx/www.theitroad.com_error.log; listen 443 ssl http2; server_name www.theitroad.com; # adjust as per your needs # # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate # ssl_certificate /etc/nginx/ssl/letsencrypt/www.theitroad.com/www.theitroad.com.cer; ssl_certificate_key /etc/nginx/ssl/letsencrypt/www.theitroad.com/www.theitroad.com.key; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_dhparam /etc/nginx/ssl/letsencrypt/theitroad.com/dhparams.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Xss-Protection "1"; # OCSP Stapling # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; #resolver <IP DNS resolver>; ssl_buffer_size 8k; ## rest of your config below such as php-cgi, documentroot and more ## }
步骤3将所有HTTP流量重定向到HTTPS
当然,必须将所有HTTP通信发送到HTTPS服务器,以便Strict-Transport-Security可以正常工作。
在您的配置文件中也添加以下内容:
# Redirect www.theitroad.com:80 to https://www.theitroad.com:443 server { listen 80; access_log off; error_log off; server_name www.theitroad.com; return 301 https://$server_name$request_uri; } # # Redirect http://theitroad.com:80 to https://theitroad.com:443 server { listen 80; access_log off; error_log off; server_name theitroad.com; return 301 https://$server_name$request_uri; }
确保重新加载或者重新启动Nginx服务器:
$ sudo systemctl reload nginx
或者
$ sudo service nginx reload
如何使用Nginx serer和curl测试通过SSL将非www重定向到www
curl命令的语法如下:
curl -IL https://theitroad.com/ curl -IL http://theitroad.com/
Nginx服务器正在通过SSL将所有非www流量重定向到www。
该配置还将所有HTTP通信重定向到HTTPS,以避免任何其他问题。
始终使用curl命令检查重定向状态。
您可以使用Firefox或者Chrome Web浏览器开发人员工具来检查,编辑和调试HTML/CSS/JS并在桌面上查看标头工具。