Установка Nginx · 5 min read · Dec 31, 2025
Установка Nginx с поддержкой PHP5 и MySQL на Debian Squeeze
Установка Nginx с поддержкой PHP5 и MySQL на Debian Squeeze
Версия 1.0
Автор: Фалко Тимме
Следите за мной в Twitter
Nginx (произносится как “engine x”) — это бесплатный, открытый, высокопроизводительный HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. Этот учебник показывает, как вы можете установить Nginx на сервер Debian Squeeze с поддержкой PHP5 (через FastCGI) и поддержкой MySQL.
Я не даю никаких гарантий, что это сработает для вас!
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 Squeeze, который мы можем установить следующим образом:
apt-get install nginxЗапустите nginx после этого:
/etc/init.d/nginx startКорневая директория по умолчанию для nginx — /var/www, которая еще не существует; поэтому мы должны создать ее следующим образом:
mkdir /var/www
chown www-data:www-data /var/wwwВведите IP-адрес или имя хоста вашего веб-сервера в браузере (например, http://192.168.0.100), и вы должны увидеть следующую страницу:

Вы получите ошибку 403 запрещено, потому что в /var/www нет индексной страницы.
4 Установка PHP5
Мы можем заставить PHP5 работать в nginx через FastCGI. К счастью, Debian Squeeze предоставляет пакет PHP5 с поддержкой FastCGI, который мы устанавливаем следующим образом (вместе с некоторыми модулями PHP5, такими как php5-mysql, которые вам нужны, если вы хотите использовать MySQL из ваших PHP-скриптов):
apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache 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 предоставляет *реальную* поддержку PATH_INFO/PATH_TRANSLATED для CGI. PHP ; предыдущее поведение заключалось в том, чтобы устанавливать 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=1 [...] |
Отдельного пакета демона FastCGI для Debian Squeeze нет, поэтому мы используем программу spawn-fcgi из lighttpd. Мы устанавливаем lighttpd следующим образом:
apt-get install lighttpdВы увидите сообщение об ошибке, что lighttpd не может запуститься, потому что порт 80 уже используется:
Starting web server: lighttpd2011-02-24 01:43:18: (network.c.358) can't bind to port: 80 Address already in use
failed!
invoke-rc.d: initscript lighttpd, action "start" 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; ## listen for ipv4 listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www; 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; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /var/www/nginx-default; #} # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...] |
servername ; делает это стандартным хостом по умолчанию (конечно, вы также можете указать здесь имя хоста, например www.example.com).
В части location / я добавил index.php в строку индекса. root /var/www; означает, что корневая директория — это каталог /var/www.
Важная часть для PHP — это блок location ~ .php$ {}. Раскомментируйте его, чтобы включить. Пожалуйста, убедитесь, что вы изменили строку fastcgi_param на fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; (замените /var/www на корневую директорию вашего vhost), потому что в противном случае интерпретатор PHP не найдет PHP-скрипт, который вы вызываете в своем браузере.
Убедитесь, что между include и fastcgi_params; есть пробелы — в файле по умолчанию это написано как одно слово, что является ошибкой.
Теперь сохраните файл и перезапустите nginx:
/etc/init.d/nginx restartТеперь создайте следующий PHP-файл в корневой директории /var/www:
vi /var/www/info.php| |
Теперь мы вызываем этот файл в браузере (например, http://192.168.0.100/info.php):

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

6 Ссылки
- nginx: http://nginx.net/
- nginx Wiki: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- MySQL: http://www.mysql.com/
- Debian: http://www.debian.org/
Об авторе
Фалко Тимме является владельцем Timme Hosting (ультрабыстрая веб-хостинг на nginx). Он является ведущим куратором HowtoForge (с 2005 года) и одним из основных разработчиков ISPConfig (с 2000 года). Он также внес вклад в книгу O’Reilly “Администрирование систем Linux”.
Get new posts in your inbox
No spam. Unsubscribe anytime.