当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > Nginx虚拟主机多server_name的顺序问题

Linux服务器
在Linux环境中如何配置WU-FTP服务器
Linux系统上架设VSFTP服务器实例解析
Linux中使用有状态防火墙实现FTP功能
教你如何搭建简易的Linux局网服务器
使用 Nginx 提升网站访问速度
Linux 服务器日志文件查找技巧精粹
如何在 Ubuntu 8.04 上安装KDE 4.1
基于Linux系统的Nagios网络管理模块的实现
如何使Sendmail邮件服务器的邮件用户与系统用户分离
Apache重负荷服务器应如何优化
两台linux服务器之间用RSA键对的方法SSH/SCP不需密码
在局域网中设置Linux时间服务器
构建简单易用的FAX服务器
架设Squid代理服务器
Linux服务器的一些基本应用
建立Linux下的RADIUS服务器
RedHat8.0服务器配置方案(DNS)
如何编写Linux下的客户机/服务器软件
全球信息网服务器(WebServer)
匿名(垃圾)邮件的根源—网络上几乎所有服务器都不可避免的“漏洞”

Linux服务器 中的 Nginx虚拟主机多server_name的顺序问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-04   浏览: 105 ::
收藏到网摘: n/a

今天在配置Nginx + PHP + MediaWiki中,发现一个问题:MediaWiki所在的Nginx虚拟主机绑定了多个域名,但是不管通过什么域名访问MediaWiki首页,都会被跳转到其中的一个域名上。

Nginx配置文件中没有相关的rewrite跳转规则,那么就应该是MediaWiki的PHP程序做的跳转,但是,遍历了MediaWiki目录下的所有文件以及查询了MySQL数据库中的每个表,都没有发现记录有这个域名。后来,通过查看源代码发现MediaWiki是根据$_SERVER['SERVER_NAME']做的跳转,顺藤摸瓜,发现了下列问题:
  在一个Nginx虚拟主机中,可以绑定多个server_name,例如:
  
  而server_name的先后顺序的不同,对PHP程序中使用$_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')获取服务器域名是有影响的:
  
  

  $_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')获取的始终将是Nginx server_name配置中的第一个域名,这一点在程序开发中需要注意。这第一个域名就相当于Apache虚拟主机配置中的ServerName,后面的域名就相当于Apache的ServerAlias。