使用 php 的多个 proxy_pass 位置

使用 php 的多个 proxy_pass 位置

我希望有两个 proxy_pass 位置和一个通用的 php-fpm 位置,这样任何 .php 请求都会转发到 fpm-php,但任何对 /el/... 或 /gl/... 的请求都会转到这些位置。这是我目前所拥有的:

server {
listen *:443 ssl;    

ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;

client_max_body_size 108M;

access_log /var/log/nginx/access.log;

root /var/www/public;
index index.php;

if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
}

location /es/ {
    proxy_pass http://<my-domain>:8200/;
}

location /gl/ {
    proxy_pass http://<my-domain>:3000/;
}

location / {

   location ~ \.php$ {
       fastcgi_pass <my-domain>:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       include fastcgi_params;
  }
}
}

此配置在所有三个方面均失败。但是,删除所有 php 位置和“if”语句对 /es/ 和 /gl/ 位置有效,因此我猜想我没有正确执行 php 位。实现此目的的最佳方法是什么?谢谢。

答案1

您应该重写:

if (!-e $request_filename) { rewrite ^.*$ /index.php last; }

作为:

try_files $uri $uri/ /index.php;

并将其移入location /块中,以避免与全局ifrewrite语句发生严重冲突。

^~在优先于正则表达式位置的前缀位置上使用修饰符。请参阅这个文件了解详情。

例如:

root /var/www/public;
index index.php;

location ^~ /es/ {
    proxy_pass http://<my-domain>:8200/;
}

location ^~ /gl/ {
    proxy_pass http://<my-domain>:3000/;
}

location / {
    try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
    try_files $uri =404;

    fastcgi_pass <my-domain>:9000;
    include fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
}

将您的fastcgi_param语句放在后面include fastcgi_params;以避免它们被包含的文件悄悄覆盖。

相关内容