• Главная
  • Карта сайта
Не найдено

Установка і настройка nginx + php під Windows

  1. Крок 1. Підготовка до встановлення
  2. Крок 2. Завантаження необхідних компонентів
  3. Крок 3. Установка компонентів
  4. Крок 4. Створення скриптів запуску і зупинки
  5. Крок 5. Налаштування nginx
  6. Крок 6. Налаштування php і безпеку
  7. Крок 7. Обробка декількох PHP-файлів одночасно
  8. Крок 8. Тестування і висновок
  9. Крок 9. Готові приклади файлів конфігурації

З даного HOWTO Ви дізнаєтеся як встановити та налаштувати зв'язку nginx + php (в режимі FastCGI) + СУБД MySQL для роботи під операційною Microsoft Windows.

Ми детально розглянемо питання установки, базової та розширеної настройки, а також безпеки.

У статті наводяться приклади скриптів запуску і зупинки, а також приклади файлів конфігурації nginx і php.

Подробиці дивіться під катом.

Крок 1. Підготовка до встановлення

Для початку рекомендуємо в корені системного диска створити каталог nginx (наприклад, c: \ nginx \), а в ньому підкаталоги public_html, php і mysql. Найкраще зв'язка працює, коли всі основні компоненти знаходяться в одному каталозі. В каталог php ми будемо встановлювати інтерпретатор PHP5, в mysql відповідно дану СУБД, а в public_html - файли головного сайту.

Розмістивши всі компоненти таким чином, Ви зробите пакет переміщуються (Portable) і готовим до роботи з будь-якого комп'ютера.

Крок 2. Завантаження необхідних компонентів

Нам будуть потрібні наступні компоненти:

  1. PHP - http://windows.php.net/download/ . Вам необхідно завантажити версію з інсталятором (* .msi) в варіанті Thread Safe;
  2. MySQL - http://dev.mysql.com/downloads/mysql/ . Також скачайте версію з msi-інсталятором;
  3. nginx - http://nginx.org/ru/download.html . Скачайте останню версію;
  4. RunHiddenConsole - http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip .

Крок 3. Установка компонентів

Після закінчення завантаження приступайте до установки компонентів згідно з цим алгоритмом:

  1. розпакуйте архів з nginx в створений на кроці 1 каталог в корені (наприклад, c: \ nginx \). Далі в даному HOWTO буде використовуватися саме цей каталог, тому якщо Ви змінили шлях, зробіть відповідні правки;
  2. встановіть PHP в каталог c: \ nginx \ php \:
    1. на етапі вибору типу установки (Web Server Setup) обов'язково виберіть варіант «Other CGI«, інакше модулі, необхідні для роботи PHP в режимі FastCGI НЕ будуть встановлені; З даного HOWTO Ви дізнаєтеся як встановити та налаштувати зв'язку nginx + php (в режимі FastCGI) + СУБД MySQL для роботи під операційною Microsoft Windows PHP - Web Server Setup
    2. на етапі вибору необхідних модулів (Choose Items to Install) обов'язково виберіть MySQL, MySQLi і OpenSSL (якщо хочете далі налаштувати SSL). Також рекомендується вибрати модулі, необхідні для більшості CMS: bzip2, Curl, Exif, GD2, Gettext, XML. Якщо Ви забули щось потрібне і воно Вам потрібно, Ви завжди зможете доустановити / видалити ці компоненти, знову запустивши програму установки PHP і вибравши пункт Change. PHP - вибір компонентів
  3. встановіть СУБД MySQL в каталог c: \ nginx \ mysql \. Тут немає нічого складного. У майстра конфігурації виберіть стандартну конфігурацію і обов'язково задайте пароль адміністратора (пароль вбудованої облікового запису суперкористувача root);
  4. розпакуйте архів RunHiddenConsole.zip в каталог c: \ nginx \.

Крок 4. Створення скриптів запуску і зупинки

