我有 2 个带有 proxy_pass 的文件:
server {
listen 80;
server_name www.domain1.fr;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
}
和
server {
listen 80;
server_name www.domain2.fr;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2369;
proxy_redirect off;
}
}
它们都工作得很好。
现在,如果我通过另一个域名访问此服务器(在针对相同 IP 地址的 DNS 服务器上定义),例如。 www.domain3.fr,而不是 404,我得到了与 www.domain2.fr 相同的结果!
我猜是因为最后一个 location/
,但是如果域名与 server_name
不同,我该如何执行 404 错误?
最佳答案
我已经回答过这个问题很多次了,我正在考虑找到一种方法使其通用,以便在有人提出问题时我可以分享它。
如果您想查看的话,这是其他答案
- Nginx Subdomain accessible on subdomain its not configured for
- nginx subdomain ssl redirect redirects top level domain
- nginx reverse proxy redirecting to wrong domain
您可以在此引用链接 How nginx processes a request 上了解发生这种情况的任何原因。
简单的答案是一个小的服务器 block 来防止它
server {
listen 80 default_server;
# return a code maybe or do any thing
return 404;
}
当然,之后会重新加载 nginx 以反射(reflect)设置。
关于Nginx proxy_pass,定义不匹配的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442210/