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