Nginx Rails网站和拥有多个端口的Passenger

时间:2015-02-15 10:35:53

标签: ruby-on-rails-3 nginx passenger

我想运行两个版本的rails网站,一个用于生产,一个用于开发。生产者将在端口80上侦听,开发将在端口9033上侦听。以下是我的配置服务器块,它们位于同一个文件中

server {
  listen 80 default_server;
  server_name mywebsite.com;
  passenger_enabled on;
  passenger_app_env production;
  root /path/to/public/dir;
}

server {
  listen 9033 default_server;
  server_name mywebsite.com;
  passenger_enabled on;
  passenger_app_env development;
  root path/to/public/dir;
  passenger_friendly_error_pages on;
}

问题在于,当我尝试通过浏览器连接到网站时,无论我使用哪个端口,我总是得到与第一个服务器中指定的环境对应的网站版本块。因此,在上面给出的示例中,它始终提供我网站的生产版本。

为什么第一个服务器块会覆盖第二个服务器块,如何才能创建它以便我可以访问我的网站的任何一个版本而无需手动更改配置文件并重新加载nginx?

更新:

即使在发送每个HTTP请求之前清除浏览器缓存之后,这些建议都没有奏效。我将服务器块更改为以下内容,希望我的服务器返回不同版本的网站

server {
  listen *:80;
  server_name mywebsite.com;
  passenger_enabled on;
  passenger_app_env production;
 root /home/alex/code/m2m/public/;
}


server {
  listen *:80;
  server_name dev.mywebsite.com;
  passenger_enabled on;
  passenger_app_env development;
  root /home/alex/code/m2m/public/;
  passenger_friendly_error_pages on;
}

然后在我的/ etc / hosts文件中添加以下行

my.ip.addr.ess    dev.mywebsite.com

但是对这两个域的请求只会返回我网站的生产版本。注意我使用默认的nginx.conf文件。有没有办法可以调试我的浏览器(Chrome v40.0.2214.111(64位))以查看我的请求是否/在哪里被更改?我认为这个问题存在于客户端,因为评论者给我的建议似乎应该有效。

1 个答案:

答案 0 :(得分:0)

如果你试试这个:

listen *:80;

listen *:9033;

这是我关于针对nginx配置的问题的建议。 通过放置那些listen指令,根据nginx doc,nginx将首先匹配ip:port服务器块,然后查看匹配 IP:端口的服务器块中的server_name指令。因此,如果包含正确“端口”的请求在错误的环境中结束,则这与应用程序或乘客指令有关。