
Nginx中多个server_name配置的顺序问题
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本文探讨了在Nginx配置文件中设置多个server_name时的顺序规则及其重要性,并提供了优化建议。
在配置Nginx + PHP + MediaWiki的过程中遇到了一个问题:MediaWiki所在的Nginx虚拟主机绑定了多个域名,但无论通过哪个域名访问其首页都会被跳转到其中一个特定的域名上。
`server_name`指令用于定义一个虚拟主机可以响应的域名或IP地址。当请求到达时,Nginx会检查Host头字段,并根据该字段匹配相应的`server_name`来决定将请求路由至哪台虚拟主机。在配置文件中可能会看到多个`server_name`值,这表示该虚拟主机能够处理不同的域名。
然而,在你的MediaWiki配置过程中遇到了一个问题:当一个请求到达时,PHP程序通过`$_SERVER[SERVER_NAME]`或 `getenv(SERVER_NAME)`获取的服务器名称总是使用第一个列出的`server_name`。这是因为Nginx的设计是优先响应并返回配置文件中`server_name`列表的第一个域名,而忽略后续定义的其它域名。
因此,在MediaWiki操作时无论通过哪个域名访问都会根据配置中的首个域名进行重定向。要解决这个问题有以下几种方法:
1. **调整`server_name`顺序**:将希望MediaWiki使用的域名放在 `server_name`指令的第一位,这样PHP获取到的就是这个首选的域名。
2. **使用正则表达式**:如果所有域名都遵循某种模式,可以利用Nginx配置中的正则表达式来匹配这些域名。例如,若所有域名都是以 `.example.com` 结尾,则可设置为 `server_name ~^(?
全部评论 (0)


