欺骗Rails应用程序认为它在不同的端口上

Gar*_*ett 4 port ruby-on-rails nginx varnish

我有一个在端口8080上运行的Rails应用程序,我需要欺骗它认为它在端口80上运行.

我在端口上运行Varnish 80并将请求转发到端口上的nginx 8080,但是当用户尝试使用OmniAuth登录并且Devise gem生成一个URL以重定向回服务器时,它认为它在端口8080上然后用户将看到.

有没有办法欺骗Rails应用程序将端口硬编码为80(我认为这是一个不好的做法),或者让nginx转发请求,就好像它在端口80上运行一样?

由于我没有在Rails应用程序上运行nginx代理,所以我想不出一种欺骗端口的方法.

有没有人之前遇到过这个问题,如果有的话需要什么样的配置才能修复它?

提前致谢!

编辑:nginx和Varnish都在同一台服务器上运行.

ben*_*les 7

我在端口80上使用Varnish,在端口8080上使用nginx,而OmniAuth(没有设计)的设置完全相同.我尝试X-Forwarded-Port在Varnish和fastcgi_param SERVER_PORT 80;nginx中设置等,两者都没有成功.我的设置中的另一件是乘客(你没有提到),但如果你确实使用了乘客,那么你可以使用:

passenger_set_cgi_param SERVER_PORT 80; 
Run Code Online (Sandbox Code Playgroud)

(文档说你可以在一个http块中设置它,但这对我不起作用,我不得不将它添加到server块中.)

http://modrails.com/documentation/Users%20guide%20Nginx.html#passenger_set_cgi_param