我有两个sites-enabled ,与server_name如下所示:
server_name www.mysite.com mysite.com
和
server_name dev.mysite.com
问题:当我通过IP地址访问网站时,通过查看访问/错误日志,看起来nginx是在dev.mysite.com的root下dev.mysite.com 。
nginx如何决定哪个服务? 当我们使用它的IP地址访问网站时,我们是否可以强制它发送www.mysite.com的root ?
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服务器:
listen 80 default_server 引用Nginx wiki :
如果指令具有
default_server参数,则封闭server {...}将作为address:port对的默认服务器。 这对基于名称的虚拟主机非常有用,您希望为不匹配任何server_name指令的主机名指定默认服务器块。 如果没有使用default_server参数的指令,则默认服务器将是address:port对出现的第一个服务器块。default_server参数出现在版本0.8.21中,因此不推荐参数默认值。
推荐阅读:
根服务器之前的http作用域也可以定义root。 你可以在那里设置默认的根。
html { root /default/root server { root /site/root } }