Nginx+;Zend框架2+;从同一代码库运行具有不同域的多个网站

Nginx+;Zend框架2+;从同一代码库运行具有不同域的多个网站,nginx,centos,zend-framework2,Nginx,Centos,Zend Framework2,我有一个模块化的Zend Framework应用程序,我想将其用作具有不同域的多个网站的基础,即: 我的网站 MyDifferenceWebSite.com Mythird网站 我想从相同的代码库和相同的服务器上运行所有这些网站。我想根据主机名更改不同的设置,例如样式或可用页面 目前,我获取主机名的方式如下: $requestSiteUrl = $this->serviceLocator->get('URLRequest')->getServer('HTTP_HOST');

我有一个模块化的Zend Framework应用程序,我想将其用作具有不同域的多个网站的基础,即:

  • 我的网站
  • MyDifferenceWebSite.com
  • Mythird网站
我想从相同的代码库和相同的服务器上运行所有这些网站。我想根据主机名更改不同的设置,例如样式或可用页面

目前,我获取主机名的方式如下:

$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;
        }
}
做:

另一种方法是:

$_SERVER['HTTP_HOST']
(但显然,如果不设置变量,效果会更好)。因此,是的,这是一个很好的方法,可以找出nginx认为请求了哪个域。从技术上讲,如果:

  • 有人只是根据他们的请求修改
    主机

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

那么你可能会出现错误的站点名称

如果你所有的网站都在同一个IP上,那么你就不能对这种欺骗做太多的事情。如果它们都位于不同的IP地址上,并且您将Nginx设置为每个主机使用一个
服务器
,并且它们只是在侦听分配的IP地址,那么您可以更改为使用

$_SERVER['SERVER_NAME']
或Zend等效物

这样,您就只能得到配置文件中
server\u name
项定义的服务器名称,这是不可伪造的

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

$_SERVER['SERVER_NAME']