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;
}
接下来有两个走向:
- 把80端口重定向到443
即把http重定向为https,可以通过如下配置实现:
server {
listen 80;
server_name 10.11.4.12;
rewrite ^(.*) https://$server_name$1 permanent;
}
- 同时监听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