nginx为每个虚拟主机设置上游变量



我的目标是拥有可配置的上游,这样我就可以为每个项目/虚拟主机使用我需要的任何php版本。

我试过了:

upstream php {
    server php7-fpm-alpine:9000;
}
server {
    listen       80;
    server_name  somesite.com;
    root         /www/somesite.com;
    include /etc/nginx/nginx-wp-common.conf;
}

nginx-wp-common.conf有fastcgi_pass php;

我的设置适用于1个站点,但一旦我开始为其他域添加更多虚拟主机,nginx就会抱怨:

duplicate upstream "php"

正如你所看到的,我的目标是选择上游和DRY原则的模块化。

如果每个版本的php的上游名称(php)都应该相同,那么您必须将上游块移动到外部文件中,并包含所需的块。

例如:

移动

upstream php {
    server php7-fpm-alpine:9000;
}

到文件/etc/nginx/upstream-hp7.conf

并将该文件包含在/etc/nginx/nginx-wp-common.conf 中

可以选择创建具有不同名称的不同上游(如上游php7{…}),并在fastcgi_pass 中使用所需的名称

编辑:

另一种选择:

定义不同的上游区块:

upstream php5 {
    server php5-fpm-alpine:9000;
}
upstream php7 {
    server php7-fpm-alpine:9000;
}

修改你的服务器块,为不同的vhosts 设置不同的$upstream值

server {
    listen       80;
    server_name  somesite.com;
    root         /www/somesite.com;
    set $upstream php7;
    include /etc/nginx/nginx-wp-common.conf;
}
server {
    listen       80;
    server_name  othersite.com;
    root         /www/othersite.com;
    set $upstream php5;
    include /etc/nginx/nginx-wp-common.conf;
}

修改nginx-wp-common.conf

fastcgi_pass $upstream;

最新更新