Nginx配置HTTP跳转到HTTPS - 枫叶落
首页 Nginx配置HTTP跳转到HTTPS

Nginx配置HTTP跳转到HTTPS

Eagle 2022-11-24 0 126

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 -t 检查配置文件没有问题就可以再执行 nginx -s reload ,然后就可以直接在浏览器中输入 域名 访问 而不是 输入 https://www.xxx.com 才能访问 HTTPS 的站点了, 即:直接通过浏览器输入域名 www.xxx.com 访问网站,进入的就是 HTTPS 的站点。

免责声明:本文仅代表作者个人观点,与本网站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
作者: Eagle 本文最后编辑于2022-11-24 05:47:24
Eagle

热衷于很多很多(不解释)
做自己喜欢做的事

作者的微博