2015-08-26 35 views
0

我有* .example.com的SSL通配符證書,它對根域無效。我想的Nginx在Ubuntu 14.04至Nginx重定向根域不在SSL證書中

  1. 只接受對已定義的主機請求
  2. 重定向爲根域和WWW子域中的所有HTTP請求到https WWW子域名
  3. 只在端口443根域回報404 ,例如如果reuqest是 https://example.com

我設法實現1和2與複製下面的配置。

server { 
    #listen 80; 
    #isten 443; 
    return 404; 
} 

server { 
    listen   80; 
    server_name example.com www.example.com; 
    return   301 https://www.example.com$request_uri; 
} 

server { 

    listen 443 ssl; 
    #certificate and key referenced in common.conf 
    server_name www.example.com; 

    root /usr/share/nginx/html/example.com; 
    index index.php index.html index.htm; 

    include common/common.conf; 
} 

當我從上面的第二個和第三個行刪除註釋標記,希望只爲https://example.com返回404 - 沒有什麼作品。例如,我在Chrome中獲得了ERR_CONNECTION_CLOSED,用於https://www.example.com/http://ww.example.com/

我應該怎樣做1),2)和3)?

非常感謝。

回答

1

...爲* .example.com的其中通配符證書不是有效的根域 ...僅在端口443上,例如,用於根域返回404如果reuqest是https://example.com

這是不可能的。通過https,HTTP響應在URL中主機的已建立TLS連接內部生成。因此,要返回404以訪問https://example.com,您必須先擁有經過驗證的TLS連接。但是由於example.com未包含在您的證書中,因此在嘗試建立TLS連接時會出現驗證錯誤,因此沒有成功建立TLS連接,並且連接內不能返回404。