Установка и настройка nginx + PHP в Windows 10/11
Есть нужен веб-сервер для Windows, идеально подойдет веб-сервер Nginx с подключенным PHP через FastCGI. В статье будет показана настройка и связка Nginx с PHP на примере Windows 11. Аналогично происходит настройка в Windows 7/8/10.
1. Структура каталогов под сервера
Удобно когда все сервера и сервисы установлены в отдельной папке. Я рекомендую сделать структуру аналогично моей.
Создаем на диске D:\ папку server (если диск один, то создаем на C). В папке server будет находится все что относится в веб-серверу, базы данных, файлы сайта.
Структура будет выглядеть так:
# Папка для серверов
D:\server\
# Папка для nginx
D:\server\nginx\
# Папка для PHP
D:\server\php\
# Папка для веб-сайтов
D:\server\www\
Создаем необходимые папки.
Подобная архитектура удобна тем, что все сервера находятся на отдельном диске в отдельной папке. Можно без проблем сделать резервное копирование, обновление серверов и так далее.
2. Установка и настройка nginx
2.1. Установка nginx
Заходим на официальный сайт Nginx https://nginx.org/ru/download.html и скачиваем последнею версию
Стабильная версия больше подойдет если nginx используется для рабочих веб-сайтов, а не используется для разработки, тестирования новых возможностей nginx.
Извлекаем скаченный архив в папку D:\server\nginx\
2.2. Конфигурация nginx (nginx.conf)
Теперь необходимо настроить сам nginx и его работу в связке с PHP.
Открываем файл конфигурации nginx.conf (в моем случае D:\server\nginx\conf\nginx.conf) и настраиваем веб-сервер nginx
# Базовый файл конфигурации nginx + PHP FastCGI
#user nobody;
worker_processes 1; # Количество запущенных процессов
#Лог ошибок
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; # Количество подключений к одному процессу
}
http {
include mime.types;
default_type application/octet-stream;
# Лог доступа
access_log off;
#access_log logs/access.log main;
gzip on; # Использовать сжатие
# Разделов server может быть неограниченное количество
#
# Раздел server для домена сайта localhost по 80 порту
server {
listen 80; # Порт
server_name localhost; # Домен сайта
charset utf-8; # Кодировка сайта
error_log logs/localhost.error.log; # Лог ошибок сайта
access_log logs/localhost.access.log; # Лог доступа сайта
# Путь до папки сайта
root D:/server/www;
# Обработка всех URI запросов начинающихся с /
location / {
#root D:/server/www; # root определена в разделе server
index index.html index.php; # файлы в качестве индекса
}
# Настройка обработки php скриптов через PHP-FastCGI
#
# Обработка всех URI запросов оканчивающихся на .php
location ~ \.php$ {
# IP и порт PHP-FastCGI. С такими же параметрами нужно будет запускать php-cgi.exe
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# Путь до php скриптов, $document_root - путь из параметра root (папка сайта)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Сохраняем и закрываем файл.
3. Установка и настройка PHP
3.1. Установка PHP
Заходим на сайт PHP https://windows.php.net/download и скачиваем последнею Non Thread Safe версию
Если в Windows не установлены Visual C++ Redistributable для Visual Studio 2015-2019, их необходимо скачать (vc_redist.x64.exe и vc_redist.x86.exe) и установить.
Извлекаем скаченный архив в папку D:\server\php\
3.2. Конфигурация PHP (php.ini)
По умолчанию в PHP содержатся два примера конфигурации php.ini-production и php.ini-development. Версия production используется для рабочих сайтов, в ней ошибки только записываются в лог файлы веб-сервера. Версия development используется при разработке, в ней ошибки выводятся на веб-страницу и записываются в лог файлы.
Копируем и переименовываем файл php.ini-production или php.ini-development в php.ini (это основной файл конфигурации PHP).
Открываем в тестовом редакторе файл php.ini (в моем случае D:\server\php\php.ini), находим параметр extension_dir и указываем папку с расширениями PHP
; Раскомментируем параметр для Windows (относительный путь)
extension_dir = "ext"
; Или можно указать полный путь до папки с расширениями
;extension_dir = "D:\server\php\ext"
Далее находим раздел Dynamic Extensions и включаем необходимые расширения
Сохраняем и закрываем файл.
4. Скрипты запуска и остановки веб-сервера
В папке D:\server\ будут находится скрипты для управления веб-сервером.
После запуска php-cgi.exe (PHP FastCGI), он будет работать в открытом окне консоли. Если это не желательно, скачиваем утилиту RunHiddenConsole.exe в папку D:\server\ и тогда дальнейший запуск php-cgi.exe будет происходить через данную утилиту.
Создаем скрипт запуску веб-сервера web-start.bat
:: Запуск PHP FastCGI
:: Если файл RunHiddenConsole.exe существует, то запускаем PHP через утилиту
if exist "RunHiddenConsole.exe" (
:: PHP будет запущен в скрытом режиме
RunHiddenConsole.exe "php\php-cgi.exe" -b 127.0.0.1:9000 -c "php\php.ini"
) else (
start php\php-cgi.exe -b 127.0.0.1:9000 -c "php\php.ini"
)
:: Запуск nginx
cd nginx
start nginx.exe
Создаем скрипт остановки веб-сервера web-stop.bat
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe
Для удобства создаем скрипт перезапуска веб-сервера web-restart.bat
call web-stop.bat
call web-start.bat
В результате папка server выглядит следующим образом
5. Проверка веб-сервера nginx + PHP
Создаем в папке D:\server\www\ файл index.php следующего содержимого
<?php
phpinfo();
?>
Запускаем веб-сервер скриптом web-start.bat
Открываем в браузере http://localhost/ и если все нормально, будет выведена информация о PHP.
nginx в связке с PHP успешно установлены, настроены и работают.
Если что-то не работает, смотрим лог файлы nginx (D:\server\nginx\logs\) или запускаем PHP без скрытия консоли, чтобы увидеть ошибки в ней.