几年来,我主要使用 Nginx 作为反向代理。我创建了几个用于代理的子域服务器块,没有任何问题。突然需要从本地目录提供文件,而我似乎无法匹配 sub.www.example.com 来从该域提供文件。
这是我的默认配置文件的一部分,为了匿名而略作修改。在下面的代码片段中,当浏览器请求 www.example.com 时,www.example.com 域始终命中,而子域为 www.example.com。
有人能看出我做错了什么吗?你认为除了我在这里提供的内容之外,还有其他问题吗?如果您需要更多配置文件、日志或其他任何内容,请询问。
server {
#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;
listen 80;
listen [::]:80;
server_name www.example.com;
proxy_cache www;
location / {
include /etc/nginx/common_configs/locproxy.conf;
proxy_pass http://www3;
proxy_redirect http://www3 http://$server_name;
}
include /etc/nginx/common_configs/hiddenfiles_loc.conf;
deny access to hidden files
location ~ /\. { deny all; }
include /etc/nginx/common_configs/http_to_https_redirects.conf;
}
server {
listen 80;
listen [::]:80;
server_name sub.www.example.com;
access_log /var/log/nginx/sub.access.log;
error_log /var/log/nginx/sub.error.log debug;
include /etc/nginx/common_configs/hiddenfiles_loc.conf;
location / {
root /var/www/example;
#log_not_found off;
autoindex off;
index index.html;
try_files $uri $uri/ =404;
}
}
#Redirect example.com to www.example.com
server {
server_name example.com;
location / {
return 301 $scheme://www.example.com$request_uri;
}
}
当我请求一个 URL 时http://sub.www.example.com,我反而收到了来自 www.example.com 的内容。www.example.com 的日志显示活动,而 sub.www.example.com 的日志则什么都没有显示。www.example.com 的日志还显示了对 sub.www.example.com 的请求。
上面的配置位于 /etc/nginx/sites-available/default 文件中。真正奇怪的是,配置末尾的重定向起作用了。
下面发布了一些 www.example.com 日志:
10.23.128.17 - - [14/Nov/2016:19:13:51 -0700] "GET /wp-includes/css/admin-bar.min.css?ver=4e05f26752784196aa8fb9e77ae9ff08 HTTP/1.1" 200 3865 "http://sub.www.example.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36"
10.23.128.17 - - [14/Nov/2016:19:13:51 -0700] "GET /wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.min.css?ver=2.7.2 HTTP/1.1" 200 6378 "http://sub.www.example.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36"
10.23.128.17 - - [14/Nov/2016:19:13:51 -0700] "GET /wp-content/plugins/buddypress/bp-core/css/admin-bar.min.css?ver=2.7.2 HTTP/1.1" 200 460 "http://sub.www.example.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36"
现在我想起来了,我还应该补充一点,我在端口 443 上有大约 20 个 SSL 子域,它们都运行良好。除了最后的重定向以将 example.com 转发到 www.example.com 之外,我认为这可能是我尝试添加到此服务器的第一个非 SSL 端口 80 子域。
有人发现这个配置有问题吗?或者你能想到我可以看看的其他地方吗?
答案1
这是由于 DNS 服务器条目将 www 的所有子域指向另一台服务器所致。另一台服务器导致某些功能正常,某些功能不正常。
感谢 Tim,我清理了所有配置,并排除了这些配置作为问题的根源。