2013-05-14 107 views
2

我在Ubuntu上的Nginx/Passenger上有一個Rails應用程序設置。最近我添加了Faye在Thin上運行,這需要在我的Nginx配置中添加一個反向代理服務器設置。我設法讓這個工作,但設置是非常奇怪的:它只適用於,如果我從www.mydomain.com訪問我的服務器,並在mydomain.com/faye使用Javascript代碼訪問反向代理。雖然我設法以這種方式訪問​​Faye服務器,但Chrome瀏覽器控制檯反覆閃爍Access-Control-Allow-Origin錯誤,所以我知道這不是一個長期解決方案。這個錯誤對我來說很有意義,但是經過多次嘗試後我無法修復它。nginx反向代理設置導致奇怪的訪問控制允許來源問題

XMLHttpRequest cannot load mydomain.com/faye. Origin www.mydomain.com is not allowed by Access-Control-Allow-Origin. 

明顯的解決辦法是從www.mydomain.com和www.mydomain.com/faye訪問,但這樣做在一個502網關錯誤。如果我去掉兩個www,我也會得到一個502錯誤。

我也嘗試將www.mydomain.com重寫爲mydomain.com在Nginx中,並訪問mydomain.com中的所有內容,但仍然無效。

下面是我刪節的nginx.conf。任何援助非常感謝!

http { 
    passenger_root <path_to_passenger_root> 
    passenger_ruby <path_to_passenger_ruby> 

    <abridged...> 

    upstream faye_server { 
    server 0.0.0.0:9292; 
    } 

    server { 
    listen 80; 
    server_name mydomain.com www.mydomain.com; 
    root <path_to_root> 
    passenger_enabled on; 

    <abridged...> 

    location /faye { 
     proxy_pass http://faye_server; 
    } 
    } 

    <Similar section for listening on port 443> 
} 

回答

0

你是否知道你可以直接在Passenger上運行faye?無需在兩者之間瘦身。

查看:https://github.com/faye/faye-websocket-ruby#running-the-app-with-passenger

+0

有趣,感謝您的鏈接。是否有可能同時使用Faye和Faye-websocket gems,因爲我沒有看到任何使用Faye-websocket的Javascript客戶端庫? – 2013-05-15 02:17:52

+0

是的,我認爲你應該這樣做:) – Tinco 2013-05-16 08:43:09

+0

謝謝,最終我通過在Nginx前添加了Varnish來解決這個問題。現在Varnish完美地處理websocket連接。 – 2013-05-20 04:28:27