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

Linux服务器
Linux Vsftpd本地用户不能登录问题
ChartDirector Linux下中文显示问题
关于Linux操作系统Fork的使用
Apache的基本设置和乱码解决方法
Apache的httpd.conf的配置详解
Linux Shell下的后台运行及其前台的转换
Linux操作系统两用户之间的信任关系
Linux操作系统下Shutdown命令-[option]
Linux系统下SSH远程登录速度慢?
Linux操作系统的时间服务器配置方法
Ubuntu Linux中文支持及编码问题
Linux下实现FTP虚拟主机的方法
Linux下查看某目录或指定文件大小的命令
Linux刷新主板BIOS的方法
闪盘(Thumb drive)装Linux系统
Linux文本模式下发送带附件的Email
删除文件提示:Operation not permitted
配置Linux的环境变量
Linux系统下硬盘挂载详细说明
Linux和Unix最常用的网络命令

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-04   浏览: 82 ::
收藏到网摘: 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。