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

时间:2016-05-04 11:04:25

标签: nginx docker

我的目标是配置上游,所以我可以使用每个项目/虚拟主机所需的任何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原则的模块化。

1 个答案:

答案 0 :(得分:1)

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

〔实施例:

移动

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

到文件/etc/nginx/upstream-php7.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;