notby.NET Logo

Установка и настройка 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.org. Доступны для скачки основная и стабильная версия nginx.

Стабильная версия больше подойдет если nginx используется для рабочих веб-сайтов, а не используется для разработки, тестирования новых возможностей nginx.

Извлекаем скаченный архив в папку D:\server\nginx\

Открыта папке "D:\server\nginx\" в Windows 11. Внутри папке веб-сервер 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 версию

Раздел "Downloads" веб-сайта windows.php.net. Доступные версии PHP для скачивания.

Если в Windows не установлены Visual C++ Redistributable для Visual Studio 2015-2019, их необходимо скачать (vc_redist.x64.exe и vc_redist.x86.exe) и установить.

Извлекаем скаченный архив в папку D:\server\php\

Открыта папке "D:\server\php\" в Windows 11. Внутри папке находятся файлы 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 и включаем необходимые расширения

В блокноте Windows 11 открыт файл "php.ini". Отображается раздел "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 выглядит следующим образом

Открыта папке "D:\server\" в Windows 11. Внутри папке находятся папки nginx, php, www и bat-файлы для управления веб-сервером.

5. Проверка веб-сервера nginx + PHP

Создаем в папке D:\server\www\ файл index.php следующего содержимого

<?php
	phpinfo();
?>

Запускаем веб-сервер скриптом web-start.bat

Открываем в браузере http://localhost/ и если все нормально, будет выведена информация о PHP.

Открыта в браузере ссылка http://localhost/. На странице успешно выведено phpinfo. PHP версии 8.3.3 работает в Windows 11.

nginx в связке с PHP успешно установлены, настроены и работают.

Если что-то не работает, смотрим лог файлы nginx (D:\server\nginx\logs\) или запускаем PHP без скрытия консоли, чтобы увидеть ошибки в ней.