Для швидкого запуску набору Вам потрібно створити в каталозі c: \ nginx \ 3 файлу: start.cmd, shutdown.cmd і restart.cmd, призначені відповідно для запуску, зупинки та перезапуску серверів.

Лістинг файлу start.cmd (запуск сервера):

@echo off echo Starting servers ... set PHP_FCGI_MAX_REQUESTS = 0 set SRVPATH = C: \ nginx net start MySQL start / D% SRVPATH% nginx.exe% SRVPATH% \ RunHiddenConsole.exe% SRVPATH% \ php \ php-cgi.exe -b 127.0.0.1:9000 -c% SRVPATH% / php / php.ini

Лістинг файлу shutdown.cmd (зупинка сервера):

@echo off echo Shutting down servers ... taskkill / IM nginx.exe / F taskkill / IM php-cgi.exe / F net stop MySQL

Лістинг файлу restart.cmd (перезапуск сервера):

@echo off echo Shutting down servers ... taskkill / IM nginx.exe / F taskkill / IM php-cgi.exe / F net stop MySQL echo Starting servers ... set PHP_FCGI_MAX_REQUESTS = 0 set SRVPATH = C: \ nginx net start MySQL start / D% SRVPATH% nginx.exe% SRVPATH% \ RunHiddenConsole.exe% SRVPATH% \ php \ php-cgi.exe -b 127.0.0.1:9000 -c% SRVPATH% / php / php.ini

Якщо Ви змінили шлях зі стандартного C: \ nginx \, на щось інше, внесіть відповідні правки в скрипти.

Якщо потрібно запускати сервер nginx + php + mysql при завантаженні системи, то додайте завдання на автозапуск скрипта start.cmd за допомогою оснастки Призначені завдання Windows.

Крок 5. Налаштування nginx

Відкрийте файл c: \ nginx \ conf \ nginx.conf в будь-якому текстовому редакторі (я рекомендую Notepad ++).

1. Змініть рядок:

worker_processes 1;

Тут замість 1 вкажіть кількість робочих процесів nginx. Рекомендується вказувати число, що дорівнює кількості ядер процесора.

2. Приберіть символ коментаря (грати) у рядки:

error_log logs / error.log;

Це дозволить включити запис логів помилок в файл error.log, який Ви завжди знайдете в каталозі c: \ nginx \ logs \.

3. Змініть значення директиви server {} для nginx без використання SSL:

