2017-01-02 105 views
3

我第一次設置了Web服務器,並試圖使HTTPS正常工作。我從Let's Encrypt獲得了證書,並且該網站將以HTTPS加載。我已經設置了配置重定向所有HTTP到HTTPS下列功能塊:當重定向到https時,Nginx無法從根服務https

server { 
    listen 80; 
    server_name sulphate.me; 
    return 301 https://$server_name$request_uri; 
} 

server { 
    listen 443 ssl; 
    server_name sulphate.me; 
    ssl_certificate /etc/letsencrypt/live/sulphate.me/cert.pem; 
    ssl_certificate_key /etc/letsencrypt/live/sulphate.me/privkey.pem; 
    add_header Strict-Transport-Security "max-age=31536000"; 
} 

然而,當我連接到站點(sulphate.me),它只是給我的「歡迎使用nginx的!」頁。因爲我將它設置爲返回301,我的瀏覽器現在總是進入永久重定向。

在添加這些塊之前,它從/ var/www/html中提供了良好的內容,但它現在完全沒有。首先,爲什麼它不再提供內容,其次我怎麼才能修復永久重定向,因爲它不工作?

在此先感謝。

編輯:當我刪除塊並等待一段時間,它現在正常服務的內容。就在我重定向的時候,它就搞砸了。編輯2:現在,當我嘗試通過地址欄手動轉到HTTPS時,它會給我錯誤521(Web服務器關閉),當它顯然不是。

編輯3:Certificate Information,CloudFlare的加密設置(12),Nginx SSL-Related Config Settings

而只是爲了澄清,並沒有在我的配置,當我收到了521,他們現在已經被重新添加這些塊和原始問題仍然會發生(不在HTTPS上從根服務)。

回答

1

該錯誤來自該域的CloudFlare,而不是nginx。如果您查看錯誤頁面上的證書,則會看到它是CloudFlare的,而不是您的。

在CloudFlare的免費計劃中,除非您在CloudFlare中啓用了完全/嚴格HTTPS,否則它可能會通過HTTP連接到您的源。所以它是這樣的:

瀏覽器--- HTTPS ---> CloudFlare --- HTTP --->您的服務器。

因此,問題是,您的服務器總是將請求視爲HTTP,因爲這是CloudFlare正在使用的請求。你可能想要做的是看X-Forwarded-For-Proto。然後它發出一個重定向,這是無效的,因爲瀏覽器已經認爲它是SSL。

另外請記住,CloudFlare擁有您的HTTPS證書,因此,除非您使用完整/嚴格HTTPS,否則在源上設置一個並不重要。

您有幾個選項。

  1. 使用X-Forwarded-For-Proto做重定向。但CloudFlare可以already do this for you。在這種情況下,你的nginx安裝根本不會執行HTTPS。這並不完全推薦,因爲這意味着邊緣和原點之間的流量未加密。

  2. 在CloudFlare中使用完整/嚴格SSL,以便它可以在其代理和原點之間執行HTTPS。

+0

我很確定我的網站上的證書不是Cloudflare的。它由'COMODO CA有限公司'擁有。另外抱歉不清楚,在收到521時,重定向塊不在配置中。我從多個來源進行了研究,發現這些塊對於將HTTP連接永久重定向到HTTPS是正確的,但它不會從HTTPS提供任何網頁。謝謝。 (我添加了該帖子的鏈接) – Sulphate

+0

@Sulphate自從我寫了這個答案後,網站的行爲發生了變化。 – vcsjones

+0

是的我意識到,我重新添加了將HTTP重定向到HTTPS的塊。 (這是我想解決的原始問題:)) – Sulphate

0

你必須用你的配置文件替換nginx的default.conf才能工作。此外,在使用return 301刪除永久重定向後,您必須清除瀏覽器緩存,並且您可以簡單地開始使用return 302,它仍然會重定向,但不會保存在瀏覽器緩存中。