2013-03-11 471 views
0

我知道這個問題是asked before on SO,但我無法在我的服務器上覆制它。將網址映射到子網域(NGINX)

我想要做的是,當用戶去medicine.example.com,子域應映射到example.com/sites/medicine。所以用戶看到的網址是medicine.example.com。 index.php通過PHP被剝離。

以下代碼給我一個502 bad gateway錯誤。

server { 
    listen  80; 
    listen  443 ssl; 
    server_name medicine.example.com; 

    location/{ 
     rewrite    ^([^.]*[^/])$ $1/ permanent; 
     proxy_pass_header Set-Cookie; 
     proxy_pass   https://example.com/sites$request_uri; 
    } 
} 

理想地,該解決方案將是一個通配符/正則表達式爲基礎的,使得不止medicine.example.com可以被映射。思考?

+0

簡單地說'https://example.com/sites/medicine/$uri;'的'proxy_pass'值是否可以工作(不需要重寫)?順便說一句,你在看重定向還是真的代理? – 2013-03-11 14:48:27

+0

@Jack謝謝,不行不行。 '$ request_uri'與'$ uri'變量來自哪裏呢?我從來沒有真正明白這一點? – 2013-03-11 14:48:52

+0

我**不要**想重定向的網址。我想保留它,'medicine.example.com'。順便說一句,我不知道代理是什麼。 – 2013-03-11 15:07:41

回答

0

我相信,如果你希望瀏覽器中的URL保持不變,你不需要重寫。所以你只需要這個(@Jack在$ uri前面有一個額外的/)。什麼是用戶輸入的

server { 
    listen  80; 
    listen  443 ssl; 
    server_name medicine.example.com; 

    location/{ 
     proxy_pass  $scheme://example.com/sites/medicine$request_uri 
} 

這裏有一個鏈接,$ URI與$ REQUEST_URI

$方案應該返回HTTP或HTTPS視。基本上$ uri不包含參數。 http://wiki.nginx.org/HttpCoreModule#.24request_uri

+0

謝謝,但我試過,沒有去 – 2013-03-14 11:34:52

+0

你的日誌說什麼?這個問題可能與你的'proxy_pass_header'語句有關。嘗試'proxy_pass_header主機$主機;'甚至'proxy_pass_header主機example.com'我認爲你需要使用add_header的cookie。 – haley 2013-03-14 14:24:16

0

額外的路徑將被自動轉發到上游服務器。所以不需要附加$ request_uri。 Nginx很簡單。

location/{ 
    proxy_pass  http://example.com/sites/medicine 
} 

也不需要爲上游服務器使用https,因爲它浪費了ssl協商的資源。使用http更好,因爲你的上游服務器是內部的。交通安全。