2013-04-09 275 views
2

我有兩個相同的域,由虛擬主機site.comadditional.com提供服務。我只有第一個SSL證書,並不真正需要另一個SSL證書。當用戶試圖登錄,我做了一個永久重定向:Nginx重定向到SSL上的主域

server { 
    listen 443; 
    server_name additional.com; 
    rewrite ^/(.*) https://site.com permanent; 
} 

...

server { 
    listen 80; 
    server_name site.com additional.com; 

    root /home/site/production/public; 

    location/{ 
    ... 
    } 
} 

server { 
    listen 443; 
    server_name site.com; 
    ssl     on; 
    ... 
} 

而且失敗了,因爲我得到的SSL流量代理到上行服務器,它不能處理它,因爲它只會談論HTTP並且有SSL23_GET_SERVER_HELLO:unknown protocol(對於Chrome; Firefix和curl具有稍微不同的錯誤消息)。 因此,我不得不將其更改爲(通知HTTP,而不是HTTPS這裏):

server { 
    listen 443; 
    server_name additional.com; 
    rewrite ^/(.*) http://site.com permanent; 
} 

錯誤不再出現,但會/登錄頁面時(應該是安全的,上行重定向到HTTPS),它不是重寫,說明證書無效。如果您確認安全性異常,則系統會將您重定向到site.com着陸頁,並且需要第二次點擊login鏈接。

如何設置從https://additional.com/login重定向到正確指向​​?

+0

不知道爲什麼這個話題被關閉。這裏有一堆nginx配置相關的問題(參見右邊的「相關」部分)。解決方案並不簡單,我傾向於認爲在這裏分享是個好主意。如果在寫出問題的方式方面存在任何具體問題,請讓我知道或隨意更改。 – 2013-04-15 11:49:05

回答

1

我已經想通了,所有443應該443 ssl和改寫作品(感謝@Sebastien指點出/$1):

server { 
    listen 443 ssl; 
    server_name additional.com; 
    rewrite ^/(.*) https://site.com/$1 permanent; 
} 
1

如果您想從HTTPS重定向到HTTPS,那麼您需要爲旅程的每一步都提供SSL證書,恐怕。沒有辦法繞過它 - 至少要殺死你的錯誤。

也就是說......請嘗試爲所有的重寫:

rewrite ^/(.*) https://site.com/$1 permanent; 

這應該保持使用的路徑。

+0

找出我正在用SSL關閉SSL端口443。感謝'$/1',就像魅力一樣。 – 2013-04-09 10:59:48