server {listen 80 default; server_name localhost; server_tokens off; #charset koi8-r; #access_log logs / access.log main; location / {root c: / nginx / public_html; index index.html index.htm index.php; } Location ~ \ .php $ {fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; include fastcgi_params; } Location ~ /\.ht {deny all; } #Error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html {root html; }}

Якщо Ви хочете використовувати SSL, Вам потрібно зовсім інший конфиг:

server {listen 443 default; server_name localhost; server_tokens off; ssl on; ssl_certificate C: /nginx/private/ssl_cert_domain.pem; ssl_certificate_key C: /nginx/private/ssl_cert_domain.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:! ADH:! EXPORT56: RC4 + RSA: + HIGH: + MEDIUM: + LOW: + SSLv2: + EXP; ssl_prefer_server_ciphers on; #charset koi8-r; #access_log logs / access.log main; location / {root c: / nginx / public_html; index index.html index.htm index.php; } Location ~ \ .php $ {fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; include fastcgi_params; fastcgi_param HTTPS on; } #Error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html {root html; } Location ~ /\.ht {deny all; }}

Тут C: /nginx/private/ssl_cert_domain.pem - файл сертифіката SSL, а C: /nginx/private/ssl_cert_domain.key - закритий ключ для нього. Увага! При старті сервера у Вас запитають пароль для розшифровки закритого ключа, тому щоб не вводити його постійно, під час створення (отримання) сертифіката залиште поле введення пароля порожнім (це звичайно небезпечно, але економить час під час запуску сервера). У нових версіях можливо з'явиться функція вказівки пароля в конфіги (як у Apache).

Ви можете включити ведення логів доступу (access.log), прибравши символ коментаря у рядки #access_log logs / access.log main; .

Ви також можете перевизначити сторінки помилок 404, 500, 502, 503, 504 і 403 шляхом вказівки в директиві error_page коду помилки і імені файлу, який буде відображатися при її виникненні.

Крок 6. Налаштування php і безпеку

Відкрийте текстовий файл C: \ nginx \ php \ php.ini в будь-якому текстовому редакторі. З міркувань безпеки рекомендуємо змінити рядок

safe_mode = Off

на

safe_mode = On

Також знайдіть в файлі рядок

disable_functions =

і замініть її на наступну:

disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source

Ці дії включать безпечний режим для PHP (Safe Mode), при якому заборонені більшість небезпечних функцій і виконання файлів, а також відключить ряд потенційно уразливих функцій. Увага! Якщо Ваша CMS не працює при включеному режимі PHP Safe Mode, вимкніть його, або поставте правильну CMS ;-).

Якщо Ви є розробником і хочете бачити помилки і повідомлення PHP, то знайдіть рядок

display_errors = Off

і замініть її на

display_errors = On

Для виправлення небезпечної уразливості в PHP, що дозволяє виконувати PHP-код з файлів, що, знайдіть в php.ini рядок

; Cgi.fix_pathinfo = 1

приберіть символ коментаря (;) біля неї і замініть на наступну:

cgi.fix_pathinfo = 0

Подальші налаштування файлу змінювати не потрібно - все вже налаштовано оптимально для більшості застосувань програмою установки PHP.

Крок 7. Обробка декількох PHP-файлів одночасно

На жаль, PHP в Windows не вміє створювати копії своїх примірників, тому доведеться заздалегідь запускати кілька копій і описати їх використання в конфіги nginx.

У файлі start.cmd пропишіть запуск php-cgi.exe на різні номери портів:

% SRVPATH% \ RunHiddenConsole.exe% SRVPATH% \ php \ php-cgi.exe -b 127.0.0.1:9000 -c% SRVPATH% / php / php.ini% SRVPATH% \ RunHiddenConsole.exe% SRVPATH% \ php \ php -cgi.exe -b 127.0.0.1:9001 -c% SRVPATH% / php / php.ini% SRVPATH% \ RunHiddenConsole.exe% SRVPATH% \ php \ php-cgi.exe -b 127.0.0.1:9002 -c% SRVPATH% / php / php.ini% SRVPATH% \ RunHiddenConsole.exe% SRVPATH% \ php \ php-cgi.exe -b 127.0.0.1:9003 -c% SRVPATH% / php / php.ini% SRVPATH% \ RunHiddenConsole. exe% SRVPATH% \ php \ php-cgi.exe -b 127.0.0.1:9004 -c% SRVPATH% / php / php.ini

Запустіть стільки процесів, скільки вам буде потрібно (зазвичай досить 5-20). У нашому прикладі використовується 5 примірників з номерами портів 9000 - 9004.

Відкрийте файл nginx.conf в текстовому редакторі і перед директивою server {} пропишіть наступні рядки:

upstream backend {server 127.0.0.1:9000; server 127.0.0.1:9001; server 127.0.0.1:9002; server 127.0.0.1:9003; server 127.0.0.1:9004; }

Тепер відкрийте файл fastcgi_params і на самому початку пропишіть наступне:

fastcgi_connect_timeout 1; fastcgi_next_upstream timeout; fastcgi_pass backend;

Обов'язково приберіть fastcgi_pass 127.0.0.1:9000; у всіх директивах location.

Приклад готового конфіга nginx.conf:

worker_processes 4; error_log logs / error.log; events {worker_connections 1024; } Http {include mime.types; default_type application / octet-stream; sendfile on; keepalive_timeout 65; gzip on; upstream backend {server 127.0.0.1:9000; server 127.0.0.1:9001; server 127.0.0.1:9002; server 127.0.0.1:9003; server 127.0.0.1:9004; } Server {listen 80 default; server_name localhost; server_tokens off; location / {root C: / nginx / public_html; index index.html index.htm index.php; location ~ \ .php $ {include fastcgi_params; }} Error_page 500 502 503 504 /50x.html; location = /50x.html {root html; } Location ~ /\.ht {deny all; }}}

Приклад конфіга, що використовує SSL:

worker_processes 4; error_log logs / error.log; events {worker_connections 1024; } Http {include mime.types; default_type application / octet-stream; sendfile on; keepalive_timeout 65; gzip on; upstream backend {server 127.0.0.1:9000; server 127.0.0.1:9001; server 127.0.0.1:9002; server 127.0.0.1:9003; server 127.0.0.1:9004; } Server {listen 443 default; server_name localhost; server_tokens off; ssl on; ssl_certificate C: /nginx/private/ssl_cert_domain.pem; ssl_certificate_key C: /nginx/private/ssl_cert_domain.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:! ADH:! EXPORT56: RC4 + RSA: + HIGH: + MEDIUM: + LOW: + SSLv2: + EXP; ssl_prefer_server_ciphers on; location / {root C: / nginx / public_html; index index.html index.htm index.php; location ~ \ .php $ {include fastcgi_params; fastcgi_param HTTPS on; }} Error_page 500 502 503 504 /50x.html; location = /50x.html {root html; } Location ~ /\.ht {deny all; }}}

Приклад файлу fastcgi_params:

fastcgi_connect_timeout 1; fastcgi_next_upstream timeout; fastcgi_pass backend; fastcgi_param QUERY_STRING $ query_string; fastcgi_param REQUEST_METHOD $ request_method; fastcgi_param CONTENT_TYPE $ content_type; fastcgi_param CONTENT_LENGTH $ content_length; fastcgi_param SCRIPT_NAME $ fastcgi_script_name; fastcgi_param REQUEST_URI $ request_uri; fastcgi_param DOCUMENT_URI $ document_uri; fastcgi_param DOCUMENT_ROOT $ document_root; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $ server_protocol; fastcgi_param HTTPS $ https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI / 1.1; fastcgi_param SERVER_SOFTWARE nginx / $ nginx_version; fastcgi_param REMOTE_ADDR $ remote_addr; fastcgi_param REMOTE_PORT $ remote_port; fastcgi_param SERVER_ADDR $ server_addr; fastcgi_param SERVER_PORT $ server_port; fastcgi_param SERVER_NAME $ server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_index index.php;

Крок 8. Тестування і висновок

Запустіть сервери і створіть в каталозі C: \ nginx \ public_html \ файл test.php з наступним змістом:

<? Php phpinfo (); ?>

Відкрийте цей файл у браузері за адресою http: //localhost/test.php і якщо Ви побачили інформацію про встановлений сервері, значить все працює коректно і Ви можете приступати до використання сервера.

Крок 9. Готові приклади файлів конфігурації

На численні прохання ми вирішили викласти приклади всіх файлів конфігурації nginx в Git-репозиторії . В даний момент доступно три різних готових конфіга:

  • nginx_simple.conf - найпростіший конфиг для запуску одного сайту без підтримки SSL;
  • nginx_ssl.conf - конфиг для запуску одного сайту з підтримкою SSL;
  • nginx_vhosts.conf - спеціально налаштований конфіг з відносними шляхами, підтримкою SSL, віртуальних хостів (дозволяє тримати кілька сайтів на одному сервері) і окремих балок.

Там же ви знайдете готові скрипти запуску і зупинки сервера, а також файл конфігурації PHP.

Php phpinfo (); ?
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью