Nginx服务错误的根

我有两个sites-enabled ,与server_name如下所示:

 server_name www.mysite.com mysite.com 

 server_name dev.mysite.com 

问题:当我通过IP地址访问网站时,通过查看访问/错误日志,看起来nginx是在dev.mysite.comrootdev.mysite.com

nginx如何决定哪个服务? 当我们使用它的IP地址访问网站时,我们是否可以强制它发送www.mysite.comroot

CONF

 server { listen 80; server_name www.mysite.com mysite.com; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /var/www/mysite/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args ; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_read_timeout 300; } } 

简单地说:你还没有告诉Nginx哪个server {...}可供select – 所以它select了第一个。

Nginx将请求传递给默认服务器。 为此,它将Host标头与server_name相匹配。 如果使用IP地址, Host头将包含IP地址(这意味着它可以用来匹配server_name )。

在没有server_name匹配主机头的情况下,nginx将按照以下方式select服务器:

  1. 服务器显式设置为默认值。
    • 这是完成的(在端口80的情况下)与listen 80 default_server
  2. 如果没有default_server,则使用configuration中列出的第一台服务器。
    • 需要注意的是,当使用通配符时,nginx中文件包含的顺序是不确定的

引用Nginx wiki :

如果指令具有default_server参数,则封闭server {...}将作为address:port对的默认服务器。 这对基于名称的虚拟主机非常有用,您希望为不匹配任何server_name指令的主机名指定默认服务器块。 如果没有使用default_server参数的指令,则默认服务器将是address:port对出现的第一个服务器块。 default_server参数出现在版本0.8.21中,因此不推荐参数默认值。

推荐阅读:

  • Nginx文档:服务器名称
  • Nginx文档:Nginx如何处理请求

根服务器之前的http作用域也可以定义root。 你可以在那里设置默认的根。

 html { root /default/root server { root /site/root } }