Ubuntu apache nginx php fpm

NGINX + Apache + MariaDB (MySQL) + PHP + PHP-FPM (fastCGI) + FTP + PHPMyAdmin + Memcached + Postfix на Ubuntu

Обновлено

Обновлено: 06.04.2023 Опубликовано: 24.03.2019

Используемые термины: Linux, Ubuntu, NGINX, Apache, MySQL, MariaDB, PHP-FPM, FTP, phpMyAdmin, Memcached, Postfix. Данная инструкция позволит настроить веб-сервер для решения большей части задач по размещению сайтов, порталов или веб-приложений. Она подходит для серверов на Ubuntu и других систем на основе deb-пакетов. Для RPM Linux читайте похожую инструкцию по настройке полноценного веб-сервера на CentOS. Данные команды протестированы на Ubuntu версий 18, 20 и 22.

Настройка операционной системы

* первая команда для установки пакета синхронизации времени; вторая задает часовой пояс по московскому времени; третья разрашит автозапуск chrony. 3. По умолчанию, в Ubuntu брандмауэр работает в режиме «разрешить все». Но если мы настроили защиту по максимуму, то для веб-сервера открываем следующие порты:

* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); Подробнее про настройку iptables. Для сохранения правил ставим пакет iptables-persistent:

Установка NGINX

* в данном примере мы сняли комментарий со строчки server_names_hash_bucket_size 64;
* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию. Перезапускаем nginx:

Заголовок Welcome to nginx!

* в процессе запуска мы можем увидим ошибку — возможно, в системе работает другой веб-сервер и занимает 80 порт. Как правило, это apache. Чтобы его выключить (на данном этапе он нам не нужен) вводим команду systemctl stop apache2. Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http:// . В итоге мы должны увидеть заголовок «Welcome to nginx!»: Если стартовая страница не загружается, проверяем состояние сервиса:

Установка PHP и PHP-FPM

* в каждой версии Ubuntu устанавливается своя нативная версия php. Но если нам нужно установить несколько версий PHP или конкретную версию, то использум инструкцию Установка разных версий PHP на Linux Ubuntu. Далее, в зависимости от установленной версии PHP команды и действия будут различаться. Смотрим версию php:

* обратите внимание, что мы запустили php-fpm версии 7.4 (через переменную). Но установлена может быть и другая версия — ее можно узнать по версии php командой php -v.

Настройка связки NGINX + PHP

В секции location или server редактируем параметр index на следующее значение:

Читайте также:  Вывод каталогов рекурсивно

* в данном случае мы сказали серверу сначала искать индексный файл index.php, затем остальные по списку. А внутри секции server добавим следующее:

location ~ \.php$ <
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>

* где /var/www/html — корневой путь хранения скриптов; /run/php/php7.4-fpm.sock — путь до сокетного файла для взаимодействия с php-fpm. Обратите еще раз внимание, что если в нашей системе будет установлена другая версия php, необходимо внести соответствующую корректировку. Пример файла default:

server <
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;

location / index index.php index.html index.htm;
>

location ~ \.php$ set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>
>

Информация о php (phpinfo)

Открываем браузере и переходим по адресу http:// . Мы должны увидеть сводную информацию по PHP и его настройкам: * в данном примере используется php версии 7.4.

Установка СУБД

* где New_Password — пароль, который мы хотим установить для учетной записи root. Выходим из sql-консоли:

PHP + MariaDB

В phpinfo появилась информация о поддержке MySQL

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL: * несмотря на то, что мы установили mariadb, в заголовке мы видим mysql. Так и должно быть.

Установка phpMyAdmin

* в процессе установки система может потребовать ввод пароля для пользователя phpmyadmin. Его нужно ввести дважды. Теперь создадим конфигурационный файл. Содержимое будет отличаться в зависимости от того, как мы будем настраивать наш сервер. а) Виртуальный домен в NGINX:

server <
listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpmyadmin;

location ~ \.php$ fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>
>

* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому есть нет возможность зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpmyadmin — это каталог, в который по умолчанию устанавливается phpMyAdmin. б) Используем location /phpmyadmin:

Читайте также:  Running java with oracle

server <
listen 80 default_server;

