Несколько местоположений 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. Каков наилучший способ достичь этого? Благодарю.
1 ответ
Вы должны переписать:
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;
чтобы они не перезаписывались включенным файлом.