美文网首页
Nginx环境下http和https(ssl)共存的方法

Nginx环境下http和https(ssl)共存的方法

作者: zhong | 来源:发表于2018-01-04 10:20 被阅读0次

    给nginx配置SSL证书后(这里使用的是自己生成的测试证书,参见 nginx使用ssl模块配置HTTPS支持),按如下server段配置,可以使https正常访问:

    server {
        listen      443 ;
        server_name  localhost;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/server.crt;
        ssl_certificate_key /usr/local/nginx/conf/server.key;
    }
    

    接下来有两个走向:

    1. 把80端口重定向到443
      即把http重定向为https,可以通过如下配置实现:
    server {
        listen 80;
        server_name 10.11.4.12;
        rewrite ^(.*) https://$server_name$1 permanent;
    }
    
    1. 同时监听80和443,根据访问协议自动调整
      即http和https共存。如果想当然的在https的配置里增加80端口的监听,如:
      listen 443 ssl ;
      listen 80 ;
      server_name localhost;
      ssl on;
      ssl_certificate /usr/local/nginx/conf/server.crt;
      ssl_certificate_key /usr/local/nginx/conf/server.key;
      以这样的配置去访问时,https是正常的,但是http访问却会报错:
      400 Bad Request The plain HTTP request was sent to HTTPS port
      直译下来就是:普通HTTP请求发送到HTTPS端口。
      参考官方文档解决方法如下:
    server {
        listen 80;
        listen 443 ssl;
        server_name www.liubingyang.com;
        root /alidata/www/bingyang;
        ssl_certificate /alidata/ssl/bingyang.crt;
        ssl_certificate_key/alidata/ssl/bingyang.key;
    }
    

    即,需要删掉 ssl on,并在listen 443后加上 ssl

    相关文章

      网友评论

          本文标题:Nginx环境下http和https(ssl)共存的方法

          本文链接:https://www.haomeiwen.com/subject/jdnlnxtx.html