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

Корневая директория по умолчанию для nginx на Ubuntu 14.04 — /usr/share/nginx/html.
4 Установка PHP5
Мы можем заставить PHP5 работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно для более загруженных сайтов), которую мы устанавливаем следующим образом:
apt-get install php5-fpmPHP-FPM — это демон-процесс (с init-скриптом 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 {}. Стандартный vhost определяется в файле /etc/nginx/sites-available/default — давайте изменим его следующим образом:
vi /etc/nginx/sites-available/default| [...] server { listen 80; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.php index.html index.htm; # Сделать сайт доступным по адресу http://localhost/ server_name _; 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/html; } # передать 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 ; делает это стандартным vhost для всех (конечно, вы также можете указать имя хоста, например www.example.com).
Я добавил index.php в строку index. root /usr/share/nginx/html; означает, что корневая директория — это каталог /usr/share/nginx/html.
Важная часть для 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:
service 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 ; предыдущее поведение заключалось в том, чтобы устанавливать 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:
service php5-fpm reloadТеперь создайте следующий PHP-файл в корневой директории /usr/share/nginx/html:
vi /usr/share/nginx/html/info.php| |
Теперь мы вызываем этот файл в браузере (например, http://192.168.0.100/info.php):

Как вы видите, PHP5 работает, и он работает через FPM/FastCGI, как показано в строке Server API. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP5. MySQL там не указан, что означает, что у нас еще нет поддержки MySQL в PHP5.
6 Получение поддержки MySQL в PHP5
Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php5-mysql. Также неплохо установить некоторые другие модули PHP5, так как они могут понадобиться для ваших приложений. Вы можете искать доступные модули PHP5 следующим образом:
apt-cache search php5Выберите необходимые и установите их следующим образом:
apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xslAPC — это бесплатный и открытый кэш опкодов PHP для кэширования и оптимизации промежуточного кода PHP. Он похож на другие кэши опкодов PHP, такие как eAccelerator и Xcache. Настоятельно рекомендуется установить один из них, чтобы ускорить вашу PHP-страницу.
APC можно установить следующим образом:
apt-get install php-apcТеперь перезагрузите PHP-FPM:
service php5-fpm reloadТеперь перезагрузите http://192.168.0.100/info.php в вашем браузере и снова прокрутите вниз до раздела модулей. Теперь вы должны найти много новых модулей, включая модуль MySQL:
7 Настройка PHP-FPM для использования TCP-соединения
По умолчанию PHP-FPM слушает на сокете /var/run/php5-fpm.sock. Также возможно заставить PHP-FPM использовать TCP-соединение. Для этого откройте /etc/php5/fpm/pool.d/www.conf…
vi /etc/php5/fpm/pool.d/www.conf… и измените строку listen следующим образом:
| [...] ;listen = /var/run/php5-fpm.sock listen = 127.0.0.1:9000 [...] |
Это заставит PHP-FPM слушать на порту 9000 по IP 127.0.0.1 (localhost). Убедитесь, что вы используете порт, который не занят в вашей системе.
Затем перезагрузите PHP-FPM:
php5-fpm reloadЗатем пройдите через вашу конфигурацию nginx и все ваши vhosts и измените строку fastcgi_pass unix:/var/run/php5-fpm.sock; на fastcgi_pass 127.0.0.1:9000;, например, так:
vi /etc/nginx/sites-available/default| [...] 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; } [...] |
Наконец, перезагрузите nginx:
service nginx reload8 CGI/Perl-скрипты
Если вы хотите обслуживать CGI/Perl-скрипты с помощью nginx, пожалуйста, прочитайте этот учебник: Обслуживание CGI-скриптов с помощью Nginx на Debian Squeeze/Ubuntu 11.04
Рекомендуемый способ — использовать fcgiwrap (глава 4).
9 Ссылки
- nginx: http://nginx.net/
- Вики nginx: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Ubuntu: http://www.ubuntu.com/
Get new posts in your inbox
No spam. Unsubscribe anytime.