Установка и настройка nginx и apache на ubuntu server

Обновлено: 04.07.2024

На данный момент самую большую популярность набрали два веб-сервера. Это Apache и Ngnix. У каждого из них есть свои плюсы и минусы. Apache был разработан еще в 1995 году и при его разработке учитывались не все возможные потребности пользователей, он потребляет много памяти и ресурсов системы, зато он прост в настройке. Nginx был разработан чуть позже в 2002 году уже учитывая ошибки Apache и ориентируясь на максимальную производительность.

Мы не будем подробно вникать в плюсы и минусы этих обоих веб-серверов. У каждого из них своя область применения. В этой инструкции будет рассмотрена установка Nginx в Ubuntu. Хотя я буду говорить об Ubuntu, все действия подойдут и для других дистрибутивов. Настройка Nginx везде одинакова, только команда установки отличается.

Установка компонентов

Первым делом нужно установить сам веб-сервер в систему. Программа есть в официальных репозиториях, но ее версия уже немного устарела, поэтому если хотите самую новую версию, нужно добавить PPA:

sudo apt-add-repository ppa:nginx/stable

Сейчас в официальных репозиториях доступна версия 1.10.0, а в стабильной PPA уже доступна 1.10.1. Если для вас версия не нужна можно обойтись и без PPA. Дальше обновите списки пакетов из репозиториев:

sudo apt update

И устанавливаем ngnix:

sudo apt install nginx

nginx

После того как установка сервера Nginx будет завершена добавим программу в автозагрузку, чтобы она запускалась автоматически:

sudo systemctl enable nginx

Если вы уже сейчас откроете браузер, то увидите работающий nginx, но нам предстоит его еще настроить.

nginx1

Настройка Nginx Ubuntu

Настройка Nginx Ubuntu намного сложнее чем Apache. Здесь мы не будем рассматривать все опции и возможности программы, а поговорим только об основном. Есть различные конфигурации, в которых Nginx используется в качестве прокси сервера, а основной сервер Apache, но нас это интересовать не будет. Нам нужна установка Nginx как самостоятельного веб-сервера.

