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

Установка Nginx с PHP 7 и MySQL 5.7 (LEMP) в Ubuntu 16.04 LTS


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

  • Ubuntu 14.04 LTS (Trusty Tahr)

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

  1. 1 Предварительное примечание
  2. 2 Установка MySQL 5.7
  3. 3 Установка Nginx
  4. 4 Установка PHP 7
  5. 5 Настройка nginx
  6. 6 Получение поддержки MySQL в PHP 7
  7. 7 Как заставить PHP-FPM использовать TCP-соединение
  8. 8 ссылок

PHP-FPM) и поддержка MySQL 5.7 (LEMP=Linux + nginx (произносится как «engine x») + MySQL + PHP).

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

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

Я выполняю все шаги в этом руководстве с привилегиями root, поэтому убедитесь, что вы вошли в систему как root:

sudo -s

2 Установка MySQL 5.7

Чтобы установить MySQL, мы запускаем:

apt-get -y install mysql-server mysql-client

Вам будет предложено ввести пароль для пользователя root MySQL — этот пароль действителен для пользователя [email , поэтому нам не нужно указывать пароль root MySQL вручную позже:

Новый пароль для пользователя \root\ MySQL: <-- yourrootsqlpassword
Повторите пароль для пользователя \root\ MySQL: <-- yourrootsqlpassword

Чтобы защитить сервер базы данных и удалить анонимного пользователя и тестовую базу данных, выполните команду mysql_secure_installation.

mysql_secure_installation

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

:~# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: <-- Press y if you want this function or press Enter otherwise.
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Press enter
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
Success.
All done!

Теперь MySQL защищен.

3 Установка Nginx

Если вы уже установили Apache2, сначала удалите его с помощью этих команд, а затем установите nginx:

service apache2 stop
update-rc.d -f apache2 remove
apt-get remove apache2

Nginx доступен в виде пакета для Ubuntu 16.04, который мы можем установить.

apt-get -y install nginx

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

service nginx start

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

Корень документа nginx по умолчанию в Ubuntu 16.04 — /var/www/html.

4 Установка PHP 7

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

apt-get -y install php7.0-fpm

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

5 Настройка nginx

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

nano /etc/nginx/nginx.conf

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

Во-первых (это необязательно) установите для параметра keepalive_timeout разумное значение:

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

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

nano /etc/nginx/sites-available/default
[...]
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.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 php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

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

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

корень /var/www/html; означает, что корнем документа является каталог /var/www/html.

Важной частью PHP является строфа location ~ \.php${}. Раскомментируйте его, чтобы включить.

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

service nginx reload

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

nano /etc/php/7.0/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:

service php7.0-fpm reload

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

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

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

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

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

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

apt-cache search php7.0

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

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

APCu – это расширение для модуля PHP Opcache, входящее в состав PHP 7. Оно добавляет некоторые функции совместимости для программного обеспечения, поддерживающего кэш APC (например, подключаемые модули кеша Wordpress).

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

apt-get -y install php-apcu

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

service php7.0-fpm reload

Теперь перезагрузите http://192.168.1.100/info.php в браузере и снова прокрутите вниз до раздела модулей. Теперь вы должны найти там много новых модулей, включая модуль MySQL:

7 Как заставить PHP-FPM использовать TCP-соединение

По умолчанию PHP-FPM прослушивает сокет /var/run/php/php7.0-fpm.sock. Также можно заставить PHP-FPM использовать TCP-соединение. Для этого откройте /etc/php/7.0/fpm/pool.d/www.conf...

nano /etc/php/7.0/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:

php7.0-fpm reload

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

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

# With php7.0-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
} [...]

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

service nginx reload

Вот и все. Сервер Nginx LEMP установлен.

8 ссылок

  • 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/