Назад | Перейти на главную страницу

Несколько местоположений proxy_pass с php

Я хотел бы иметь два местоположения 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. Как лучше всего этого добиться? Спасибо.

Вам следует переписать:

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

так как:

try_files $uri $uri/ /index.php;

и переместите его в location / блокировать, чтобы избежать неприятных конфликтов с глобальными if и rewrite заявления.

Использовать ^~ модификатор для префиксов, которые имеют приоритет над местоположениями регулярных выражений. Видеть этот документ для подробностей.

Например:

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; чтобы избежать их молчаливого переопределения включенным файлом.