Nginx環(huán)境下http和https(ssl)共存的方法

給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,可以通過如下配置實現(xiàn):
server {
    listen 80;
    server_name 10.11.4.12;
    rewrite ^(.*) https://$server_name$1 permanent;
}
  1. 同時監(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。