我想运行两个版本的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/host文件中添加了下面一行
my.ip.addr.ess dev.mywebsite.com但是对这两个域名的请求只会导致我的网站的制作版本被返回。注意,我使用的是默认的nginx.conf文件。有什么方法可以调试我的浏览器(Chrome 40.0.2214.111(64位)),看看我的请求是否/在哪里被修改?我认为问题就在客户方面,因为评论者给我的建议似乎是可行的。
发布于 2015-02-15 21:48:13
如果你试试这个:
listen *:80;和
listen *:9033;这是我关于旨在nginx配置的问题的建议。根据nginx,通过放置这些侦听指令,nginx将首先匹配IP:端口服务器块,然后查看匹配 IP:port的服务器块中的server_name指令。因此,如果请求在错误的环境中包含正确的“端口”,这与应用程序或乘客指令有关。
https://stackoverflow.com/questions/28525194
复制相似问题