使用 Nginx 通配符记录来处理自定义域

使用 Nginx 通配符记录来处理自定义域

这是我持续 4 到 5 个小时的问题:

我已经设置了一个 WordPress 多站点实例,它将处理 domain.com、subdomain.domain.com 和 customdomain.com 上的站点。将有 N 个站点使用 customdomain.com,因此我不希望为每个站点创建记录。在服务器上,我在 Apache 前面安装了 Nginx。

我想做的是在 Nginx 中设置一个通配符记录来处理所有自定义域。现在,它看起来像这样:

server {
    listen 80;
    server_name _;
    root /home/server_user/web/production;
    client_max_body_size 50M;
    client_body_buffer_size 128k;

    location / {
        access_log      off;
        proxy_pass http://localhost:8080;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $proxy_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

通过此设置,它将请求传递给 Apache 并提供动态内容,但对所有静态内容返回 404。如果我将“server_name”更改为“customdomain.com”,Nginx 将再次开始提供静态内容。当我将“server_name”更改为“_”或任何其他万能模式时,Nginx 就会失败。

有任何想法吗?

答案1

解决方案(至少对于我的配置而言):

在您的通配符记录中,“listen”指令还应包含“default”:

listen 80 default;

不要添加“server_name”指令,因为这会导致事情以难以预料的方式发生。

感谢马克斯·卡特勒帮助我解决这个问题。

答案2

参照官方文档,您有以下几种可能:

server {
  server_name   example.com  *.example.com  www.example.*;
}

server {
  server_name _ *;
}

server {
  server_name example.com *;
}

请注意,这在 0.6.x 中已发生改变,现在是:

server {
  server_name _;
}

从 nginx 0.7.12 开始,支持空服务器名称,以捕获没有“Host”标头的请求:

server {
  server_name "";
}

相关内容