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

2018-01-04  本文已影响0人  zhong

给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

上一篇下一篇

猜你喜欢

热点阅读