我需要用一个 NGINX 实例支持多个域,但总是第一个列出的域会抓取请求。
例如,我有以下示例。但是当客户端请求 beta.com 时,nginx 服务器会使用 alpha.com 页面进行响应。
哦,我已经阅读了其他类似的帖子,并尝试取消评论
server_names_hash_bucket_size 64;
但没有帮助。
cd /etc/nginx
# ls sites-enabled
alpha -> /etc/nginx/sites-available/alpha
beta -> /etc/nginx/sites-available/beta
# cat sites-available/alpha
server {
listen 80;
#listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html/alpha;
index index.html index.htm;
server_name alpha.com *.alpha.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
# cat sites-available/beta
server {
listen 80;
#listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html/beta;
index index.html index.htm;
server_name beta.com *.beta.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
答案1
仅针对那些在搜索结果中看到此链接后可能会来这里的用户:
有两种情况可能导致这种情况,它们都是 Nginx 配置。
首先,如果您启用的任何站点启用了 IPv6 监听,但其他站点没有,则您的系统可能默认首先尝试 IPv6,并且可能会被选中。奇怪的行为,但当我对其进行故障排除并专门测试时似乎确实如此。
第二个是您的访问日志可能会告诉您堆或存储桶大小不足以创建哈希。这意味着 Nginx 无法构建正确的“此域名映射到此服务器块”。尝试增加堆大小(通常默认为 2048,为了测试,我将其翻倍为 4096)和存储桶大小(通常默认为 64,为了测试,我将其翻倍为 128)。
确保所有服务器块都有针对 IPv6 的监听语句或将其删除,以及调整堆和存储桶大小,可以在本地开发环境中为我解决此问题。