大部分的服務器上,咱們會在一個Nginx服務下配置多個vhost,以最大化運用服務器資源。然而,爲其中一個vhost域名啓用 HTTPS 以後,發現百度統計的實時訪客或入口頁中,存在一些來自其它域名的請求。即經過html
https://some-other-domain.com/some-url 來訪問對應的 https://www.domain.com/some-url
結果就是 Google 瀏覽器顯示了一個安全警告頁面,認爲這是一個不安全的網頁。由於我只配置了 www.domain.com 的 SSL 證書,其餘域名並無配置。nginx
那麼,搜素引擎的爬蟲就不能正常訪問正確的域名了。瀏覽器
接下來筆者將給你介紹如何解決這一問題的思路和實操,安全
首先,咱們來理一下概念: 1)理解空主機頭,正是空主機頭沒有得當配置而致使的; 2)域名=>IP=>端口=>服務;
nginx既是一個高性能高併發的Web服務器,同時也是作反向代理的優選工具, 當咱們部署該工具時,默認配置(nginx.conf)中的server塊,在不指定server_name的狀況下,能夠匹配任意指向該服務器的域名,即,只要你將域名作A記錄指向該服務器的IP或Cname,即可「克隆」該服務器上的defalut_server。
咱們知道nginx中的vhost是依賴server_name來路由的,但,端口也可起到相同的做用。
所以,當咱們爲vhost配置了https後,非該vhost綁定的server_name(假設爲: some-other-domain.com),經過https協議進行被訪問時,因爲空主機頭並未能設置,所以,也就沒法攔截,這時some-other-domain.com被看做爲IP使用,請求將轉發到 當前服務器IP:443,監聽443的default_server(www.domain.com) 天然就返回了內容。服務器
搞清概念上的問題就好辦了,配置空主機頭便可,讓沒有明確綁定server_name的域名,一概攔截。併發
具體配置以下:dom
打開 /usr/local/nginx/conf/nginx.conf 配置文件,修改或添加默認vhost
server { idelisten 80 default_server;
listen 443 ssl http2;
servername ;
server_name_in_redirect off;
ssl_certificate /path/ssl_cert/ssl.pem;
ssl_certificate_key /path/ssl_cert/ssl.key;
error_page 401 402 403 404 /40x.html;高併發location = /40x.html {
root html;
}工具location / {
return 404;
}
}
OK,如今再多的vhost啓用https也不怕亂跳了。