2013-03-12 32 views
0

我有一个模块化的Zend Framework应用程序,我想为基础,使用了几个网站有不同的领域,即:的Nginx + Zend框架2 +运行从相同的代码不同领域的多个网站

  • mywebsite.com
  • mydifferentwebsite.com
  • mythirdwebsite.com

我想从同一个代码库,并在同一台服务器上运行所有这些网站。我想根据主机名来更改不同的设置,例如样式或可用页面。

目前,这是我如何得到主机名:

$requestSiteUrl = $this->serviceLocator->get('URLRequest')->getServer('HTTP_HOST'); 

但是我不知道如何可靠,这将是。有没有更好的方法来找出请求来自哪个网站?

下面是一个例子Nginx的配置我使用了不同服务器上的网站:

server { 
     listen 80; 
     server_name mywebsite.com; 

     root /var/www/mywebsite/public; 
     index index.php; 

     server_tokens off; 

     if (!-e $request_filename) { 
       rewrite ^.*$ /index.php last; 
     } 

     location ~ \.php$ { 
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_index index.php; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       fastcgi_param APPLICATION_ENV develop; 
       fastcgi_param PHP_VALUE "error_log=/var/log/php/mywebsite_php_errors.log"; 
       include /etc/nginx/fastcgi_params; 
     } 
} 

回答

0

这样做:

$requestSiteUrl = $this->serviceLocator->get('URLRequest')->getServer('HTTP_HOST'); 

正在做的另一种方式:

$_SERVER['HTTP_HOST'] 

(但是当变量没有设置时显然会更好)。所以是的,这是找出nginx认为请求哪个域的好方法。技术上存在一个安全漏洞,如果:

  • 有人只是修改他们的请求Host头。

  • 如果您的网站位于不同的IP地址,并且某人编辑其主机文件以使服务器具有“错误”IP,然后向该“错误”IP地址发出请求。

然后你可能会出现错误的网站名称。

如果您的所有网站都在同一个IP上,那么您可以对欺骗进行很多操作。如果他们都在不同的IP地址,而你设置Nginx的使用每台主机一个server,和他们只是听他们分配的IP地址,然后你可以改变使用

$_SERVER['SERVER_NAME'] 

或等同的Zend 。

然后,这只会给你的配置文件中的server_name条目所定义的服务器名称,并且是不可避免的。

只要你没有使任何安全依赖于具有正确的服务器名称,那么你应该没有问题。即当人们登录到一个站点时,他们不应该也登录到其他站点,因为会话名称应该是唯一的每个站点。

相关问题