2012-06-14 53 views
2

我有一個金字塔應用程序在nginx(偵聽端口8080)後面的gunicorn上運行(監聽Unix套接字)。當金字塔視圖返回HTTPFound(location='/') HTTP響應包含Location: http://example.host/沒有端口號,所以用戶得到「無法連接」的錯誤。我無法確定在哪裏指定非標準端口號,或者(最好)在生成Location標頭時如何告訴金字塔從請求中提取它。從應用程序配置HTTPFound返回的位置標頭不包含非標準端口號

摘錄:

[server:main] 
use = egg:gunicorn#main 
host = unix:%(here)s/run/server.sock 
workers = 4 

Nginx的配置:

server { 
    listen 8080; 
    root /path/to/app; 
    location/{ 
     proxy_pass http://unix:/path/to/app/run/server.sock; 
     include proxy_params; 
    } 
    location /static { 
     root /path/to/app/static; 
    } 
} 

回答

2

獲取服務器端口,使用host_port

此外,根據rfc2616,你真的應該被髮送絕對URI不是Location標題中的相對URI。

+0

謝謝,您的回覆讓我朝着正確的方向發展: 1)我用'request.route_url'調用替換了'location'參數中的硬編碼字符串(我的壞,''/''更容易類型比'request.route_url('frontpage')')。 2)Nginx的proxy_params包含 'proxy_set_header $ host主機;' 但它應該是 'proxy_set_header主機$ HTTP_HOST;' – rkhayrov

+0

@Burhan:金字塔負責生成絕對URL爲應用程序開發的所以這不是約在這裏擔心;缺少的是正確的路由調用和ngnix配置。 –