我有一个模块化的Zend Framework应用程序,我想用它作为几个具有不同域名的网站的基础,即:
我想从相同的代码库和同一台服务器运行所有这些网站。我想根据主机名更改不同的设置,例如样式或可用页面。
目前这就是我获取主机名的方式:
$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 :(得分:0)
这样做的:
$requestSiteUrl = $this->serviceLocator->get('URLRequest')->getServer('HTTP_HOST');
是另一种做法:
$_SERVER['HTTP_HOST']
(但是当未设置变量时显然效果更好)。所以是的,这是一个很好的方法来找出nginx认为哪个域被请求。从技术上讲,如果出现安全漏洞:
有人只是在他们的请求中修改Host
标题。
如果您的网站位于不同的IP地址,并且有人编辑其主机文件以获得服务器的“错误”IP,然后请求该“错误”的IP地址。
< / LI>然后你可能会出现错误的网站名称。
如果您的所有网站都在同一个IP上,那么您就无法做太多关于欺骗的事情了。如果它们都在不同的IP地址上,并且您设置Nginx为每个主机使用一个server
,并且他们只是在侦听他们分配的IP地址,那么您可以更改为使用
$_SERVER['SERVER_NAME']
或Zend等价物。
然后,它只会为您提供配置文件中server_name
条目定义的服务器名称,并且是无法使用的。
只要您没有使任何安全性依赖于拥有正确的服务器名称,那么您应该没有问题。即,当人们登录到一个站点时,他们不应该也登录到其他站点,因为会话名称对于每个站点应该是唯一的。