在Nginx + Thin服务器上运行的重定向Rails应用程序上的端口错误

时间:2015-12-29 20:17:23

标签: ruby-on-rails redirect nginx port thin

我在端口3037上的Nginx + Thin服务器上运行Rails应用程序。 这是测试服务器。

当我在rails应用程序中执行重定向时,例如 domain.com:3037/users ,它会将我重定向到 domain.com/users ,端口80。

我可以通过像 users_url(:port => 3037)这样设置端口来解决这个问题,但我无法为每个重定向链接执行此操作。我相信有更简单的方法可以解决这个问题。

这是nginx配置文件:

upstream dev_server {
    server 127.0.0.1:9297;
}
server {
  listen 3037 default_server;
  server_name www.domain.com:3037;
  root /full_path_to_project/public;

  location / {
      proxy_pass http://dev_server;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
  }

2 个答案:

答案 0 :(得分:1)

我通过重写nginx配置文件解决了这个问题,就像在这个链接中完成的那样:http://blog.mohitkanwal.com/blog/2013/04/10/deploying-rails-on-nginx-and-thin/。以下是我的配置文件的样子:

upstream dev_server {
    server 127.0.0.1:9297;
}
server {
  listen 3037 default_server;
  server_name domain.com:3037 www.domain.com:3037;
  root /full_path_to_project/public;

  location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host $http_host;
    proxy_redirect  off;
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
  }

  location @ruby {
    proxy_pass http://dev_server;
  }

}

答案 1 :(得分:0)

我们可以设置Nginx的主机头来保留您的端口:

upstream dev_server {
    server 127.0.0.1:9297;
}
server {
    listen 3037 default_server;
    server_name www.domain.com:3037;
    root /full_path_to_project/public;

    location / {
        proxy_pass http://dev_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host:$server_port; # Keep your request port
    }