給nginx配置SSL證書后(這里使用的是自己生成的測(cè)試證書,參見(jiàn) nginx使用ssl模塊配置HTTPS支持),按如下server段配置,可以使https正常訪問(wèn):
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;
}
接下來(lái)有兩個(gè)走向:
- 把80端口重定向到443
即把http重定向?yàn)閔ttps,可以通過(guò)如下配置實(shí)現(xiàn):
server {
listen 80;
server_name 10.11.4.12;
rewrite ^(.*) https://$server_name$1 permanent;
}
- 同時(shí)監(jiān)聽(tīng)80和443,根據(jù)訪問(wèn)協(xié)議自動(dòng)調(diào)整
即http和https共存。如果想當(dāng)然的在https的配置里增加80端口的監(jiān)聽(tīng),如:
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;
以這樣的配置去訪問(wèn)時(shí),https是正常的,但是http訪問(wèn)卻會(huì)報(bào)錯(cuò):
400 Bad Request The plain HTTP request was sent to HTTPS port
直譯下來(lái)就是:普通HTTP請(qǐng)求發(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;
}
即,需要?jiǎng)h掉 ssl on,并在listen 443后加上 ssl