location /phpmyadmin <
root /usr/share/;
index index.php;
location ~ ^/phpmyadmin/(.+\.php)$ <
root /usr/share/;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
>
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ <
root /usr/share/;
>
>
>

  1. http://phpmyadmin.dmosk.local — если настроили phpmyadmin на отдельном виртуальном домене (способ а).
  2. http:///phpmyadmin — если настроили location /phpmyadmin (способ б).

Откроется форма для авторизации — вводим логин phpmyadmin и пароль, который мы указали при установке phpmyadmin.

Если система вернула ошибку входа из-за неправильного пароля, необходимо задать пароль для учетной записи root@localhost (рассказывается выше в разделе установки MariaDB).

Установка Memcached

Для начала, выполняем установку пакетов:

apt install memcached php-memcached

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached

Для проверки, что модуль memcached появился в PHP, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

В phpinfo появилась информация о поддержке Memcached

Установка и настройка FTP-сервера

Мы настроим ProFTPd, так как он позволит использовать виртуальных пользователей с uid пользователя www-data.

Для его установки вводим следующую команду:

Смотрим uid пользователя www-data:

* в Ubuntu это, как правило, 33.

Создаем виртуального пользователя:

ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=ftpwww —uid=33 —gid=33 —home=/var/www —shell=/usr/sbin/nologin

* где /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; ftpwww — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи (www-data); /var/www — домашний каталог пользователя; /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Открываем основной конфигурационный файл:

Снимаем комментарий или редактируем опцию:

* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.

Создаем дополнительный конфигурационный файл для proftpd:

UseIPv6 off
IdentLookups off
PassivePorts 60000 65535

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 60000 — 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl restart proftpd

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

При необходимости, можно настроить шифрование и хранение пользователей в базе данных. Подробнее в инструкции Установка и настройка ProFTPd на Ubuntu Server.

Apache

Для поддержки файла .htaccess, который используется многими сайтами, необходимо установить и настроить веб-сервер Apache.

Устанавливаем apache и модуль для php:

apt install apache2 libapache2-mod-php

Читайте также:  Что такое sampling java

Заходим в настройки портов:

* мы настроили прослушивание на порту 8080, так как на 80 уже работает NGINX. Также мы закомментировали прослушивание по 443, так как и он будет слушаться NGINX.

Теперь открываем настройку следующего модуля:

И добавляем впереди индексных файлов index.php:

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html и так далее.

Открываем основной конфигурационный файл для apache:

Рядом с опциями Directory дописываем:


AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted

* где Directory указывает на путь, для которого мы хотим задать настройки; AllowOverride — позволит переопределить все настройки с помощью файла .htaccess; Options задает некоторые настройки: Indexes разрешает списки каталогов, ExecCGI разрешает запуск cgi скриптов, Require all granted — предоставляет всем доступ к сайтам в данном каталоге.

* этой настройкой мы при получении заголовка X-Forwarded-Proto со значением https задаем переменную $_SERVER[‘HTTPS’] равную on. Данная настройки критична для функционирования некоторых CMS.

* по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event. Данный модуль не поддерживает php 7 и выше.

Разрешаем модуль мультипроцессовой обработки mpm_prefork:

* в данном примере установлен php версии 7.4.

Разрешаем модуль setenvif:

В процессе включения модулей, если мы видим «Module . already enabled», значит модуль уже включен.

Разрешаем автозапуск Apache и перезапускаем службу:

systemctl restart apache2

Открываем браузер и вводим в адресную строку http://:8080. Мы должны увидеть привычную страницу:

Проверка работоспособности Apache с помощью phpinfo

* в разделе Server API мы должны увидеть Apache.

NGINX + Apache

Ранее мы настроили связку nginx + php-fpm. Теперь настроим nginx + apache. Открываем конфигурационный файл nginx для сайта по умолчанию:

Находим наш настроенный location для php-fpm:

.
location ~ \.php$ set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>
.

.
location ~ \.php$ proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>
.

Проверяем и перезапускаем nginx:

Пробуем открыть в браузере http:// — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Проверка работоспособности Apache + NGINX

Apache Real IP

Запросы на apache приходят от NGINX, и они воспринимаются первым как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей. Для решения проблемы будем использовать модуль remoteip.

Создаем конфигурационный файл со следующим содержимым:

Источник

Оцените статью