我有 2 个sites-enabled
,server_name
如下所示:
server_name www.mysite.com mysite.com
和
server_name dev.mysite.com
问题:当我通过网站的 IP 地址访问该网站时,通过查看访问/错误日志,似乎 nginx 正在root
为dev.mysite.com
.
nginx 如何决定服务哪一个?当使用其 ip 地址访问该站点时,root
我们可以强制它停止服务吗?www.mysite.com
会议
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 {...}
选择哪个 - 所以它选择了第一个。Nginx 将请求传递给默认服务器。为此,它将
Host
标头与server_name
. 如果使用 IP 地址,Host
标头将包含 IP 地址(这意味着它可用于匹配server_name
)。在没有
server_name
匹配 Host 头的情况下,nginx 将通过以下方式选择服务器:listen 80 default_server
引用Nginx 维基:
推荐阅读:
root 也可以在 server 之前的 http 作用域下定义。您可以在那里设置默认根目录。
我的情况不是 IP 地址问题,但这篇文章是在搜索服务于错误根的 nginx 时出现的第一篇文章。我的 nginx 配置了 3 个不同的域名和 3 个不同的服务器块,每个服务器块都有不同的根。1 个域名从错误的根服务。
就我而言,我发现我的一个服务器块包含以下两行:
虽然我有 2 个仅包含的其他服务器块:
每个服务器块都有不同的 server_name 和不同的根目录,但其中 2 个最终显示来自同一根目录的网页。
从第一种情况中删除以下行后,一切正常:
我假设这条线出现是因为我的复制粘贴错误。但我真的不记得它是从哪里来的。