我正在使用 nginx。我想实现的目标:
- 根域
domain.com
,从以下域获取内容/var/www/domain.com
sub.domain.com
获取内容的子域名/var/www/sub.domain.com
- 任何其他子域名
*.domain.com
(其中*
!=sub
)应从中获取内容/var/www/404
如果这还不清楚:它类似于 StackEchange 设置,其中http://somesub.stackexchange.com/给出 404。
我成功地使用两个具有不同 s 的服务器块进行了第一次尝试。但是,当找不到与子域匹配的服务器块时,server_name
我该如何设置要链接的 nginx ?/var/www/404
通过基本设置,所有未找到的子域都会返回与根域相同的内容。
我想使其具有通用性,这样,如果我为其添加另一个服务器块sub2.domain.com
,则不必更改 404 的块。
我现在使用的代码:
server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
charset utf-8;
location / {
index index.php index.html;
autoindex on;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
server_name sub.domain.com;
root /var/www/sub.domain.com;
charset utf-8;
location / {
index index.php index.html;
autoindex on;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
答案1
Nginx 与 Apache 一样,始终将配置列表中的第一个域用作默认域。 就您而言,这意味着对于没有自己的配置的任何域,它将选择 domain.com 的配置,因为这是第一个。
因此,解决方案很简单,只需设置另一个仅包含 404 页面的域,并将其作为列出的第一个域。然后,您可以根据需要添加任意多个特定域;仅当配置文件中没有其他匹配的域名时,才会使用第一个域。