Есть сервер nginx и php5-fpm в качестве fastcgi-бэкенда.
Необходимо настроить эту связку на выполнение php-кода из .html (.htm, .phtml) файлов.
Исходные данные: Debian 8.9 (jessie), nginx 1.13.5, php5-fpm 5.6.30
Необходимо выполнить ряд шагов:
1. nginx должен передавать html-файлы fastcgi-бэкенду. Для этого нужно изменить location, где прописана обработка php-файлов, либо добавить новый location:
Например, файл /etc/nginx/sites-available/mysite.ru.vhost приводим к виду:
listen XX.XX.XX.XX:80; server_name mysite.ru; index index.php index.html index.htm index.phtml; set $fastcgipass unix:/var/lib/php5-fpm/web1.sock; location / { try_files $uri $uri/ /index.php; } location ~ \.(php|htm|html|phtml)$ { try_files $uri = 404; include /etc/nginx/fastcgi_params; fastcgi_pass $fastcgipass; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
Обратите внимание на location ~ \.(php|htm|html|phtml)$
2. php5-fpm по-умолчанию отказывается обрабатывать файлы оканчивающиеся не на .php
Чтобы это исправить нужно в файле /etc/php5/php-fpm.conf (или же в файле конфигурации вашего пула, если у вас есть деление на пулы) добавить строку security.limit_extensions.
Например в файле пула /etc/php5/fpm/pool.d/web1.conf
[web1] listen = /var/lib/php5-fpm/web1.sock ... security.limit_extensions = .php .html .htm .phtml ...
P.S. Если используется панель хостинга ISPConfig, то файл пула необходимо защитить от изменений иначе панель его перезапишет и наши настройки потеряются, для защиты поставим аттрибут immutable на файл:
chattr +i /etc/php5/fpm/pool.d/web1.conf
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
Михаил, здравствуйте! Спасибо за статью. Скажите, а этот конфиг работает с версией php 7.2 ? К сожалению, у меня выдаёт ошибку: FastCGI sent in stderr: «Access to the script ‘/var/www/site/build/index.html’ has been denied (see security.limit_extensions)» while reading response header from upstream
Стоит поменять location на только html файлы — html успешно отображается при запросе. Если изменить location на php и переименовать index.html на index.php, то всё успешно загружается и php работает. Может, встречались с такой проблемой? Буду очень благодарен за помощь!
Добрый день,
прочитайте внимательно п.2 в моей инструкции и выполните его и ошибки не будет.