Поиск по сайту:

Установка Nginx с PHP и MariaDB (в качестве замены MySQL) — LEMP — на Ubuntu 15.10 (Wiley Werewolf)


Это руководство существует для этих версий ОС

  • Ubuntu 14.04 LTS (Trusty Tahr)

На этой странице

  1. 1 Предварительное примечание
  2. 2. Установка MariaDB
  3. 3 Установка Nginx
  4. 4 Установка PHP5
  5. 5 Настройка Nginx
  6. 6 Получение поддержки MariaDB/MySQL в PHP
  7. 7 Как заставить PHP-FPM использовать TCP-соединение
  8. 8 Загрузка образа виртуальной машины для этого руководства
  9. 9 ссылок

Nginx (произносится как «engine x») — это бесплатный высокопроизводительный HTTP-сервер с открытым исходным кодом. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. В этом руководстве показано, как установить Nginx на сервер Ubuntu 15.10 с поддержкой PHP (через PHP-FPM) и MariaDB (в качестве замены MySQL). Термин LEMP означает: Linux + Nginx + MySQL + PHP.

1 Предварительное примечание

В этом руководстве я буду использовать имя хоста server1.example.com с IP-адресом 192.168.1.100. Эти настройки могут отличаться для вас, поэтому вам придется заменить их там, где это необходимо.

2 Установка MariaDB

Я установлю MariaDB вместо MySQL, MariaDB — это форк MySQL, поддерживаемый первоначальным основателем MySQL Монти Видениусом, который имеет некоторые улучшения скорости и функциональности по сравнению с MySQL. Чтобы установить MariaDB, запустите:

sudo apt-get -y install mariadb-server mariadb-client

В настоящее время MariaDB не имеет пароля для пользователя root. Запустите команду mysql_secure_installation, чтобы настроить пароль и удалить тестовую базу данных.

sudo mysql_secure_installation

Вам будут заданы следующие вопросы:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

3 Установка Nginx

Nginx доступен в виде пакета для Ubuntu 15.10. Возможно, на вашем сервере установлен веб-сервер apache, и это может вызвать конфликт. Убедитесь, что apache не запущен:

ps aux | grep apache2

Если эта команда не возвращает никаких результатов, продолжайте установку Nginx.

Удалите apache, если приведенная выше команда показывает некоторые процессы apache с помощью следующих команд:

sudo systemctl stop apache2.service
sudo systemctl disable apache2.service
sudo apt-get remove apache2

Теперь мы можем установить nginx.

sudo apt-get install nginx

После этого запустите Nginx:

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Введите IP-адрес или имя хоста вашего веб-сервера в браузере (например, http://192.168.1.100), и вы должны увидеть следующую страницу:

Почему на этой странице отображается «Apache2» вместо Nginx? Текст страницы не отражает фактический работающий веб-сервер, приведенная выше страница — это просто страница по умолчанию в Ubuntu в корневом каталоге документа /var/www/html/, которая используется Apache и Nginx. Чтобы убедиться, что Nginx действительно обслуживает эту страницу, вы можете просмотреть заголовки HTTP в консоли сетевого анализа Firefox:

Или вы проверяете оболочку, с которой работает nginx:

ps aux | grep nginx

Результат должен показать процессы nginx следующим образом:

4 Установка PHP5

Мы можем заставить PHP5 работать в Nginx через PHP-FPM. PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно для загруженных сайтов), которые мы устанавливаем следующим образом:

sudo apt-get install php5-fpm

PHP-FPM — это процесс-демон (со сценарием инициализации php5-fpm), который запускает сервер FastCGI в сокете /var/run/php5-fpm.sock.

5 Настройка Nginx

Конфигурация Nginx находится в файле /etc/nginx/nginx.conf, который мы сейчас открываем в редакторе nano:

sudo nano /etc/nginx/nginx.conf

