給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,可以通過如下配置實現(xiàn):
server {
listen 80;
server_name 10.11.4.12;
rewrite ^(.*) https://$server_name$1 permanent;
}
- 同時監(jiān)聽80和443,根據(jù)訪問協(xié)議自動調(diào)整
即http和https共存。如果想當(dāng)然的在https的配置里增加80端口的監(jiān)聽,如:
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請求發(fā)送到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