https
访问我们的测试域名 https://www.xxx.com
站点,但是当我们直接在浏览器地址栏中直接输入 www.xxx.com
的时候却发现进入的是 http
协议的网站,这与我们的初衷不一致。
由于浏览器默认访问域名使用的是80
端口,而当我们使用SSL证书后,网站的端口就变成了443
,所以当我们直接在浏览器中输入网址 www.xxx.com
的时候进入的是 80
端口的 HTTP
站点而不是 443
端口的 HTTPS
站点。
解决方法
这里提供两种 http
跳转到 https
的方法:
1. 使用nginx的 rewrite
将请求过来的 http
URL直接重写成 https
server { listen 80; #填写绑定证书的域名 server_name www.xxx.com; #强制将http的URL重写成https rewrite ^(.*) https://$server_name$1 permanent; }
2. 使用301重定向的方式将 http
的请求重定向到 https
上
server { listen 80; #填写绑定证书的域名 server_name www.xxx.com; #把http的域名请求转成https return 301 https://$host$request_uri; }
完整配置
#HTTP配置 server { listen 80; #填写绑定证书的域名 server_name www.xxx.com; #(第一种)把http的域名请求转成https return 301 https://$host$request_uri; #(第二种)强制将http的URL重写成https rewrite ^(.*) https://$server_name$1 permanent; } #HTTPS使用SSL访问的配置 server { #SSL使用443端口 listen 443 ssl; #SSL证书绑定的单域名 server_name www.xxx.com; #证书pem文件 ssl_certificate /usr/cert/www_xxx_com.pem; #证书key文件 ssl_certificate_key /usr/cert/www_xxx_com.key; #缓存SSL握手产生的参数和加密密钥的时长 ssl_session_timeout 5m; #使用的加密套件的类型 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的TLS协议的类型 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #加密套件优先选择服务器的加密套件 ssl_prefer_server_ciphers on; #spa应用配置 location / { root /var/www/mainApp; #配置应用的文件夹 index index.html index.htm; try_files $uri $uri/ /index.html; } }
以上配置成功后执行 nginx -s reload
,然后就可以直接在浏览器中输入 域名
访问 而不是
输入 https://www.xxx.com
才能访问 HTTPS
的站点了, 即:直接通过浏览器输入域名 www.xxx.com
访问网站,进入的就是 HTTPS
的站点。