【发布时间】:2022-01-24 21:57:49
【问题描述】:
我已经在 Ubuntu 20 上使用 nginx 几年了,现在几乎没有问题,但是在新部署的服务器上,我似乎无法做到这一点。
我在 /sites_available 中名为 alpha 的文件中有一个服务器块。服务器块的 server_name alpha.example.com 设置为文档根 = /var/www/alpha。
我在 /sites_available 中名为 beta 的文件中有一个服务器块。服务器块的 server_name beta.example.com 设置为文档根 = /var/www/beta。
alpha.example.com 和 beta.example.com 都存在 DNS 记录。
会发生什么:
URL http://beta.example.com 在浏览器地址中显示 http://beta.example.com,但从 /var/www/alpha 中提取内容。
通过实验,我发现 nginx 始终在处理sites_available 中按字母顺序排列的文件,而不管 URL 中的子域如何。
可能的问题是, 为什么它会这样?和 如何关闭它?
我想要的行为是让每个服务器块将单个子域路由到特定的文档根目录并忽略其他所有内容。 所以...http://beta.example.com 甚至没有尝试去 /var/www/alpha
这是服务器块文件内容之一的示例
server {
listen 80;
listen [::]:80;
server_name alpha.example.com;
root /var/www/alpha;
index index.php index.html index.htm index.nginx-debian.html;
access_log /var/log/nginx/alpha_access.log;
error_log /var/log/nginx/alpha_error.log;
location / {
try_files $uri $uri/ /index.php;
}
location ~ ^/(doc|sql|setup)/ {
deny all;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
deny all;
}
}
所以,换一种说法:我需要在其中添加什么来告诉 nginx“如果子域不是 alpha,请忽略所有这些......这仅适用于 alpha.example.com”?
【问题讨论】:
标签: nginx-config