2016-01-08 58 views
1

我打算爲不同的虛擬主機使用不同的SSL證書,所以我開始將http塊中現有的ssl指令移到server塊之一,然後我開始將其他server塊中的其他SSL證書指令添加進去。但只要我這樣做,所涉及的Web服務器不能再被訪問。 Chrome的報道connection closed和Nginx的錯誤日誌這樣寫的:如何把ssl指令放在服務器模塊中而不是在nginx配置中的http模塊中?

2016/01/08 20:13:32 [error] 16968#0: *364 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: x.x.x.x, server: 0.0.0.0:443 

的SSL指令我感動包括:

ssl_certificate 
ssl_certificate_key 
ssl_protocols 
ssl_dhparam 
ssl_prefer_server_ciphers 
ssl_ciphers 

http塊移動這些指令時server塊怎麼可能出問題?

+0

發佈您的整個服務器配置。此外,請確保您沒有配置爲偵聽443的全局服務器。 –

+1

我確實有一個偵聽443的默認服務器,但爲什麼當我通過server_name請求其他服務器時,這很重要?如果那個確實導致了這個問題,那麼我應該爲這個默認服務器配置什麼ssl_certificate配置(因爲我有多個分別用於其他服務器的ssl證書)? – goodbyeera

+0

如果不提供SSL證書,您不能在443上進行默認監聽。如果您沒有證書,您應該在443上禁用全局監聽。 –

回答

0

請確保您有未配置爲聽443

一個全球性的服務器,因爲你搬到一個特定的虛擬主機,這意味着默認配置缺少證書和密鑰中的ssl_certificatessl_certificate_key。這是Nginx不允許的。每個配置爲在443上進行監聽的虛擬主機(無論是否爲默認主機)都必須配置爲提供證書。

的default_server只應在處理時沒有選擇其他的虛擬主機監聽443,等等default_server爲什麼缺少SSL證書可能會影響到其他虛擬主機的訪問?

這就是要點。 Nginx拒絕配置,因爲如果發生這種情況,由於缺少ssl_certificate,它將無法處理請求。所以配置無效。

+2

感謝您的解釋。在我看來,這應該作爲啓動nginx時的配置報告,而不是在運行時返回錯誤。這是讓我困惑的一點。 – goodbyeera

相關問題