2015-12-11 3 views
1

При использовании NGINX Plus с FastCGi (PHP-FPM) проблема в том, что нам нужно иметь одинаковый набор файлов как на серверах Nginx Plus, так и на серверах FastCGI.Идентичные проблемы с файлами Nginx и FastCG на отдельных серверах

Вот мой пример конфигурации: -

машины 1: Nginx Plus Machine 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/(корневом документе) как в NGINX, так и в FastCGI Server. Если я удалю hello.php из корня документа NGINX, то в браузере Nginx говорит 404 Не найден.

Есть ли какая-нибудь работа для этого? В идеале я хочу сохранить весь файл PHP на сервере FastCGi (PHP-FPM), а не хранить его на нескольких серверах.

ответ

0

Общая реализация nginx и php-fpm размещает обе службы на одном сервере в одной и той же файловой системе. И общей методикой, чтобы избежать passing uncontrolled requests to PHP, является добавление директивы try_files в блок местоположения PHP.

Целью try_files является обеспечение того, чтобы файл существовал в локальной файловой системе перед передачей его имени локальному интерпретатору PHP.

Если интерпретатор не является локальным, следует использовать другие методы, чтобы избежать отправки неправильных имен файлов в восходящий поток, таких как fastcgi_split_path_info.

В вашем конкретном случае regex \.php$ не принимает pathinfo и поэтому не подвержен эксплойту pathinfo. Просто удалите строку try_files $uri =404; из вашего контейнера location ~ \.php$. Вы также можете потерять fastcgi_index, так как в контейнере также отсутствуют никовые каталоги.

location ~ \.php$ { 
    fastcgi_pass 172.16.38.179:9000; 
    ... 
}