Установка ПО · 4 min read · Jan 23, 2026
Установка Nginx с поддержкой PHP5 (и PHP-FPM) и MySQL (LEMP) на Debian Wheezy
Nginx (произносится как “engine x”) — это бесплатный, открытый, высокопроизводительный HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. Этот учебник показывает, как установить Nginx на сервер Debian Wheezy с поддержкой PHP5 (через PHP-FPM) и поддержкой MySQL (LEMP = L инукс + nginx (произносится как “ e ngine x”) + M ySQL + P HP).
Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
В этом учебнике я использую имя хоста server1.example.com с IP-адресом 192.168.0.100. Эти настройки могут отличаться у вас, поэтому вам нужно заменить их, где это необходимо.
2 Установка MySQL 5
Чтобы установить MySQL, мы выполняем
apt-get install mysql-server mysql-clientВам будет предложено ввести пароль для пользователя root MySQL — этот пароль действителен как для пользователя root@localhost, так и для [email protected], поэтому нам не нужно указывать пароль root MySQL вручную позже:
Новый пароль для пользователя MySQL “root”: <– вашпарольsqlroot
Повторите пароль для пользователя MySQL “root”: <– вашпарольsqlroot
3 Установка Nginx
Nginx доступен как пакет для Debian Wheezy, который мы можем установить следующим образом:
apt-get install nginxЗапустите nginx после этого:
/etc/init.d/nginx startВведите IP-адрес или имя хоста вашего веб-сервера в браузере (например, http://192.168.0.100), и вы должны увидеть следующую страницу:

Корневая директория по умолчанию для nginx на Debian Wheezy — /usr/share/nginx/www.
4 Установка PHP5
Мы можем заставить PHP5 работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно для более загруженных сайтов), который мы устанавливаем следующим образом:
apt-get install php5-fpmPHP-FPM — это демон-процесс (с init-скриптом /etc/init.d/php5-fpm), который запускает сервер FastCGI на сокете /var/run/php5-fpm.sock.
5 Настройка nginx
Конфигурация nginx находится в /etc/nginx/nginx.conf, который мы сейчас откроем:
vi /etc/nginx/nginx.confКонфигурация проста для понимания (вы можете узнать больше об этом здесь: http://wiki.nginx.org/NginxFullExample и здесь: http://wiki.nginx.org/NginxFullExample2)
Сначала (это необязательно) отрегулируйте количество рабочих процессов и установите keepalive_timeout на разумное значение:
| [...] worker_processes 4; [...] keepalive_timeout 2; [...] |
Виртуальные хосты определяются в контейнерах server {}. Стандартный виртуальный хост определяется в файле /etc/nginx/sites-available/default — давайте изменим его следующим образом:
vi /etc/nginx/sites-available/default| [...] server { listen 80; ## listen for ipv4; this line is default and implied listen [::]:80 default_server ipv6only=on; ## listen for ipv6 root /usr/share/nginx/www; index index.php index.html index.htm; # Сделать сайт доступным по адресу http://localhost/ server_name localhost; location / { # Сначала попытка обслужить запрос как файл, затем # как директорию, затем вернуться к отображению 404. try_files $uri $uri/ /index.html; # Раскомментируйте, чтобы включить naxsi в этом местоположении # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; autoindex on; allow 127.0.0.1; allow ::1; deny all; } # Только для nginx-naxsi, используемого с nginx-naxsi-ui: обрабатывать отклоненные запросы #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # перенаправить страницы ошибок сервера на статическую страницу /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/www; } # передать PHP-скрипты серверу FastCGI, слушающему на 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # ЗАМЕТКА: Вы должны иметь "cgi.fix_pathinfo = 0;" в php.ini # С php5-cgi отдельно: #fastcgi_pass 127.0.0.1:9000; # С php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } # запретить доступ к файлам .htaccess, если корневая директория Apache # совпадает с корневой директорией nginx # location ~ /\.ht { deny all; } } [...] |
Раскомментируйте обе строки listen, чтобы сделать nginx доступным на порту 80 для IPv4 и IPv6.
servername ; делает это стандартным виртуальным хостом (конечно, вы также можете указать здесь имя хоста, например www.example.com).
Я добавил index.php в строку индекса. root /usr/share/nginx/www; означает, что корневая директория — это каталог /usr/share/nginx/www.
Важная часть для PHP — это блок location ~ .php$ {}. Раскомментируйте его, чтобы включить его. Обратите внимание, что я добавил строку try_files $uri =404; чтобы предотвратить эксплойты нулевого дня (см. http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP и http://forum.nginx.org/read.php?2,88845,page=3).
Теперь сохраните файл и перезагрузите nginx:
/etc/init.d/nginx reloadДалее откройте /etc/php5/fpm/php.ini…
vi /etc/php5/fpm/php.ini… и установите cgi.fix_pathinfo=0:
| [...] ; cgi.fix_pathinfo предоставляет *реальную* поддержку PATH_INFO/PATH_TRANSLATED для CGI. PHP's ; предыдущее поведение заключалось в том, чтобы устанавливать PATH_TRANSLATED в SCRIPT_FILENAME и не понимать, ; что такое PATH_INFO. Для получения дополнительной информации о PATH_INFO смотрите спецификации cgi. Установка ; этого в 1 заставит PHP CGI исправить свои пути в соответствии со спецификацией. Установка ; нуля заставляет PHP вести себя как раньше. Значение по умолчанию — 1. Вы должны исправить свои скрипты ; чтобы использовать SCRIPT_FILENAME, а не PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |
Перезагрузите PHP-FPM:
/etc/init.d/php5-fpm reloadТеперь создайте следующий PHP-файл в корневой директории /usr/share/nginx/www:
vi /usr/share/nginx/www/info.php| |
Теперь мы вызываем этот файл в браузере (например, http://192.168.0.100/info.php):

Как вы видите, PHP5 работает, и он работает через FPM/FastCGI, как показано в строке Server API. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP5. MySQL там не указан, что означает, что у нас еще нет поддержки MySQL в PHP5.
Get new posts in your inbox
No spam. Unsubscribe anytime.