При использовании NGINX Plus с FastCGi (PHP-FPM) проблема заключается в том, что нам необходимо иметь одинаковый набор файлов как для Nginx Plus, так и для серверов FastCGI.
Вот моя примерная конфигурация: -
Машина 1: машина Nginx Plus 2: FastCGI (PHP-FPM)
Моя конфигурация Nginx:
server {
listen 80;
server_name kp.in;
root /var/example/;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 172.16.38.179:9000;
fastcgi_index index.php;
........
........
}
У меня есть простой файл "hello.php" в /var/example/(Document Root) как в NGINX, так и в FastCGI Server. Если я удалю hello.php из корня документа NGINX, то в браузере Nginx говорит 404 Не найден.
Есть ли какая-нибудь работа для этого? В идеале я хочу сохранить весь файл PHP на сервере FastCGi (PHP-FPM), а не хранить его на нескольких серверах.
Общая реализация nginx
и php-fpm
помещает обе службы на один и тот же сервер в одной и той же файловой системе. И распространенная техника, чтобы избежать передачи неконтролируемых запросов на PHP, заключается в добавлении директивы try_files
в блок местоположения PHP.
Цель try_files
- убедиться, что файл существует в локальной файловой системе, прежде чем передать его имя локальному интерпретатору PHP.
Если интерпретатор не является локальным, следует использовать другие методы, чтобы избежать отправки неправильных имен файлов в восходящий fastcgi_split_path_info
, таких как fastcgi_split_path_info
.
В вашем конкретном случае regex \.php$
не принимает pathinfo и поэтому не подвержен эксплойту pathinfo. Просто удалите try_files $uri =404;
из вашего location ~ \.php$
container. Вы также можете потерять fastcgi_index
поскольку контейнер также не видит ни одного каталога.
location ~ \.php$ {
fastcgi_pass 172.16.38.179:9000;
...
}