在我的Nginx网络服务器上,我有几个这样的虚拟主机: - api.example.com - www.example.com - cv.example.com
但是当我访问www.example.com/example并且这不是一个有效的路径时,它会给我404 api.example.com页面。但为什么呢?
这是我目前www.example.com的nginx配置:
server {
listen 443 ssl;
listen [::]:443 ssl;
access_log /var/log/nginx/www.example.com-access.log timed;
error_log /var/log/nginx/www.example.com-error.log;
root /var/www/wwwexamplecom/html/_site;
server_name example.com www.example.com;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
location / {
index index.html index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME /var/www/example/html/public/index.php;
include fastcgi_params;
}
location ~ /.well-known {
allow all;
}
}
这是我的api.example.com的配置:
server {
listen 443 ssl;
listen [::]:443 ssl;
access_log /var/log/nginx/api.example.com-access.log timed;
error_log /var/log/nginx/api.example.com-error.log;
root /var/www/apiexamplecom/html/public;
server_name api.example.com;
include snippets/ssl-api.example.com.conf;
include snippets/ssl-params.conf;
location / {
index index.html index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME /var/www/apiexamplecom/html/public/index.php;
include fastcgi_params;
}
location ~ /.well-known {
allow all;
}
}
我认为自己在/位置部分,但我不是真的如何解决这个问题。这也发生在其他虚拟主机上。
答案 0 :(得分:0)
如果无法在位置块中找到任何内容,则必须明确告知nginx您想要抛出404错误。否则,它会尝试匹配您的默认'服务器块(在这种情况下似乎是api.example.com,因为你没有指定默认值)。它无法在该服务器中找到任何内容,然后它会尝试404。
要明确告诉nginx如果无法在您的位置块中找到任何内容,则抛出404,将=404
添加到try_files
行的末尾。这意味着,如果找不到$uri
,$uri/
或任何php文件的任何文件,则抛出404而不尝试任何其他文件。
try_files $uri $uri/ /index.php?q=$uri&$args =404;