ruby-on-rails - 欺骗 Rails 应用程序使其认为它在不同的端口上

标签 ruby-on-rails nginx port varnish

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

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

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

由于我没有运行 Rails 应用程序的 nginx 代理,因此我想不出欺骗端口的方法。

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

提前致谢!

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

最佳答案

我在端口 80 上使用 Varnish 和在端口 8080 上使用 nginx 进行了相同的设置,OmniAuth(无设计)正在做完全相同的事情。我试过设置 X-Forwarded-Port等在 Varnish 和 fastcgi_param SERVER_PORT 80;在nginx中,都没有成功。我设置中的另一部分是Passenger(你没有提到)但如果你确实在使用Passenger,那么你可以使用:

passenger_set_cgi_param SERVER_PORT 80; 

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

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

关于ruby-on-rails - 欺骗 Rails 应用程序使其认为它在不同的端口上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4590855/

相关文章:

ruby-on-rails - Rails Migration 将字符串转换为整数?

ruby-on-rails - 路由表单提交到不同的 Controller

jquery - 有_许多 :through nested_form that can build multiple instances

nginx - 使用 nginx 重写来隐藏或清理 URL?

linux - 如何从另一台计算机访问本地Web服务器

ruby-on-rails - 在对象空间 object_id 中复制类

nginx limit_req 不起作用

http - 如何在 nginx 中添加规范 header 和 301 重定向

Linux 服务监听多个套接字

iOS MDM 配置文件管理器端口使用