Установка серверов · 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 su

2 Установка 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-fpm

PHP-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-xsl

APC — это бесплатный и открытый кэш опкодов 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 reload

8 CGI/Perl-скрипты

Если вы хотите обслуживать CGI/Perl-скрипты с помощью nginx, пожалуйста, прочитайте этот учебник: Обслуживание CGI-скриптов с помощью Nginx на Debian Squeeze/Ubuntu 11.04

Рекомендуемый способ — использовать fcgiwrap (глава 4).

9 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.