一、nginx 配置 http 請求重定向到 https
server段{}可以這樣寫:
// 方式1 rewrite ^/(.*)$ http://domain.com/$1 permanent; // 方式2 rewrite ^ http://domain.com$request_uri? permanent; // 方式3 rewrite ^(.*)$ https://${server_name}$1 permanent;
nginx新版本可以換個寫法,如下:
server { listen 80; server_name wan.bo.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name wan.bo.com; ssl on; ssl_certificate /etc/nginx/cert/web.jisuoffice.com.crt; ssl_certificate_key /etc/nginx/cert/web.jisuoffice.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ····· }
我采用的配置如下寫:
server { listen 80; server_name aaa.abc.dd; rewrite ^(.*)$ https://${server_name}$1 permanent; }
這樣就可以 http://aaa.abc.dd 轉到 https://aaa.abc.dd 了。
二、Nginx防止被域名惡意解析的配置
先說結論,我們的配置:
server { listen 80 default_server; server_name _; return 444; }
再說為什么要加這個配置呢?網上查的問題如下:
今天太倒霉了,發現通過IP無法訪問服務器的80端口很無語,昨天都還好的啊,也沒有修改過配置,其他端口又是正常的,防火牆也沒問題。於是問了下機房,給了個崩潰的回復說我們的服務器有個域名沒有備案被電信多次通告,然后就把我們ip端口給封了。。。。封了啊。。。瘋了,關鍵是這個域名TMD不是我的啊
經過一番折騰,發現是 nginx 配置上貌似有個漏洞,導致任何域名解析到服務器都能被正常請求,雖然是個空白頁,但HTTP狀態碼是200。
主要是缺少下面的配置代碼:
server { listen 80 default_server; server_name _; access_log off; return 444; }
這樣在瀏覽器端訪問的時候,瀏覽器會自動提示用戶無法訪問。
三、Nginx 的 default_server 指令
server { listen 80 default_server; server_name oschina.net www.oschina.net; ... }
先看上面這段配置,listen 指令后面有一個參數 default_server ,這個參數是在 0.8.21 版本以后才有的,而之前是 default 指令。
Nginx 的虛擬主機是通過HTTP請求中的Host值來找到對應的虛擬主機配置,如果找不到呢?那 Nginx 就會將請求送到指定了 default_server 的 節點來處理,如果沒有指定為 default_server 的話,就跑到 localhost 的節點,如果沒有 localhost 的節點,那只好 404 了。
另外你也可以指定對於沒有匹配的 Host 值時,返回錯誤到客戶端,這在現在國內用來處理未備案域名指向自己時非常有用,看看下面的配置:
server { listen 80 default_server; server_name _; return 444; }
通過返回444這個Nginx的非標准錯誤碼來讓Nginx斷開與瀏覽器之間的連接。