我在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>
}
有趣,感謝您的鏈接。是否有可能同時使用Faye和Faye-websocket gems,因爲我沒有看到任何使用Faye-websocket的Javascript客戶端庫? – 2013-05-15 02:17:52
是的,我認爲你應該這樣做:) – Tinco 2013-05-16 08:43:09
謝謝,最終我通過在Nginx前添加了Varnish來解決這個問題。現在Varnish完美地處理websocket連接。 – 2013-05-20 04:28:27