按位置在一个nginx站点中的多个fpm套接字

时间:2018-02-12 19:21:42

标签: php nginx nginx-location fpm

想象一下nginx中的默认网站

server {
    listen 80;
    server_name example.com;
}

server {
    listen 80 default_server;
    client_max_body_size 0;
    server_name _;

    index index.php index.html index.htm;
    set $root_path '/www/public';
    root $root_path;

    try_files $uri @rewrite;

    rewrite ^/(?!api/)(.*)/$ /$1 permanent;

    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }

    location ~ \.php$ {
        fastcgi_index /index.php;

        ##### I THINK LOCATION CONFIG MUST COMES HERE #####
        fastcgi_pass unix:/var/run/php/xxxx.sock;
        ###################################################

        include fastcgi_params;
        fastcgi_split_path_info           ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO           $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED     $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME     $document_root$fastcgi_script_name;
        access_log syslog:server=loghost,facility=local7,tag=nginx,severity=info syslogformat if=$dolog;
    }
}

我们需要在重写(到index.php)之后分隔url并将它们传递给不同的fpm套接字
例如,我想使用
fastcgi_pass unix:/var/run/php/1111.sock;之类的网址^/action-1/
其他任何内容fastcgi_pass unix:/var/run/php/2222.sock;

我该怎么做?感谢任何帮助

1 个答案:

答案 0 :(得分:2)

设置默认套接字,并匹配其他套接字的单个路径。

server {

    ...
    set $php_socket "1";

    if ($uri ~* "^/action-1/") {
        set $php_socket "2";
    }
    ...

    location ~ \.php$ {        
        ...
        if ($php_socket = '1') { fastcgi_pass unix:/var/run/php/1.sock; }
        if ($php_socket = '2') { fastcgi_pass unix:/var/run/php/2.sock; }
        ...
    }
}