一个 nginx 站点中的多个 fpm 套接字按位置
Multiple fpm socket in one nginx site by locations
想象一下 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/)(.*)/$ / permanent;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/;
}
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;
其他
我该怎么做?感谢任何帮助
设置一个默认套接字,并为其他套接字匹配单独的路径。
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; }
...
}
}
想象一下 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/)(.*)/$ / permanent;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/;
}
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;
其他
我该怎么做?感谢任何帮助
设置一个默认套接字,并为其他套接字匹配单独的路径。
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; }
...
}
}