简体   繁体   English

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

[英]Wrong port on redirection Rails application running on Nginx + Thin server

I am having Rails application running on Nginx + Thin server on port 3037. This is testing server. 我在端口3037的Nginx + Thin服务器上运行了Rails应用程序。这是测试服务器。

When I perform redirection in rails application, for example to domain.com:3037/users it redirects me to domain.com/users , port 80. 当我在Rails应用程序进行重定向,例如domain.com:3037/users它重定向我domain.com/users,端口80。

I can solve this by setting port like this users_url(:port => 3037) , but I can't do it for every redirect link. 我可以通过这样设置users_url(:port => 3037)端口来解决此问题,但是我不能为每个重定向链接都这样做。 I believe there exist easier way to solve this problem. 我相信有解决此问题的简便方法。

This is nginx config file: 这是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;
  }

I solved it by rewriting nginx configuration file as it was done in this link: http://blog.mohitkanwal.com/blog/2013/04/10/deploying-rails-on-nginx-and-thin/ . 我通过重写nginx配置文件来解决此问题,就像在此链接中所做的那样: http : //blog.mohitkanwal.com/blog/2013/04/10/deploying-rails-on-nginx-and-thin/ Here is how my configruation file looks like: 这是我的配置文件的样子:

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;
  }

}

We can set host header of Nginx to keep your port: 我们可以设置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
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM