Установка Nginx · 4 min read · Dec 30, 2025
Установка Nginx с поддержкой PHP5 и MySQL на Debian Lenny
Установка Nginx с поддержкой PHP5 и MySQL на Debian Lenny
Версия 1.0
Автор: Фалко Тимме
Nginx (произносится как “engine x”) — это бесплатный, открытый, высокопроизводительный HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. Этот учебник показывает, как установить Nginx на сервер Debian Lenny с поддержкой PHP5 (через FastCGI) и поддержкой MySQL.
Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
В этом учебнике я использую имя хоста server1.example.com с IP-адресом 192.168.0.100. Эти настройки могут отличаться у вас, поэтому вам нужно заменить их в соответствующих местах.
2 Установка MySQL 5.0
Для установки MySQL мы выполняем
aptitude install mysql-server mysql-clientВам будет предложено ввести пароль для пользователя root MySQL — этот пароль действителен для пользователя root@localhost, а также для [email protected], поэтому нам не нужно будет указывать пароль root MySQL вручную позже:
Новый пароль для пользователя MySQL “root”: <– вашпарольmysql
Повторите пароль для пользователя MySQL “root”: <– вашпарольmysql
3 Установка Nginx
Nginx доступен в виде пакета для Debian Lenny, который мы можем установить следующим образом:
aptitude install nginxЗапустите nginx после этого:
/etc/init.d/nginx startВведите IP-адрес или имя хоста вашего веб-сервера в браузере (например, http://192.168.0.100), и вы должны увидеть страницу приветствия nginx:

4 Установка PHP5
Мы можем заставить PHP5 работать в nginx через FastCGI. К счастью, Debian Lenny предоставляет пакет PHP5 с поддержкой FastCGI, который мы устанавливаем следующим образом (вместе с некоторыми модулями PHP5, такими как php5-mysql, которые вам нужны, если вы хотите использовать MySQL из ваших PHP-скриптов):
aptitude install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xslЗатем откройте /etc/php5/cgi/php.ini и добавьте строку cgi.fix_pathinfo = 1 в самом конце файла:
vi /etc/php5/cgi/php.ini| [...] cgi.fix_pathinfo = 1 |
Пакета отдельного демона FastCGI для Debian Lenny нет, поэтому мы используем программу spawn-fcgi из lighttpd. Мы устанавливаем lighttpd следующим образом:
aptitude install lighttpdВы увидите сообщение об ошибке, в котором говорится, что lighttpd не может запуститься, потому что порт 80 уже используется:
Starting web server: lighttpd2009-03-19 15:58:09: (network.c.300) can't bind to port: 80 Address already in use
failed!Так и должно быть, потому что nginx уже слушает на порту 80. Выполните
update-rc.d -f lighttpd removeчтобы lighttpd не запускался при загрузке.
Мы установили lighttpd, потому что нам нужна только одна программа, которая входит в пакет, /usr/bin/spawn-fcgi, которую мы можем использовать для запуска процессов FastCGI. Ознакомьтесь с
spawn-fcgi --helpчтобы узнать больше об этом.
Чтобы запустить демон PHP FastCGI, слушающий на порту 9000 на localhost и работающий от имени пользователя и группы www-data, мы выполняем следующую команду:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pidКонечно, вы не хотите вводить эту команду вручную каждый раз, когда загружаете систему, поэтому, чтобы система автоматически выполняла команду при загрузке, откройте /etc/rc.local…
vi /etc/rc.local… и добавьте команду в конце файла (перед строкой exit):
| [...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid [...] |
5 Настройка nginx
Конфигурация nginx находится в /etc/nginx/nginx.conf, который мы сейчас откроем:
vi /etc/nginx/nginx.confКонфигурация проста для понимания (вы можете узнать больше об этом здесь: http://wiki.codemongers.com/NginxFullExample и здесь: http://wiki.codemongers.com/NginxFullExample2)
Сначала (это необязательно) увеличьте количество рабочих процессов и установите keepalive_timeout на разумное значение:
| [...] worker_processes 5; [...] keepalive_timeout 2; [...] |
Виртуальные хосты определяются в контейнерах server {}. Дефолтный vhost определен в файле /etc/nginx/sites-available/default — давайте изменим его следующим образом:
vi /etc/nginx/sites-available/default| [...] server { listen 80; server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/nginx-default; index index.php index.html index.htm; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } #error_page 404 /404.html; # перенаправить страницы с ошибками сервера на статическую страницу /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } # проксировать PHP-скрипты на Apache, слушающий на 127.0.0.1:80 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # передать PHP-скрипты серверу FastCGI, слушающему на 127.0.0.1:9000 # location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; include fastcgi_params; } # запретить доступ к файлам .htaccess, если корень документа Apache # совпадает с корнем документа nginx # location ~ /\.ht { deny all; } } [...] |
servername ; делает это дефолтным vhost, который перехватывает все запросы (конечно, вы также можете указать здесь имя хоста, например www.example.com).
В части location / я добавил index.php в строку индекса. root /var/www/nginx-default; означает, что корень документа — это каталог /var/www/nginx-default.
Важная часть для PHP — это блок location ~ .php$ {}. Раскомментируйте его, чтобы включить. Пожалуйста, убедитесь, что вы изменили строку fastcgi_param на fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; (замените /var/www/nginx-default на корень документа вашего vhost), потому что в противном случае интерпретатор PHP не найдет PHP-скрипт, который вы вызываете в браузере.
Убедитесь, что между include и fastcgi_params; есть пробелы — в дефолтном файле это написано как одно слово, что является ошибкой.
Теперь сохраните файл и перезапустите nginx:
/etc/init.d/nginx restartТеперь создайте следующий PHP-файл в корне документа /var/www/nginx-default:
vi /var/www/nginx-default/info.php| |
Теперь мы вызываем этот файл в браузере (например, http://192.168.0.100/info.php):

Как видите, PHP5 работает, и он работает через FastCGI, как показано в строке Server API. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP5, включая модуль MySQL:

6 Ссылки
- nginx: http://nginx.net/
- Вики nginx: http://wiki.codemongers.com/Main
- PHP: http://www.php.net
- MySQL: http://www.mysql.com
- Debian: http://www.debian.org/
Get new posts in your inbox
No spam. Unsubscribe anytime.