Одинаковые проблемы с файлами в Nginx и FastCG на отдельных серверах

1

При использовании 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
fastcgi

1 ответ

0

Общая реализация 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;
    ...
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню