我的任务是优化基于每个客户提供照片的网络服务。因此,客户A可以使用customerA.domain.com并在光滑的页面上呈现他自己的图像 目前,每个子域都植根于每个自己的Web根目录(具有相应的index.php等)。现在我要统一这些网站,以便只使用一个webroot,子域是决定使用哪组照片(按编号文件夹组织)的因素。这是为了保持网站的可扩展性和可变性。
为了实现这一点,我想到了以下需要满足的条件:
我提出的部分(可能?)解决方案:
一个客户nginx配置的示例,相当默认。
server {
listen 80; ## listen for ipv4; this line is default and implied
listen 443; ## listen for ipv4; this line is default and implied
ssl on;
ssl_certificate /mnt/www-cluster22/scripts/cert/2018/thedomain.crt;
ssl_certificate_key /mnt/www-cluster22/scripts/cert/2018/privatekey.key;
root /mnt/www-cluster22/foto_cms/32;
index index.php index.html index.htm;
server_name customerA.thedomain.com;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
access_log /var/log/nginx/customerA.access.log;
error_log /var/log/nginx/customerA.error.log;
}
如果可能,如何修改nginx配置以在GET参数前加上静态ID?如何将所有指定的子域名汇集到同一个webroot?
现在,完全有可能我只是做了错误的搜索查询,因为我没有找到解决方案(谷歌也不是SO)我的问题,我无法想象我是第一个有问题的人那种。
感谢您的帮助。
答案 0 :(得分:0)
以下是您提到的两种方式:
在这里,每个客户都有一个服务器块,必要时手动将userid变量设置为每个客户端。
server {
...
server_name customerA.thedomain.com;
location ~ \.php$ {
set $args $args&userid=123; # Here's how to append a GET variable
...
}
...
}
PHP:
<?php
$user_id = $_GET['userid'];
?>
或
在这里,每个客户都有一个服务器块,您可以让PHP完成查找用户ID的工作。
server {
...
server_name customerA.thedomain.com customerB.thedomain.com customerC.thedomain.com;
...
}
PHP:
<?php
$hostname = $_SERVER['HTTP_HOST'];
$customer = substr($hostname, 0, strpos($hostname, "."));
// Lookup the User ID for the $customer in the database
?>
如果你只有几个子域名,那么第一个可能更好。否则后一种选择是最好的,以防止有一个巨大的nginx配置和开箱即用的客户增长。