Установка Nginx, PHP и MariaDB на Windows 10
d:\server\ — директория для хранения ПО и данных сервера
d:\server\bin\ — программное обеспечение
d:\server\bin\nginx
d:\server\bin\php
d:\server\bin\mariadb
d:\server\data\ — хранение данных (например логов)
Nginx
Скачиваем последнюю версию Nginx и размещаем в директории d:\server\bin\nginx.
Настройка
В файле конфигурации D:\server\bin\nginx\conf\nginx.conf нужно добавить строку внутри блока http
и создать директорию D:\server\bin\nginx\conf\vhosts
Виртуальный хост
Для теста можно создать хост для фреймворка Laravel. Для этого нужно разместить в директории D:\server\bin\nginx\conf\vhosts файл laravel.conf
server < listen 80; server_name laravel.test; root D:/projects/php/laravel.test/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / < try_files $uri $uri/ /index.php?$query_string; >location = /favicon.ico < access_log off; log_not_found off; >location = /robots.txt < access_log off; log_not_found off; >error_page 404 /index.php; location ~ \.php$ < fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; >location ~ /\.(?!well-known).* < deny all; >>
После этого добавляем строку
127.0.0.1 localhost laravel.test
в файл C:\Windows\System32\drivers\etc\hosts
PHP
Скачиваем PHP (Non Thread Safe) и размещаем в директории d:\server\bin\php. Также нужно установить компонент Visual C++ Redistributable for Visual Studio. Ссылку на эту программу можно найти в левой боковой колонке страницы
И подключаем необходимые модули расскоментируя строки extension=имя_модуля в файле D:\server\bin\php\php.ini
MariaDB
Скачиваем последнюю версию MariaDB. Я обычно выбираю MSI-пакет и устанавливаю в директорию d:\server\bin\mariadb. Впрочем эту программу можно разместить где угодно.
Но можно скачать архивный вариант и использовать разные версии сервера. Только нужно будет в bat-файлах настроить запуск и остановку сервера.
Запуск, остановка и перезапуск сервера
Нужно скачать полезную программу RunHiddenConsole.exe, которая позволяет скрыть консоль после запуска программы. Можно сохранить в директории d:\server\bin\.
bat-файлы для управления сервером
pushd d:\server\bin\nginx start nginx.exe popd d:\server\bin\RunHiddenConsole.exe "d:\server\bin\php\php-cgi.exe" -b 127.0.0.1:9000 -c "d:\server\bin\php\php.ini"
taskkill /IM nginx.exe /F taskkill /IM php-cgi.exe /F
call stop.bat call start.bat EXIT /b
Источник:
1234ru / nginx-php-win.md
Вышеуказанные процедуры позволяют успешно запустить и использовать PHP, однако он будет «голым» — без расширений (в т.ч. таких необходимых, как mysqli , mbstring и др.) и без настроек, т.к. он не прочитает ни одного ini-файла.
PHP может автоматически загрузить файл php.ini из нескольких каталогов. Первое место, где он станет его искать — рядом с php.exe . В пакете есть файл php.ini-development . Нужно создать рядом его копию с именем php.ini , открыть и внести следующие изменения:
- Раскомментировать строку extension_dir = «ext» — в результате PHP станет искать модули расширений в подкаталоге ext рядом с php.exe
(относительный путь интерпретируется именно от exe-, а не от самого ini-файла) Проверяем, подключился ли файл, с помощью команды php —ini . Результат должен быть примерно следующим:
Configuration File (php.ini) Path: C:\Windows Loaded Configuration File: \php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
- curl
- fileinfo
- gd2
- mbstring
- exif
- mysqli
- soap
Просмотреть список подключенных расширений можно, дав команду php -m . Непустой изначально список после вышеописанной манипуляции пополнится.
PHP загружает расширения при запуске exe-файла интерпретатора. Если нужно подключить новое, следует остановить php-cgi.exe (или php.exe соответственно) и запустить его заново.
Чтобы установить связь между PHP и MySQL, не требуется никаких специальных действий, кроме собственно создания соединения (разумеется, должен быть включен соответствующий модуль, например, mysqli ).
Проверить соединение можно так:
echo "Connecting to MySQL server. "; // $host = 'localhost'; // если соединяемся через named pipe (аналог Unix-сокета), $host pl-s">."; // то в качестве хоста указываем "." $user pl-s">someone"; $password pl-s">a password"; $mysqli = new mysqli($host, $user, $password); if ($mysqli->connect_error) echo $mysqli->connect_error; else echo "Connected successfully!";
Об установке и минимальной настройке MySQL под Windows см. здесь.
Неудобства работы под Windows
- в путях файловой системы используется обратный слэш ( \ ), а не прямой ( / ) — типа D:\sites\mysite\. вместо /sites/mysite/. , что влияет, в частности, на содержимое констант __DIR__ и __FILE__ ;
как следствие, весь код, рассчитанный на разбор пути по слэшу, перестаёт работать - невозможно установить русскую локаль с UTF-8: setlocale(LC_ALL, ‘rus’) всегда приводит к использованию windows-1251, и изменить это никак не получается
PHP-FastCGI on Windows¶
NGINX can interface with PHP on Windows via a FastCGI daemon, which ships with PHP: php-cgi.exe. You need to run php-cgi.exe -b 127.0.0.1: and use fastcgi_pass 127.0.0.1:; in the NGINX configuration file. After being launched, php-cgi.exe will keep listening for connections in a command prompt window. To hide that window, use the tiny utility RunHiddenConsole
Steps¶
- Install NGINX for Win32.
- Install the Windows binaries of PHP, making sure that php-cgi.exe is installed in the same directory as php.exe .
- Create somewhere (e.g. in c:\nginx\ ) a batch file start-php-fcgi.bat similar to this one:
@ECHO OFF ECHO Starting PHP FastCGI. set PATH=C:\PHP;%PATH% c:\bin\RunHiddenConsole.exe C:\PHP\php-cgi.exe -b 127.0.0.1:9123
root c:/www; location ~ \.php$ fastcgi_pass 127.0.0.1:9123; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; >
Autostarting PHP and NGINX¶
- Schedule a basic (on Windows Vista) task to run the batch file above at system start up under the SYSTEM account.
- If using Windows NGINX from https://kevinworthington.com/nginx-for-windows/, schedule a basic (on Windows Vista) task to run C:\nginx\conf\start-nginx.bat file at system start up under the SYSTEM account in starting directory C:\nginx .
- A home made Cygwin build of NGINX can be scheduled using a batch file similar to this:
cd /d C:\cygwin\bin && bash -c /usr/local/nginx/sbin/nginx