2013-03-12 35 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條目所定義的服務器名稱,並且是不可避免的。

只要你沒有使任何安全依賴於具有正確的服務器名稱,那麼你應該沒有問題。即當人們登錄到一個站點時,他們不應該也登錄到其他站點,因爲會話名稱應該是唯一的每個站點。

相關問題