2015-10-07 22 views
0

我有類似Nginx上配置:nginx的proxy_pass被設定的端口響應

server { 
    listen 80; 
    listen 443; 
    server_name api.mysite.dev; 

    location/{ 

     proxy_set_header Host "api.mysite.dev"; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_pass $scheme://127.0.0.1:8001; 
    } 

} 

server { 
    listen 80; 
    listen 443; 
    server_name mysite.dev www.mysite.dev; 

    # Forward all /api/ requests ti api.mysite.dev 
    # sadly need to keep this around for backwards compatibility 
    location /api/ { 
     proxy_set_header Host "api.mysite.dev"; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_pass $scheme://127.0.0.1:8001/; 

    } 
    # The proxy_pass here ends up putting the port (8002) in the response URL. 
    location/{ 
     proxy_set_header Host "www.mysite.dev"; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_pass $scheme://127.0.0.1:8002; 
    } 
} 

所以,作爲評論說,當我要求www.mysite.dev,我的瀏覽器被轉發到www.mysite .dev:8002。 任何想法我在這裏做錯了嗎?

在此先感謝!

回答

2

你需要

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header X-Forwarded-Host $host; 

這是一個可行的樣本: 服務器{ 聽80; listen 443; server_name api.mysite.dev;

 location /api/ { 
      proxy_pass http://127.0.0.1:8001/; 
      proxy_redirect off; 

      proxy_set_header X-Forwarded-Host $host; 
      proxy_set_header Host "api.mysite.dev"; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Real-IP $remote_addr; 
     } 
    } 
+0

不幸的是,這並沒有解決問題。更多信息: 瀏覽器正在重定向到Host標頭中的任何內容。因此,如果我將其設置爲'www'並請求www.mysite.dev/some/resource,瀏覽器將被髮送到www:8002/some/resource。 –

+0

我剛剛注意到你錯過了這個我一直用於反向代理的頭文件proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; –

+0

所以,這*主要是*正確的,所以我編輯了你的答案。添加「proxy_set_header X-Forwarded-Host $ host」是最終爲我解決的。 –