0

    Linux上nginx配置SSL协议非80、443端口自动跳往https端口

    2023.08.03 | admin | 130次围观

    在生产环境中往往碰到一个网站需要多个访问端口,而默认的http访问端口是80,https访问的端口是443,然而这是不够在生产环境下使用的,这个时候就需要配置更多的端口来弥补这一缺点。

    默认情况下用户输入URL时是约简单越好,比如 ,用户只需要输入baidu.com就可以访问。但是这样是通过http协议进行访问域名总是自动转扫到https,而并非https进行访问。站在用户的角度来考虑问题他不会管你的网站是通过什么来访问的,他只管我的一些信息不被别人劫持到,这就要使用到https加密来进行访问。

    比如我的nginx已经配置好了配置文件,如下图

    但是这种配置需要用户自动输入http还是https,这时我只需要添加一个配置就可以实现80端口自动跳转到443端口。

       #  80端口自动转发到443端口
        server {
            listen        80;
           server_name   ********.com;
           rewrite ^(.*)$ https://${server_name}$1 permanent;
        }
        server {
            listen    80;
            listen    443 ssl;
    ……
       }
    

    但是这样会牵扯到配置的其他非80端口域名总是自动转扫到https,所以上面的配置在生产环境是行不通的。

    这些还是默认的端口,但如果要是其他端口呢?

    域名总是自动转扫到https_yii2获取域名https_https域名301

    比如:

        server {
            listen        9116 ssl;
            server_name   *********.com;
            ssl_certificate  /data/nginx/cert/214376322580000.pem;
            ssl_certificate_key /data/nginx/cert/214376322580000.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
            ssl_prefer_server_ciphers on;
            charset UTF8;
            access_log  logs/******.access.log  main;
            error_log   logs/*****.error.log;
            location / {
                   proxy_pass https://***;
                   }
                   }
    

    重新检查nginx配置没有任何的报错。用浏览器访问时就会出来一个报错“The plain HTTP request was sent to HTTPS port”。

    那么这时我就需要对配置文件进行更改。

    首先注释掉80端口自动转发到443端口。

        # 80端口自动转发到443端口
        #server {
        #    listen        80;
        #   server_name   ******.com;
        #   rewrite ^(.*)$ https://${server_name}$1 permanent;
        #}
    

    然后在server配置里面添加一句**‘error_page 497 301 $http_host$request_uri;’ **

        server {
            listen        9116 ssl;
            server_name   ******.com;
            
            ssl_certificate  /data/nginx/cert/214376322580000.pem;
            ssl_certificate_key /data/nginx/cert/214376322580000.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
            ssl_prefer_server_ciphers on;
            error_page 497 301 https://$http_host$request_uri;
            
            charset UTF8;
            access_log  logs/******.access.log  main;
            error_log   logs/********.error.log;
            
            location / {
                   proxy_pass https://****;
                }
            }
    

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论