Настройки Nginx сильно отличаются здесь есть только один основной файл конфигурации и файлы для виртуальных хостов. Настройка из каждой директории, как в Apache не поддерживается.

  • /etc/nginx/nginx.conf - главный файл конфигурации
  • /etc/nginx/sites-available/* - файлы конфигурации для виртуальных хостов, проще говоря для каждого сайта.
  • /etc/nginx/sites-enabled/* - файлы конфигурации активированных сайтов.

На самом деле файлы конфигурации для виртуальных хостов читаются только из директории sites-enabled, но здесь содержаться ссылки на sites-available. Такая система была придумана, чтобы дать возможность отключать на время те или иные сайты, не стирая их конфигурацию. Все остальные файлы содержат только объявления переменных и стандартные настройки, которые изменять не нужно. Что же касается nginx.conf, то в него включаются все файлы из sites-enables, а поэтому они могут содержать все точно такие же инструкции. А теперь давайте рассмотрим главный файл конфигурации:

sudo vi /etc/nginx/nginx.conf

nginx2

Как видите файл разделен на секции. Общая структура такова:

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

параметр значение дополнительное_значение. ;

Строка должна обязательно заканчиваться ";", а все открытые скобки < должны быть закрыты.

Теперь, когда вы немного изучили глобальную структуру, можно переходить к рассмотрению самих параметров. Глобальных опций не так уж много:

  • user - пользователь, от имени которого будет работать программа.
  • worker_processes - устанавливает сколько процессов нужно запускать для параллелизации работы программы, нужно запускать не больше процессов, чем у вас есть ядер. Можно установить параметр auto и тогда программа определит это число сама.
  • pid = файл pid программы.
  • worker_rlimit_nofile - указывает максимальное количество файлов, которые может открыть программа. Рассчитывается как worker_processes * worker_connections* 2.

С глобальными опциями закончили, их было не так много и они не такие интереснее. Куда интереснее в плане оптимизации опции с секции events:

  • worker_connections - количество соединений, которые программа может обрабатывать одновременно на одном процессе. Если умножить worker_process на этот параметр, то мы получим максимальное количество пользователей, которые могут подключиться к серверу одновременно. Рекомендуется устанавливать значение от 1024 до 4048.
  • multi_accept - разрешить принимать много подключений одновременно, установите параметр on или off.
  • use - способ работы с сетевым стеком. По умолчанию используется poll, но для Linux эффективнее использовать epoll.
  • sendfile - использовать метод отправки данных sendfile. Значение on.
  • tcp_nodelay, tcp_nopush - отправлять заголовки и начало файла одним пакетом. Значение on.
  • keepalive_timeout - таймаут ожидания, перед тем как keepalive соединение будет разорвано, по умолчанию 65, но можно уменьшить до 10 секунд.
  • keepalive_requests - максимальное количество keepalive соединений от одного клиента, рекомендовано 100.
  • reset_timedout_connection - разрывать соединения после таймаута. Значение on.
  • open_file_cache - кэшировать информацию об открытых файлах. Строчка настройки выглядит вот так: open_file_cache max=200000 inactive=20s; max - максимальное количество файлов в кэше, время кэширования.
  • open_file_cache_valid - указывает по истечении какого времени нужно удалить информацию из кэша. Например: open_file_cache_valid 30s;
  • open_file_cache_min_uses - кэшировать информацию о файлах, которые были открыты как минимум указанное количество раз.
  • open_file_cache_errors - кэшировать информацию об отсутствующих файлах, значение on.

Основные параметры рассмотрели. Эти настройки помогут вам получить большую производительность от nginx. Секцию server и location мы рассмотрим в настройке виртуальных хостов.

Настройка сжатия Gzip

gzip on

Эту директиву можно использовать также в секции server, тогда она будет работать только для указного виртуального домена. Дальше настраиваем параметры сжатия настраиваются с помощью следующих опций:

  • gzip_min_length - минимальная длина страницы в байтах, при которой нужно использовать сжатие, например, 1000 (1 кб)
  • gzip_proxied - нужно ли сжимать проксированые запросы, any говорит, что нужно сжимать все.
  • gzip_types - типы файлов, которые нужно сжимать, например: text/plain application/xml application/x-javascript text/javascript text/css text/json;
  • gzip_disable "msie6" - в IE 6 сжатие не поддерживается, поэтому отключаем.
  • gzip_comp_level - уровень сжатия, доступны варианты от 1 до 10. 1 - минимальное, 10 - максимальное сжатие.

Настройка виртуальных хостов

Рассмотрим пример настройки:

nginx3

Это все основные настройки виртуального хоста, после них он уже будет работать. Но тут есть еще секция location, которая позволяет настроить поведение сервера для определенных директорий и файлов. Синтаксис location такой:

location адрес <>

В качестве адреса может использоваться как прямой запрос относительно корня сервера, так и регулярные выражения. Для использования регулярных выражений перед ним ставится символ "

". Примеры рассмотрим ниже, а пока рассмотрим возможные директивы:

  • allow - разрешить доступ к местоположению для пользователей, all - всех, также можно указать ip или подсеть.
  • deny - запретить доступ к местоположению, all - для всех.
  • try-files - пытается открыть файлы в определенном порядке, открывает первый обнаруженный файл. Например, такая конструкция: $uri $uri/index.html $uri.html =404; сначала пытается открыть $uri, затем index.html, если не найден $uri.html, и аж потом, если ни одного из предложных файлов не существует, выдает ошибку 404.
  • expires - задает время кэширования браузером отданного элемента, например, 1d - один день, 2h - два часа, 30s - 30 секунд.

Кроме этих главных директив, здесь могут использоваться и другие. Чтобы получить больше подробностей, смотрите официальную документацию. Рассмотрим пару примеров:

Не выполнять логирование для favicon:

location = /favicon.ico log_not_found off;
access_log off;
>

Запретить доступ к файлам, начинающимся с точки:

Кэшировать обычные файлы на 90 дней:

* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ access_log off; log_not_found off; expires 90d;
>

После того, как установка и настройка nginx будет завершена проверяем конфигурацию на ошибки:

Затем перезагружаем сервер:

sudo service nginx reload

sudo service nginx restart

Если изменялись незначительные параметры можно использовать reload, тогда будет просто обновлена конфигурация без перезагрузки, если же изменяли глобальные опции, нужно перезагрузить программу полностью с помощью restart.

Просмотр статистики

Просмотр статистики работы веб-сервера очень важен. Установка nginx, должна содержать настройку возможности получения статистики. Для того чтобы это сделать добавьте такие строки к вашему хосту в секцию server:

location /basic-staus stats_stub;
allow 127.0.0.1
deny all;
>

Статистика будет доступна только с локального ip:

wget localhost/basic-status -O -

Выводы

Установка Nginx Ubuntu 16.04 завершена и теперь вы немного представляете как его настроить. Конечно, есть еще много вещей, которые мы не упомянули в статье, например, настройка обработки динамического контента php или настройка nginx Ubuntu в качестве прокси-сервера для apache. Возможно, это будет рассмотрено в следующих статях.

На просторах интернета не нашел единого рецепта по установке и настройке такого, довольно нестандартного сервера. Решил написать свой рецепт.

Принцип работы следующий:



Статические данные (файлы) отдает Nginx, а динамикой занимается Apache.
Начнем.

Установим VirtualBox

    Запустим установщик VirtualBox.

Установка VirtualBox. Шаг 2

Подготовим VirtualBox к установке Ubuntu Server 16.04.3 LTS

  1. Загрузим образ ubuntu-16.04.3-server-amd64.iso
  2. Создадим виртуальную машину.

Важно: У меня 8 ГБ оперативной памяти, и в моем случае, двух гигабайт будет достаточно. У вас может быть иначе.

VirtualBox


Размер жесткого диска: 15 ГБ
Другие параметры оставим по умолчанию.

VirtualBox


Сменим тип подключения с NAT на Сетевой мост.

Установка Ubuntu Server 16.04.3 LTS

    Выберем загрузочный диск с образом Ubuntu Server 16.04.3 LTS.

Установка Ubuntu Server 16.04.3 LTS (Шаг 3)

Установка Ubuntu Server 16.04.3 LTS (Шаг 22)


Нам нужно изъять диск из привода.
Устройства -> Оптические диски -> Изъять диск из привода

VirtualBox


Продолжаем.
Выбираем полное клонирование.

Установим PuTTY, для доступа через SSH

    Запустим установочный файл.

Установка PuTTY (Шаг 2)

Подключение через SSH к серверу

    Запустим клон нашей машины, что бы узнать ее ip адрес.
    Напишем команду:
    ifconfig

PuTTY


Мы должны наблюдать следующее:

Установка и настройка (Nginx + Apache) + PostgreSQL + PHP

make install
Теперь, на сервер PostgreSQL, в нужную базу данных, где хотим использовать беззнаковые и однобайтовые числа, отправим:

Вернемся в корневой каталог
cd /
Установим Nginx, но перед этим остановим Apache, дабы он не занимал порт 80, иначе Nginx не установится.
service apache2 stop
Установка Nginx
apt-get install nginx
Отлично, теперь остановим и Nginx
service nginx stop
Настройка Apache
a2dismod mpm_event

a2enconf php7.2-fpm
Сменим порт Apache
nano /etc/apache2/ports.conf
Заменить

127.0.0.1 — означает то, что к Apache можно обратиться только по локальному адресу.
8080 — можете поставить любой свободный порт.
Перейдем в папку с доступными сайтами
cd /etc/apache2/sites-available
Создадим конфигурационный файл нашего сайда
nano domain-name.local.conf
И привести его к такому виду:

Посмотрим, что у нас лежит в /var/www
cd /var/www/

ls -F
Папка html, нам более не нужна, удалим ее вместе с содержимым
rm -R html
Создадим свою папку, со своим сайтом
mkdir domain-name.local/
Перейдем в папку с нашим сайтом
cd domain-name.local/
Создадим документ index.pnp
nano index.php
В него запишем:

tar xvf rpaf_v0.8.4.tar

cd mod_rpaf-0.8.4/
Теперь скомпилируем
make

make install
Выходим в корневой каталог
cd /
Хорошо, продолжим настройку Apache.
nano /etc/apache2/apache2.conf
Заменить

Приведем в порядок rpaf.conf
nano /etc/apache2/mods-available/rpaf.conf
Приведем его к такому виду:

Включим наш сайт в Apache.
a2ensite domain-name.local.conf
И запустим наш Apache.
service apache2 start
C Apache закончили.
Настроим Nginx
nano /etc/nginx/sites-available/domain-name.local
Привести к такому виду:

И сразу перейдем в нее
\c test_db
Подключим расширение pguint

И создадим тестовую таблицу

Заполним таблицу тестовыми данными

Посмотрим содержимое таблицы test_tb

Теперь попробуем вывести эти данные из php.
Закрываем соединение с СУБД
\q
Откроем /var/www/domain-name.local/index.php
nano /var/www/domain-name.local/index.php
И приведем к следующему виду:

Теперь проверим, и убедимся, что это работает



Отлично, мы настроили (Nginx + Apache) + PostgreSQL + PHP и он исправно работает.

Настроим FTP доступ к сайту

  1. listen=YES
  2. listen_ipv6=NO
  3. local_enable=YES
  4. write_enable=YES
  5. chroot_local_user=YES
  6. pam_service_name=ftp



Все хорошо, попробуем создать каталог.



Работает.
Настроим защищенное FTP соединение.
Остановим vsftpd
service vsftpd stop
Сгенерируем сертификат
openssl req -x509 -nodes -days 720 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/private/vsftpd.pem
Тут вводим все, что вшей душе угодно

Apache и Nginx — два популярных веб-сервера с открытым исходным кодом, часто используемые с PHP. Одновременный запуск обоих серверов на одной виртуальной машине может быть полезным в ситуации с хостингом нескольких сайтов с разными требованиями. Обычно для запуска двух веб-серверов на одной системе используются разные IP-адреса или разные номера портов.

В этом руководстве вы настроите Nginx как веб-сервер и обратный прокси-сервер для Apache — все на одном сервере.

В зависимости от веб-приложения для обеспечения осведомленности Apache о присутствии обратного прокси-сервера могут потребоваться изменения кода, особенно если настроены сайты SSL. Чтобы избежать этого, нужно установить модуль Apache под названием mod_rpaf , который перезаписывает определенные переменные среды так, что все выглядит, как если бы Apache напрямую обрабатывал запросы веб-клиентов.

Предварительные требования

Для прохождения данного обучающего руководства вам потребуется следующее:

  • Новый сервер Ubuntu 18.04, настроенный в соответствии с указаниями документа «Начальная настройка сервера с Ubuntu 18.04», с пользователем sudo non-root и брандмауэром.
  • Четыре полностью квалифицированных доменных имени, настроенных на указание на IP-адрес вашего сервера. В разделе «Шаг 3. Настройка имени хоста с DigitalOcean» показано, как можно это сделать. Если вы размещаете DNS ваших доменов в других местах, нужно создать соответствующие записи уровня A именно там.

Шаг 1 — Установка Apache и PHP-FPM

Начнем с установки Apache и PHP-FPM.

Помимо Apache и PHP-FPM мы также установим модуль PHP FastCGI Apache, libapache2-mod-fastcgi , для поддержки веб-приложений FastCGI.

Вначале обновите свой список пакетов и убедитесь, что у вас установлены последние версии пакетов.

Затем выполните установку пакетов Apache и PHP-FPM:

Далее изменим конфигурацию Apache по умолчанию для использования PHP-FPM.

Шаг 2 — Настройка Apache и PHP-FPM

На этом шаге мы изменим номер порта Apache на 8080 и настроим его для работы с PHP-FPM с использованием модуля mod_fastcgi . Переименуйте файл конфигурации Apache ports.conf :

Создайте новый файл ports.conf и установите в нем порт 8080 :

Примечание. Веб-серверы обычно настраиваются на прослушивание адреса 127.0.0.1:8080 при настройке в качестве обратного прокси-сервера, однако при этом для переменной среды PHP SERVER_ADDR будет установлено значение циклического IP-адреса, а не публичного IP-адреса сервера. Наша цель — настроить сервер Apache так, чтобы сайты не видели обратный прокси-сервер перед ним. Поэтому мы настроим его для прослушивания порта 8080 на всех IP-адресах.

Далее мы создадим файл виртуального хоста для Apache. Директива <VirtualHost> этого файла будет установлена для обслуживания только сайтов на порту 8080 .

Отключите виртуальный хост по умолчанию:

Затем создайте новый файл виртуального хоста, используя существующий сайт по умолчанию:

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

Измените порт прослушивания на 8080:

Сохраните файл и активируйте новый файл конфигурации:

Затем перезагрузите Apache:

Убедитесь, что Apache прослушивает порт 8080 :

Результат должен выглядеть как в следующем примере, где apache2 прослушивает порт 8080 :

Убедившись, что Apache прослушивает правильный порт, вы можете настроить поддержку PHP и FastCGI.

Шаг 3 — Настройка Apache для использования mod_fastcgi

По умолчанию Apache обслуживает страницы PHP с помощью модуля mod_php , однако для работы с PHP-FPM ему требуется дополнительная настройка.

Примечание. Если вы пытаетесь использовать это обучающее руководство в существующей системе LAMP с mod_php, вначале выполните отключение с помощью команды sudo a2dismod php7.2 .

Мы добавим блок конфигурации для mod_fastcgi, зависящий от mod_action . По умолчанию mod_action отключен, и предварительно его нужно включить:

Переименуйте существующий файл конфигурации FastCGI:

Создайте новый файл конфигурации:

Добавьте в файл следующие директивы для передачи запросов файлов .php в сокет PHP-FPM UNIX:

Сохраните изменения и проведите тест конфигурации:

Если отображается Syntax OK, перезагрузите Apache:

Если отображается предупреждение Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message. , его можно игнорировать. Мы настроим имена серверов позднее.

Теперь убедимся, что мы можем обслуживать PHP из Apache.

Шаг 4 — Проверка функционала PHP

Чтобы убедиться, что PHP работает, мы создадим файл phpinfo() и получим к нему доступ к через браузер.

Создайте файл /var/www/html/info.php , содержащий вызов функции phpinfo :

phpinfo Server API

phpinfo PHP Variables

Убедитесь, что в Server API вверху страницы указано значение FPM/FastCGI. Раздел «Переменные PHP» в нижней трети страницы покажет, что параметр SERVER_SOFTWARE имеет значение Apache на Ubuntu. Это подтверждает, что модуль mod_fastcgi активен, и что Apache использует PHP-FPM для обработки файлов PHP.

Шаг 5 — Создание виртуальных хостов для Apache

Вначале создайте корневые каталоги документа:

Затем создайте файл index для каждого сайта:

Далее создайте файл phpinfo() для каждого сайта, чтобы мы могли протестировать правильность конфигурации PHP.

Добавьте в файл следующий код для определения хоста:

Строка AllowOverride All активирует поддержку .htaccess.

Это только базовые указания. Полное руководство по по настройке виртуальных хостов в Apache можно найти в документе «Настройка виртуальных хостов Apache в Ubuntu 16.04».

Сохраните и закройте файл. Затем создайте аналогичную конфигурацию для test.io . Сначала создайте файл:

Затем добавьте в файл конфигурацию:

Сохраните файл и выйдите из редактора.

Теперь, когда вы создали оба виртуальных хоста Apache, разрешите сайтам использовать команду a2ensite . Это создаст символическую связь с файлом виртуального хоста в каталоге sites-enabled :

Снова проверьте Apache на наличие ошибок конфигурации:

Когда в конфигурации не останется ошибок, перезагрузите Apache, чтобы применить изменения:

Вы увидите следующие результаты:

страница индекса foobar.net

страница индекса test.io

Для каждого сайта вы увидите такой же перечень настроек PHP, что и на шаге 4.

Мы разместили два сайта на сервере Apache на порту 8080 . Теперь давайте настроим Nginx.

Шаг 6 — Установка и настройка Nginx

Установите Nginx с помощью диспетчера пакетов:

Затем удалите соединение symlink по умолчанию виртуального хоста, поскольку мы больше не будем его использовать:

Теперь мы создадим виртуальные хосты для Nginx, используя ту же процедуру, что использовалась для Apache. Вначале необходимо создать корневые каталоги документов для обоих сайтов:

Мы будем хранить сайты Nginx в каталоге /usr/share/nginx , где Nginx требуется хранить их по умолчанию. Вы можете поместить их в каталог /var/www/html с сайтами Apache, но разделение поможет привязать сайты к Nginx.

Как и в случае с виртуальными хостами Apache, после завершения настройки следует создать файлы index и phpinfo() для тестирования:

Добавьте в файл следующее:

Сохраните и закройте файл.

Затем активируйте оба сайта, создав символические ссылки на каталог sites-enabled :

Протестируйте конфигурацию Nginx и убедитесь в отсутствии проблем с конфигурацией:

При обнаружении ошибок перезагрузите Nginx:

Переменные Nginx PHP Variables

[SERVER_SOFTWARE] должен иметь значение nginx , указывая, что файлы обслуживались Nginx напрямую. [DOCUMENT_ROOT] должен указывать на каталог, ранее созданный на этом шаге для каждого из сайтов Nginx.

К настоящему моменту мы установили Nginx и создали два виртуальных хоста. Далее мы настроим Nginx на запросы прокси-сервера, предназначенные для доменов Apache.

Шаг 7 — Настройка Nginx для виртуальных хостов Apache

Создадим дополнительный виртуальный хост Nginx с несколькими именами доменов в директивах server_name . Запросы этих доменных имен будут перенаправляться через прокси-сервер в Apache.

Создайте новый файл виртуального хоста Nginx для перенаправления запросов в Apache:

Добавьте следующий блок кода, указывающий имена доменов виртуального хоста Apache и перенаправляющий их запросы в Apache. Обязательно используйте публичный IP-адрес в proxy_pass :

Сохраните файл и активируйте новый файл виртуального хоста, создав символическую ссылку:

Протестируйте конфигурацию и убедитесь в отсутствии ошибок:

Если ошибок нет, перезагрузите Nginx:

phpinfo для Apache через Nginx

Мы успешно настроили Nginx для перенаправления запросов определенных доменов в Apache через прокси-сервер. Теперь настроим Apache для установки переменной REMOTE_ADDR , как если бы эти запросы обрабатывались напрямую.

Шаг 8 — Установка и настройка mod_rpaf

Установите пакеты, необходимые для построения модуля:

Загрузите последний стабильный выпуск из GitHub:

Выполните извлечение загруженного файла:

Перейдите в новый каталог, содержащий файлы:

Скомпилируйте и установите модуль:

Затем создайте в каталоге mods-available файл, который будет загружать модуль rpaf ,

Добавьте в файл следующий код для загрузки модуля:

Сохраните файл и выйдите из редактора.

Создайте в этом каталоге другой файл с именем rpaf.conf , который будет содержать директивы конфигурации для mod_rpaf :

Добавьте следующий блок кода для настройки mod_rpaf и обязательно укажите IP-адрес своего сервера:

Здесь приведено краткое описание каждой директивы. Дополнительную информацию можно найти в файле README по модулю mod_rpaf .

Сохраните rpaf.conf и активируйте модуль:

При этом создаются символические ссылки файлов rpaf.load и rpaf.conf в каталоге mods-enabled . Теперь протестируем конфигурацию:

Если ошибок нет, перезагрузите Apache:

Теперь настроим шифрование TLS/SSL для каждого сайта.

На этом шаге мы настроим сертификаты TLS/SSL для обоих доменов, размещенных в Apache. Мы получим сертификаты посредством Let’s Encrypt. Nginx поддерживает конечные узлы SSL, и поэтому мы можем настроить SSL без изменения файлов конфигурации Apache. Модуль mod_rpaf обеспечивает установку в Apache переменных среды, необходимых для бесшовной работы приложений за обратным прокси-сервером SSL.

Вначале мы разделим блоки server <. >обоих доменов так, что у каждого из них будет собственный сертификат SSL. Откройте в своем редакторе файл /etc/nginx/sites-available/apache :

Мы используем Certbot для генерирования сертификатов TLS/SSL. Плагин Nginx изменит конфигурацию Nginx и перезагрузит ее, когда это потребуется.

Прежде всего, добавьте официальное хранилище Certbot:

Нажмите ENTER в диалоге, чтобы подтвердить добавление нового хранилища. Обновите список пакетов, чтобы получить данные пакета нового хранилища:

Установите пакет Certbot’s Nginx с apt :

Эта команда указывает Certbot, что нужно использовать плагин nginx , а параметр -d задает имена, для которых должен действовать сертификат.

Если это первый запуск certbot , вам будет предложено указать адрес эл. почты и принять условия обслуживания. После этого certbot свяжется с сервером Let’s Encrypt и отправит запрос с целью подтвердить, что вы контролируете домен, для которого запрашиваете сертификат.

Выберите желаемый вариант и нажмите ENTER . Конфигурация будет обновлена, а затем будет выполнена перезагрузка Nginx для активации новых настроек.

Теперь выполните команду для второго домена:

phpinfo ssl

Теперь отключим прямой доступ к Apache.

Шаг 10 — Блокировка прямого доступа к Apache (опционально)

Поскольку Apache прослушивает порт 8080 на публичном IP-адресе, он доступен кому угодно. Его можно заблокировать с помощью следующей команды IPtables в наборе правил брандмауэра.

Примечание. По умолчанию правила IPtables теряют силу после перезагрузки системы. Существует несколько способов сохранения правил IPtables, но проще всего использовать параметр iptables-persistent в хранилище Ubuntu. Прочитайте эту статью, чтобы узнать больше о настройке IPTables.

Теперь настроим Nginx для обслуживания статических файлов для сайтов Apache.

Шаг 11 — Обслуживание статических файлов с помощью Nginx (необязательно)

Когда Nginx перенаправляет запросы доменов Apache через прокси-сервер, каждый запрос файла этого домена отправляется в Apache. Nginx обслуживает статические файлы, такие как изображения, JavaScript и таблицы стилей, быстрее Apache. Поэтому мы настроим файл виртуального хоста Nginx apache для прямого обслуживания статических файлов и перенаправления запросов PHP в Apache.

Откройте в своем редакторе файл /etc/nginx/sites-available/apache :

Вам потребуется добавить два дополнительных блока location в каждый блок server, а также изменить существующие разделы location . Кроме того, вам нужно будет указать Nginx, где можно найти статические файлы для каждого сайта.

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

Директива try_files указывает Nginx искать файлы в корне документа document root и выводить их напрямую. Если файл имеет расширение .php , запрос перенаправляется в Apache. Даже если файл отсутствует в document root, запрос перенаправляется в Apache, чтобы функции приложения (например, постоянные ссылки) работали без проблем.

Предупреждение. Директива location

/\.ht очень важна, поскольку она не дает Nginx выводить содержимое файлов конфигурации Apache с важными данными, таких как .htaccess и .htpasswd .

Сохраните файл и проведите тест конфигурации:

Если тест завершается успешно, перезагрузите Nginx:

Затем откройте страницы index.html каждого сайта, и вы не увидите записи журнала Apache. Их обслуживает Nginx.

Завершив изучение файла журнала, нажмите CTRL+C, чтобы остановить отслеживание.

При такой настройке Apache не сможет ограничивать доступ к статическим файлам. Контроль доступа к статическим файлам должен быть настроен в файле apache виртуального хоста Nginx, однако это не входит в содержание настоящего обучающего руководства.

Настройка Apache

В начале, необходимо проинсталлировать сервис Apache и пакет PHP-FPM:

Для Apache будем использовать порт 8080. Здесь необходимо настроить так, чтобы Apache при помощи mod_fastcgi поддерживал PHP-FPM. Для чего переименуйте файл ports.conf и создайте новый, указав в нём порт 8080:

Следующим шагом необходимо будет создать виртуальный хост на Apache. Для чего отключите дефолтный хост, создайте новый и откройте файл, в котором нужно изменить конфигурацию созданного хоста:

В этом файле измените значение порта на 8080 в строке <VirtualHost> :

Файл конфигурации хоста

Закройте отредактированный файл с сохранением изменений, активируйте его и перезапустите сервис Apache:

И в завершение настройки, установите модуль net-tools и посмотрите, действительно ли на Apache доступен для прослушивания порт под номером 8080:

Прослушивание портов пакетом net-tools

Настройка mod_fastcgi

В данном разделе нужно будет настроить модуль mod_fastcgi для корректной обработки веб-сервером страниц, написанных на PHP.

Сначала необходимо будет отключить модуль mod_php :

Отключение mod_php

После этого необходимо включить mod_action , и сохранив существующий файл FastCGI под другим именем, и создайте новый fastcgi.conf :

Следующий текст вставьте в созданный файл:

Закройте файл сохранив изменения и протестируйте Apache на корректность синтаксиса:

Нижеуказанную ошибку следует проигнорировать:

Ошибка. Её пока нужно пропустить.

Главное, что проверка сообщила, что Syntax OK . Это значит, что необходимо перезапустить сервис Apache:

Далее, в папке /var/www/html нужно создать файл, который будет открывать страницу конфигурации PHP:

В этот файл необходимо вставить следующую фунцию:

Теперь выполните настройку брандмауэра вашего VPS, которая позволит открыть доступ к нему по порту 8080:

А также, включите на UFW разрешение для Apache:

Проверьте статус, в котором находится ваш UFW:

Брандмауэр

Обратите внимание, что на данной странице значения строк Server API и $_SERVER['SERVER_SOFTWARE'] , как показано на скриншотах ниже, говорит о работоспособности модуля mod_fastcgi и использовании PHP-FPM веб-сервером Apache для работы с php-страницами. Что, собственно, и было целью данного раздела.

Конфигурация PHP

Виртуальные хосты Apache

Для каждого из ваших сайтов необходимо создать соответствующий файл info.php . Так можно будет проверить корректность конфигурации PHP на каждом из хостов:

Теперь нужно закрыть файл с сохраненим внесённых изменений (при использовании nano нужно нажать Ctrl-X , Y и Enter ). После этого, проделайте то же для второго вашего домена.

После чего, необходимо создать ссылки на созданные хосты:

Протестируйте Apache на корректность синтаксиса:

Если проверка сообщила, что Syntax OK , нужно будет перезапустить сервис:

Если, всё идёт правильно, в первом случае вы увидите:

Первый сайт на Apache

Второй сайт на Apache

Настройка Nginx

В этом разделе вам нужно будет установить Nginx и настроить на нём виртуальные хосты для двух других ваших доменов.

Запустите инсталляцию Nginx:

Созданный каталог дефолтного виртуального хоста нужно удалить:

Для новых хостов сначала создайте соответствующие директории:

Теперь создайте для них файлы index.html и info.php :

И вставьте в него следующий текст, также заменяя ИМЯ_ДОМЕНА на имена ваших доменов, как, например, ng1.site и ng2.site :

Сохраняйте файлы перед закрытием. Проделайте процедуру для каждого из ваших доменов.

После этого, создайте ссылки для ваших виртуальных хостов:

Запустите тест корректности синтаксиса:

Перезапустите сервис, если проверка синтаксиса ошибок не показала:

Конфигурационная страница PHP

Конфигурация PHP

Первый сайт, работающий на Nginx

Настройка Nginx для работы с Apache

Далее, необходимо создать дополнительный хост, работающий под Nginx, который будет перенаправлять запросы на веб-сервер Apache.

Для этого наберите:

Закройте файл с сохранение изменений.

Создайте ссылку командой:

Запустите тест сервиса на корректность:

И в случае, если тест ошибок не нашёл, перезагрузите Nginx:

Таким образом, вы настроили Nginx как обратный прокси для Apache.

Настройка mod_rpaf

Для того, чтобы не вносить коррективы в код PHP-приложений для корректной работы на вашем хостинге, необходимо установить и настроить модуль mod_rpaf.

Инсталляцию модуля рекомендуется производить скомпилировав его из исходного кода. Для начала нужно запустить установку командой:

После чего, загрузите из GitHub последний релиз инсталлируемого модуля:

После чего, распакуйте его, перейдите в его директорию, соберите и проинсталлируйте модуль:

Теперь для установленного модуля необходимо создать следующий файл, для чего наберите:

В него вставьте текст:

Закройте файл с сохранением внесённых изменений.

Теперь создайте конфигурационный файл. Для чего наберите:

Вставьте в него текст:

Закройте файл, сохранив изменения. После чего, запустите модуль и тест на корректность синтаксиса:

Если всё прошло без ошибок, перезапустите сервис:

Таким образом, вы произвели настройку своего сервера, на котором теперь сайты ap1.site и ap2.site работают под управлением Apache, в то время как сайты ng1.site и ng 2.site обслуживаются Nginx. И даже, если ваш Nginx используется как обратный прокси, этот прокси-сервер остаётся невидимым из внешней сети. Другими словами, все подключения к сайтам, размещённым на Apache, проходя через Nginx, выглядят работающими непосредственно с Apache.

И ещё из положительных моментов. Если у вас получилось настроить Nginx в качестве веб-сервера и обратного прокси-сервера для Apache на одном сервере Ubuntu, вы сможете запарковать по меньшей мере четыре домена на одном VPS. Такой метод можно применять при более безопасном обслуживании статических сайтов.

Читайте также: