通配符logging与Nginx处理自定义域

这是我的4,继续5小时的问题:

我已经build立了一个WordPress多站点实例,它将在domain.com,subdomain.domain.com和customdomain.com上处理站点。 将有N个网站使用customdomain.com,所以我宁愿不为每个创buildlogging。 在服务器上,我有Nginx在Apache面前。

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

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,并为dynamic内容提供服务,但是为所有静态内容返回404。 如果我将“server_name”更改为“customdomain.com”,Nginx会再次开始提供静态内容。 当我将“server_name”更改为“_”或者任何其他的catch-all模式时,Nginx就落在了它的面前。

有任何想法吗?

解决scheme(至less在我的configuration):

在通配符logging中,“listen”指令还应包含“default”:

 listen 80 default; 

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

道具Max Cutler帮我解决这个问题。

参考官方文档 ,您有以下可能性:

 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以来,支持一个空的服务器名称,以捕获没有“主机”头的请求:

 server { server_name ""; }