Конфигурация проста для понимания (подробнее о ней можно узнать здесь: http://wiki.nginx.org/NginxFullExample2)

Сначала (это необязательно) установите для keepalive_timeout разумное значение:

[...]
    keepalive_timeout   2;
[...]

Виртуальные хосты определяются в контейнерах server {}. Виртуальный хост по умолчанию определен в файле /etc/nginx/sites-available/default — давайте изменим его следующим образом:

sudo nano /etc/nginx/sites-available/default
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}

имя сервера _; делает это общим виртуальным хостом по умолчанию (конечно, вы также можете указать здесь имя хоста, например www.example.com).

Я добавил index.php в строку index. корень /usr/share/nginx/html; означает, что корнем документа является каталог /usr/share/nginx/html.

Важной частью PHP является строфа location ~ \.php${}. Раскомментируйте его, чтобы включить. Обратите внимание, что важно включить строку \include snippets/fastcgi-php.conf;\ в раздел местоположения PHP, чтобы предотвратить эксплойты нулевого дня (см. http://forum.nginx.org/read.php? 2,88845, стр.=3).

Теперь сохраните файл и перезагрузите nginx:

sudo service nginx reload

Затем откройте /etc/php5/fpm/php.ini...

sudo nano /etc/php5/fpm/php.ini

... и установите cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

Перезагрузите PHP-FPM:

sudo service php5-fpm reload

Теперь создайте следующий файл PHP в корне документа /var/www/html:

sudo nano /var/www/html/info.php
<?php
phpinfo();
?>

Теперь мы вызываем этот файл в браузере (например, http://192.168.1.100/info.php):

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

6 Получение поддержки MariaDB/MySQL в PHP

Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php5-mysqlnd. Это хорошая идея, чтобы установить некоторые другие модули PHP5, а также они могут вам понадобиться для ваших приложений. Вы можете искать доступные модули PHP5 следующим образом:

apt-cache search php5

Выберите те, которые вам нужны, и установите их следующим образом:

sudo apt-get install php5-mysqlnd 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-sqlite php5-tidy php5-xmlrpc php5-xsl

APCu — это бесплатный кешировщик кода операции PHP для кэширования и оптимизации промежуточного кода PHP. Он похож на другие кешировщики кода операции PHP, такие как eAccelerator и Xcache. Настоятельно рекомендуется установить один из них, чтобы ускорить вашу PHP-страницу.

APC можно установить следующим образом:

sudo apt-get install php5-apcu

Теперь перезагрузите PHP-FPM:

sudo service php5-fpm reload

Теперь перезагрузите http://192.168.1.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...

sudo nano /etc/php5/fpm/pool.d/www.conf

... и сделайте так, чтобы строка прослушивания выглядела следующим образом:

[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]

Это заставит PHP-FPM прослушивать порт 9000 на IP 127.0.0.1 (localhost). Убедитесь, что вы используете порт, который не используется в вашей системе.

Затем перезагрузите PHP-FPM:

sudo php5-fpm reload

Затем просмотрите конфигурацию nginx и все ваши виртуальные хосты и измените строку fastcgi_pass unix:/var/run/php5-fpm.sock; на fastcgi_pass 127.0.0.1:9000; например, как это:

sudo nano /etc/nginx/sites-available/default
[...]
 
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
}
[...]

Наконец, перезагрузите nginx:

sudo service nginx reload

8 Загрузка образа виртуальной машины из этого руководства

Это руководство доступно в виде готового к использованию образа виртуальной машины в формате ovf/ova, совместимого с VMWare и Virtualbox. Образ виртуальной машины использует следующие данные для входа:

Вход по SSH/оболочке

Имя пользователя:admin
Пароль:howtoforge

У этого пользователя есть права sudo.

Войти

Имя пользователя: root
Пароль: howtoforge

IP виртуальной машины 192.168.1.100, его можно изменить в файле /etc/network/interfaces. Пожалуйста, измените все указанные выше пароли, чтобы защитить виртуальную машину.

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/
  • Убунту: http://www.ubuntu.com/