One place for hosting & domains

      вебсервера

      Установка веб-сервера Apache в CentOS 7


      Введение

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

      В этом руководства вы установите веб-сервер Apache с виртуальными хостами на сервер на базе CentOS 7.

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

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

      Шаг 1 — Установка Apache

      Apache доступен в используемых по умолчанию репозиториях программного обеспечения CentOS, т. е. вы можете установить его с помощью менеджера пакетов yum.

      С помощью пользователя sudo без прав root, настроенного согласно предварительным требованиям, обновите локальный индекс пакета Apache httpd, чтобы отразить последние изменения:

      После обновления пакетов установите пакет Apache:

      После подтверждения установки yum выполнит установку Apache и всех требуемых зависимостей. После завершения вы сможете запустить службу.

      Шаг 2 — Проверка веб-сервера

      Apache не запускается автоматически на CentOS после завершения установки. Вам нужно будет запустить процесс Apache вручную:

      • sudo systemctl start httpd

      Убедитесь, что служба запущена с помощью следующей команды:

      • sudo systemctl status httpd

      Если служба запущена, вы увидите значение active (активна) в статусе:

      Output

      Redirecting to /bin/systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1290 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1290 /usr/sbin/httpd -DFOREGROUND ├─1291 /usr/sbin/httpd -DFOREGROUND ├─1292 /usr/sbin/httpd -DFOREGROUND ├─1293 /usr/sbin/httpd -DFOREGROUND ├─1294 /usr/sbin/httpd -DFOREGROUND └─1295 /usr/sbin/httpd -DFOREGROUND ...

      Как видно из результатов, служба успешно запущена. Однако лучше всего протестировать ее запуск посредством запроса страницы из Apache.

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

      Введите следующие данные в командной строке сервера:

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

      Также в качестве альтернативы вы можете использовать curl для запроса IP-адреса icanhazip.com, который предоставит вам ваш публичный IPv4-адрес, видимый в другом месте в Интернете:

      Когда вы узнаете IP-адрес вашего сервера, введите его в адресную строку браузера:

      http://your_server_ip
      

      Вы увидите стандартную веб-страницу Apache в CentOS 7:

      Страница Apache по умолчанию для CentOS 7

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

      Шаг 3 — Управление процессом Apache

      Теперь ваш веб-сервер запущен и работает, и настало время изучить некоторые простые команды управления.

      Чтобы остановить веб-сервер, введите:

      • sudo systemctl stop httpd

      Чтобы запустить остановленный веб-сервер, введите:

      • sudo systemctl start httpd

      Чтобы остановить и снова запустить службу, введите:

      • sudo systemctl restart httpd

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

      • sudo systemctl reload httpd

      По умолчанию Apache настроен на автоматический запуск при загрузке сервера. Если вы не хотите этого, отключите такое поведение с помощью следующей команды:

      • sudo systemctl disable httpd

      Чтобы перезагрузить службу для запуска во время загрузки, введите:

      • sudo systemctl enable httpd

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

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

      Шаг 4 — Настройка виртуальных хостов (рекомендуется)

      При использовании веб-сервера Apache вы можете использовать виртуальные хосты (аналогичные серверным блокам в Nginx) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов. На этом шаге мы будем настраивать домен с именем example.com, но вы должны будете заменить его собственным доменным именем. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, пройдите наш обучающий модуль Введение в DigitalOcean DNS.

      В Apache в CentOS 7 по умолчанию включен один серверный блок, настроенный на обслуживание документов из каталога /var/www/html. Хотя это хорошо работает для отдельного сайта, при хостинге нескольких сайтов это неудобно. Вместо изменения /var/www/html вы создадите структуру директорий внутри /var/www для сайта example.com, оставив /var/www/html на месте в качестве каталога по умолчанию, который будет обслуживаться, если запрос клиента не будет соответствовать каким-либо другим сайтам.

      Создайте директорию html для example.com, используя флаг -p для создания необходимых родительских директорий:

      • sudo mkdir -p /var/www/example.com/html

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

      • sudo mkdir -p /var/www/example.com/log

      Затем назначьте права владения для директории html с помощью переменной среды $USER:

      • sudo chown -R $USER:$USER /var/www/example.com/html

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

      • sudo chmod -R 755 /var/www

      Затем создайте в качестве примера страницу index.html, используя vi или свой любимый редактор:

      • sudo vi /var/www/example.com/html/index.html

      Нажмите i для переключения в режим INSERT (ВСТАВКА) и добавьте в файл следующий пример HTML-контента:

      /var/www/example.com/html/index.html

      <html>
        <head>
          <title>Welcome to Example.com!</title>
        </head>
        <body>
          <h1>Success! The example.com virtual host is working!</h1>
        </body>
      </html>
      

      Сохраните и закройте файл, нажмите ESC, введите :wq и нажмите ENTER.

      Создав директорию сайта и пример файла index, вы уже почти готовы к созданию файлов виртуального хоста. Файлы виртуального хоста определяют конфигурацию отдельных сайтов и указывают веб-серверу Apache, как отвечать на различные запросы доменов.

      Перед созданием ваших виртуальных хостов вам нужно будет создать директорию sites-available, чтобы хранить их в этой директории. Также вы должны будете создать директорию sites-enabled, которая указывает Apache, что виртуальный хост готов к обслуживанию посетителей. Директория sites-enabled будет хранить символические ссылки на виртуальные хосты, которые мы хотим опубликовать. Создайте обе директории с помощью следующей команды:

      • sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

      Затем вы должны попросить Apache выполнить поиск виртуальных хостов в директории sites-enabled. Для этого необходимо изменить главный файл конфигурации Apache и добавить строку, объявляющую опциональную директорию для дополнительных файлов конфигурации:

      • sudo vi /etc/httpd/conf/httpd.conf

      Добавьте эту строку в конец файла:

      IncludeOptional sites-enabled/*.conf
      

      Сохраните и закройте файл после добавления этого кода. Теперь, когда у вас есть директории виртуального хоста, вы можете создать ваш файл виртуального хоста.

      Начните с создания нового файла в директории sites-available:

      • sudo vi /etc/httpd/sites-available/example.com.conf

      Добавьте следующий блок конфигурации и измените домен example.com на собственный:

      /etc/httpd/sites-available/example.com.conf

      <VirtualHost *:80>
          ServerName www.example.com
          ServerAlias example.com
          DocumentRoot /var/www/example.com/html
          ErrorLog /var/www/example.com/log/error.log
          CustomLog /var/www/example.com/log/requests.log combined
      </VirtualHost>
      

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

      Сохраните файл и закройте его после завершения.

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

      • sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

      Теперь ваш виртуальный хост настроен и готов к предоставлению контента. Прежде чем перезапускать службу Apache, давайте убедимся, что SELinux располагает правильными политиками для ваших виртуальных хостов.

      Шаг 5 — Настройка разрешений SELinux для виртуальных хостов (рекомендуется)

      SELinux настраивается для работы с конфигурацией Apache по умолчанию. Поскольку вы настроили пользовательскую директорию журналов в файле конфигурации виртуальных хостов, вы получите ошибку при попытке запуска службы Apache. Для устранения данной проблемы вам нужно обновить политики SELinux, чтобы разрешить Apache записывать данные в нужные файлы. SELinux обеспечивает повышенную безопасность для вашей среды CentOS 7, поэтому мы не рекомендуем полностью отключать модуль ядра.

      Существуют различные способы настройки политики с учетом потребностей вашей среды, поскольку SELinux позволяет вам настраивать уровень безопасности. На этом шаге мы обсудим два метода внесения изменений в политики Apache: универсально и в конкретной директории. Изменение политики в директориях является более безопасным, поэтому мы рекомендуем использовать этот подход.

      Универсальное изменение политик Apache

      Универсальная настройка политики Apache позволит SELinux одинаковым образом использовать все процессы Apache, используя для этого булеву переменную httpd_unified. Хотя этот подход более удобен, он не обеспечивает аналогичный уровень контроля, что и подход, который подразумевает внимание к политике для отдельных файлов и директорий.

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

      • sudo setsebool -P httpd_unified 1

      Команда setsebool меняет значения булевых значений SELinux. Флаг -P будет обновлять значение времени начальной загрузки, а обновленное значение сохраняется между перезагрузками. httpd_unified — это булево значение, которое позволит SELinux рассматривать все процессы Apache как один тип, поэтому вы активировали его со значением 1.

      Изменение политик Apache для директории

      Индивидуальная настройка разрешений SELinux для директории /var/www/example.com/log позволит вам получить более полноценный контроль за политиками Apache, но также может потребовать дополнительных действий. Поскольку этот параметр не подразумевает наличия универсально настроенных политик, вам нужно будет вручную задать тип контекста для любых новых директорий.

      Вначале проверьте тип контекста, который SELinux указал для директории /var/www/example.com/log:

      • sudo ls -dZ /var/www/example.com/log/

      Эта команда формирует список и выводит контекст SELinux из директории. Вы увидите примерно следующий результат:

      Output

      drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/

      В настоящее время используется контекст httpd_sys_content_t, который указывает SELinux, что процесс Apache может читать только файлы, созданные в этой директории. В ходе данного обучающего руководства вы измените тип контекста директории /var/www/example.com/log на httpd_log_t​​​​. Этот тип позволит Apache генерировать и добавлять данные в файлы журнала веб-приложения:

      • sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"

      Затем воспользуйтесь командой restorecon для применения этих изменений и их сохранения между перезагрузками:

      • sudo restorecon -R -v /var/www/example.com/log

      Флаг -R запускает эту команду рекурсивно, т. е. она будет обновлять любые существующие файлы для использования нового контекста. Флаг -v будет распечатывать изменения контекста, внесенные командой. Вы увидите следующий вывод, подтверждающий изменения:

      Output

      restorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0

      Вы можете вывести список контекста еще раз, чтобы посмотреть изменения:

      • sudo ls -dZ /var/www/example.com/log/

      Результат отражает обновленный тип контекста:

      Output

      drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log

      Теперь, когда директория /var/www/example.com/log использует тип httpd_log_t, вы готовы протестировать вашу конфигурацию виртуального хоста.

      Шаг 6 — Тестирование виртуального хоста (рекомендуется)

      После обновления контекста SELinux с помощью любого метода Apache сможет осуществлять запись в директорию /var/www/example.com/log. Теперь вы можете перезапустить службу Apache:

      • sudo systemctl restart httpd

      Сформируйте список содержимого директории /var/www/example.com/log, чтобы убедиться, что Apache создал файлы журнала:

      • ls -lZ /var/www/example.com/log

      Вы увидите, что Apache удалось создать файлы errors.log и requests.log, которые указаны в конфигурации виртуального хоста:

      Output

      -rw-r--r--. 1 root root 0 Feb 26 22:54 error.log -rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log

      Теперь, когда вы настроили ваш виртуальный хост и обновили разрешения SELinux, Apache будет обслуживать ваше доменное имя. Вы можете проверить это, открыв в браузере адрес http://example.com, после чего должны увидеть примерно следующее:

      Успешно! Виртуальный хост example.com работает!

      Это подтверждает, что ваш виртуальный хост успешно настроен и обслуживает контент. Повторите шаги 4 и 5 для создания новых виртуальных хостов с разрешениями SELinux для дополнительных доменов.

      Заключение

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

      Если вы хотите развернуть более полный комплекс приложений, ознакомьтесь с этой статьей Настройка набора LAMP в CentOS 7.



      Source link

      Настройка Nginx для использования в качестве веб-сервера и обратного прокси-сервера для Apache в One Ubuntu 18.04 Server


      Автор выбрал фонд Electronic Frontier Foundation для получения пожертвований в рамках программы Write for DOnations.

      Введение

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

      Серверы, имеющие адреса IPv4 и IPv6, можно настроить для обслуживания сайтов Apache через один протокол и сайтов Nginx через другой протокол, однако это не самый практичный вариант, поскольку еще не все провайдеры поддерживают протокол IPv6. Другое решение заключается в использовании разных номеров портов (напрмер, 81 или 8080) для второго веб-серверна, однако публикация URL-адресов с номерами портов (в формате http://example.com:81) не всегда является разумным или идеальным решением.

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

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

      Мы разместим четыре доменных имени на одном сервере. Два из них будут обслуживаться Nginx: example.com (виртуальный хост по умолчанию) и sample.org. Остальные два, foobar.net и test.io, будут обслуживаться Apache. Также мы настроим Apache для обслуживания приложений PHP с использованием PHP-FPM, что обеспечивает более высокую производительность по сравнению с mod_php.

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

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

      • Новый сервер 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:

      • sudo apt install apache2 php-fpm

      Модуль FastCGI Apache недоступен в хранилище Ubuntu, и поэтому вам следует загрузить его с kernel.org и установить с помощью команды dpkg.

      • wget https://mirrors.edge.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb
      • sudo dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb

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

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

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

      • sudo mv /etc/apache2/ports.conf /etc/apache2/ports.conf.default

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

      • echo "Listen 8080" | sudo tee /etc/apache2/ports.conf

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

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

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

      • sudo a2dissite 000-default

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

      • sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/001-default.conf

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

      • sudo nano /etc/apache2/sites-available/001-default.conf

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

      /etc/apache2/sites-available/000-default.conf

      <VirtualHost *:8080>
          ServerAdmin webmaster@localhost
          DocumentRoot /var/www/html
          ErrorLog ${APACHE_LOG_DIR}/error.log
          CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

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

      • sudo a2ensite 001-default

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

      • sudo systemctl reload apache2

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

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

      Output

      Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1086/sshd tcp6 0 0 :::8080 :::* LISTEN 4678/apache2 tcp6 0 0 :::22 :::* LISTEN 1086/sshd

      Убедившись, что 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:

      • sudo mv /etc/apache2/mods-enabled/fastcgi.conf /etc/apache2/mods-enabled/fastcgi.conf.default

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

      • sudo nano /etc/apache2/mods-enabled/fastcgi.conf

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

      /etc/apache2/mods-enabled/fastcgi.conf

      <IfModule mod_fastcgi.c>
        AddHandler fastcgi-script .fcgi
        FastCgiIpcDir /var/lib/apache2/fastcgi
        AddType application/x-httpd-fastphp .php
        Action application/x-httpd-fastphp /php-fcgi
        Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi
        FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php7.2-fpm.sock -pass-header Authorization
        <Directory /usr/lib/cgi-bin>
          Require all granted
        </Directory>
      </IfModule>
      

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

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

      • sudo systemctl reload apache2

      Если отображается предупреждение 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:

      • echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

      Чтобы просмотреть файл в браузере, откройте адрес http://your_server_ip:8080/info.php. На странице появится перечень параметров конфигурации, используемых PHP. Результат будет выглядеть примерно так:

      phpinfo Server API

      phpinfo PHP Variables

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

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

      Давайте создадим файлы виртуальных хостов Apache для доменов foobar.net и test.io. Для этого мы вначале создадим корневые каталоги документов document root для обоих сайтов и разместим в эти каталоги файлы, чтобы можно было легко протестировать нашу конфигурацию.

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

      • sudo mkdir -v /var/www/foobar.net /var/www/test.io

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

      • echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www/foobar.net/index.html
      • echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www/test.io/index.html

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

      • echo "<?php phpinfo(); ?>" | sudo tee /var/www/foobar.net/info.php
      • echo "<?php phpinfo(); ?>" | sudo tee /var/www/test.io/info.php

      Теперь создайте файл виртуального хоста для домена foobar.net:

      • sudo nano /etc/apache2/sites-available/foobar.net.conf

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

      /etc/apache2/sites-available/foobar.net.conf

          <VirtualHost *:8080>
              ServerName foobar.net
              ServerAlias www.foobar.net
              DocumentRoot /var/www/foobar.net
              <Directory /var/www/foobar.net>
                  AllowOverride All
              </Directory>
          </VirtualHost>
      

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

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

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

      • sudo nano /etc/apache2/sites-available/test.io.conf

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

      /etc/apache2/sites-available/test.io.conf

          <VirtualHost *:8080>
              ServerName test.io
              ServerAlias www.test.io
              DocumentRoot /var/www/test.io
              <Directory /var/www/test.io>
                  AllowOverride All
              </Directory>
          </VirtualHost>
      

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

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

      • sudo a2ensite foobar.net
      • sudo a2ensite test.io

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

      При отсутствии ошибок появится сообщение Syntax OK. Если появится любое другое сообщение, проверьте конфигурацию и повторите попытку.

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

      • sudo systemctl reload apache2

      Чтобы подтвердить работу сайтов, откройте в браузере адреса http://foobar.net:8080 и http://test.io:8080 и убедитесь, что для каждого из сайтов отображается файл index.html.

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

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

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

      Также попробуйте получить доступ к файлам info.php files каждого сайта, чтобы убедиться в работе PHP. Откройте адреса http://foobar.net:8080/info.php и http://test.io:8080/info.php в браузере.

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

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

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

      На этом шаге мы выполним установку Nginx и настроим домены example.com и sample.org как виртуальные хосты Nginx. Полное руководство по настройке виртуальных хостов в Nginx можно найти в документе «Настройка блоков сервера Nginx (виртуальных хостов) в Ubuntu 18.04».

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

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

      • sudo rm /etc/nginx/sites-enabled/default

      Позднее мы создадим собственный сайт по умолчанию (example.com).

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

      • sudo mkdir -v /usr/share/nginx/example.com /usr/share/nginx/sample.org

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

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

      • echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx/example.com/index.html
      • echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx/sample.org/index.html
      • echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/example.com/info.php
      • echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/sample.org/info.php

      Теперь создайте файл виртуального хоста для домена example.com:

      • sudo nano /etc/nginx/sites-available/example.com

      Nginx вызывает области серверных блоков файла конфигурации server {. . .}. Создайте серверный блок для главного виртуального хоста, example.com. Директива default_server configuration делает его виртуальным хостом по умолчанию для обработки запросов HTTP, не соответствующих никакому другому виртуальному хосту.

      /etc/nginx/sites-available/example.com

      server {
          listen 80 default_server;
      
          root /usr/share/nginx/example.com;
          index index.php index.html index.htm;
      
          server_name example.com www.example.com;
          location / {
              try_files $uri $uri/ /index.php;
          }
      
          location ~ .php$ {
              fastcgi_pass unix:/run/php/php7.2-fpm.sock;
              include snippets/fastcgi-php.conf;
          }
      }
      

      Сохраните и закройте файл. Создайте файл виртуального хоста для второго домена Nginx, sample.org:

      • sudo nano etc/nginx/sites-available/sample.org

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

      /etc/nginx/sites-available/sample.org

      server {
          root /usr/share/nginx/sample.org;
          index index.php index.html index.htm;
      
          server_name sample.org www.sample.org;
          location / {
              try_files $uri $uri/ /index.php;
          }
      
          location ~ .php$ {
              fastcgi_pass unix:/run/php/php7.2-fpm.sock;
              include snippets/fastcgi-php.conf;
          }
      }
      

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

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

      • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
      • sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org

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

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

      • sudo systemctl reload nginx

      Получите доступ к файлу phpinfo() виртуальных хостов Nginx через браузер по адресам http://example.com/info.php и http://sample.org/info.php. Снова изучите разделы PHP Variables.

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

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

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

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

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

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

      • sudo nano /etc/nginx/sites-available/apache

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

      /etc/nginx/sites-available/apache

      server {
          listen 80;
          server_name foobar.net www.foobar.net test.io www.test.io;
      
          location / {
              proxy_pass http://your_server_ip:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      

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

      • sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache

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

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

      • sudo systemctl reload nginx

      Откройте в браузере URL-адрес http://foobar.net/info.php. Перейдите в раздел PHP Variables и проверьте отображаемые значения.

      phpinfo для Apache через Nginx

      Переменные SERVER_SOFTWARE и DOCUMENT_ROOT подтверждают, что запрос был обработан Apache. Переменные HTTP_X_REAL_IP и HTTP_X_FORWARDED_FOR были добавлены Nginx и должны показывать публичный IP-адрес компьютера, используемого для доступа к URL-адресу.

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

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

      На этом шаге вы установите модуль Apache под названием mod_rpaf, который перезаписывает значения REMOTE_ADDR, HTTPS и HTTP_PORT на базе значений, предоставленных обратным прокси-сервером. Без этого модуля для некоторых приложений PHP потребуется изменение кода для бесшовной работы из-за прокси-сервера. Этот модуль представлен в хранилище Ubuntu как libapache2-mod-rpaf, однако он устарел и не поддерживает некоторые директивы конфигурации. Поэтому мы установим его из источника.

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

      • sudo apt install unzip build-essential apache2-dev

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

      • wget https://github.com/gnif/mod_rpaf/archive/stable.zip

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

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

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

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

      • sudo nano /etc/apache2/mods-available/rpaf.load

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

      /etc/apache2/mods-available/rpaf.load

      LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so
      

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

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

      • sudo nano /etc/apache2/mods-available/rpaf.conf

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

      /etc/apache2/mods-available/rpaf.conf

          <IfModule mod_rpaf.c>
              RPAF_Enable             On
              RPAF_Header             X-Real-Ip
              RPAF_ProxyIPs           your_server_ip
              RPAF_SetHostName        On
              RPAF_SetHTTPS           On
              RPAF_SetPort            On
          </IfModule>
      

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

      • RPAF_Header — заголовок, используемый для реального IP-адреса клиента.
      • RPAF_ProxyIPs — IP-адрес прокси-сервера для корректировки запросов HTTP.
      • RPAF_SetHostName — обновляет имя vhost так, чтобы работали параметры ServerName и ServerAlias.
      • RPAF_SetHTTPS — задает переменную среды HTTPS на основе значения, содержащегося в X-Forwarded-Proto.
      • RPAF_SetPort — задает переменную среды SERVER_PORT. Полезна для использования, когда сервер Apache находится за прокси-сервером SSL.

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

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

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

      • sudo systemctl reload apache2

      Откройте в браузере страницы phpinfo() по адресам http://foobar.net/info.php и http://test.io/info.php и проверьте раздел PHP Variables. Переменная REMOTE_ADDR также будет использоваться для публичного IP-адрса вашего локального компьютера.

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

      Шаг 9 — Настройка сайтов HTTPS с Let’s Encrypt (опционально)

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

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

      • sudo nano /etc/nginx/sites-available/apache

      Измените файл, чтобы он выглядел следующим образом, сайты foobar.net и test.io должны находиться в собственных server блоках:

      /etc/nginx/sites-available/apache

          server {
              listen 80;
              server_name foobar.net www.foobar.net;
      
              location / {
                  proxy_pass http://your_server_ip:8080;
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header X-Forwarded-Proto $scheme;
              }
          }
          server {
              listen 80;
              server_name test.io www.test.io;
      
              location / {
                  proxy_pass http://your_server_ip:8080;
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header X-Forwarded-Proto $scheme;
              }
          }
      

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

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

      • sudo add-apt-repository ppa:certbot/certbot

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

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

      • sudo apt install python-certbot-nginx

      После установки используйте команду certbot для генерирования сертификатов для foobar.net и www.foobar.net:

      • sudo certbot --nginx -d foobar.net -d www.foobar.net

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

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

      Далее Certbot запросит желаемый вариант настройки HTTPS:

      Output

      Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

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

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

      • sudo certbot --nginx -d test.io -d www.test.io

      Откройте один из доменов Apache в браузере с помощью префикса https://; откройте https://foobar.net/info.php, и вы увидите следующее:

      phpinfo ssl

      Посмотрите раздел PHP Variables. Для переменной SERVER_PORT задано значение 443 и протокол HTTPS включен, как если бы осуществлялся прямой доступ к Apache через HTTPS. При такой настройке переменных не нужно специально настраивать приложения PHP для работы за обратным прокси-сервером.

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

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

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

      • sudo iptables -I INPUT -p tcp --dport 8080 ! -s your_server_ip -j REJECT --reject-with tcp-reset

      Обязательно используйте IP-адрес своего сервера вместо выделенного красным адреса в примере. Когда ваш брандмауэр заблокирует порт 8080, убедитесь в недоступности Apache через этот порт. Для этого откройте браузер и попробуйте получить доступ к любому из доменных имен Apache через порт 8080. Например: http://example.com:8080

      Браузер должен вывести сообщение об ошибке Unable to connect (Не удается подключиться) или Webpage is not available (Страница недоступна). Если используется опция IPtables tcp-reset, сторонний наблюдатель не увидит разницы между портом 8080 и портом, где отсутствует какое-либо обслуживание.

      Примечание. По умолчанию правила 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:

      • sudo nano /etc/nginx/sites-available/apache

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

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

      /etc/nginx/sites-available/apache

      server {
          listen 80;
          server_name test.io www.test.io;
          root /var/www/test.io;
          index index.php index.htm index.html;
      
          location / {
              try_files $uri $uri/ /index.php;
          }
      
          location ~ .php$ {
              proxy_pass http://your_server_ip:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      
          location ~ /.ht {
              deny all;
          }
      }
      
      server {
          listen 80;
          server_name foobar.net www.foobar.net;
          root /var/www/foobar.net;
          index index.php index.htm index.html;
      
          location / {
              try_files $uri $uri/ /index.php;
          }
      
          location ~ .php$ {
              proxy_pass http://your_ip_address:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      
          location ~ /.ht {
              deny all;
          }
      }
      

      Если вы также хотите обеспечить доступность HTTPS, используйте следующую конфигурацию:

      /etc/nginx/sites-available/apache

      server {
          listen 80;
          server_name test.io www.test.io;
          root /var/www/test.io;
          index index.php index.htm index.html;
      
          location / {
              try_files $uri $uri/ /index.php;
          }
      
          location ~ .php$ {
              proxy_pass http://your_server_ip:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      
          location ~ /.ht {
              deny all;
          }
      
          listen 443 ssl;
          ssl_certificate /etc/letsencrypt/live/test.io/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/test.io/privkey.pem;
          include /etc/letsencrypt/options-ssl-nginx.conf;
          ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
      }
      
      server {
          listen 80;
          server_name foobar.net www.foobar.net;
          root /var/www/foobar.net;
          index index.php index.htm index.html;
      
          location / {
              try_files $uri $uri/ /index.php;
          }
      
          location ~ .php$ {
              proxy_pass http://your_ip_address:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      
          location ~ /.ht {
              deny all;
          }
      
          listen 443 ssl;
          ssl_certificate /etc/letsencrypt/live/foobar.net/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/foobar.net/privkey.pem;
          include /etc/letsencrypt/options-ssl-nginx.conf;
          ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
      }
      

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

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

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

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

      • sudo service nginx reload

      Чтобы убедиться, что все работает, вы можете просмотреть файлы журнала Apache в каталоге /var/log/apache2 и посмотреть запросы GET для файлов info.php сайтов test.io и foobar.net. Используйте команду tail для просмотра последних нескольких строк файла и параметр -f для просмотра изменений файла:

      • sudo tail -f /var/log/apache2/other_vhosts_access.log

      Теперь откройте в браузере http://test.io/info.php и посмотрите на результаты вывода журнала. Вы увидите ответ Apache:

      Output

      test.io:80 your_server_ip - - [01/Jul/2016:18:18:34 -0400] "GET /info.php HTTP/1.0" 200 20414 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"

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

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

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

      Заключение

      Вы настроили один сервер Ubuntu, где Nginx обслуживает сайты example.com и sample.org, а Apache обслуживает сайты foobar.net и test.io. Хотя Nginx выступает в качестве обратного прокси-сервера Apache, прокси-служба Nginx невидима, и подключение к доменам Apache выглядит так, как если бы оно напрямую обслуживалось Apache. Вы можете использовать этот метод для вывода защищенных и статичных сайтов.



      Source link

      Установка веб-сервера Apache в Debian 9


      Введение

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

      В этом обучающем модуле мы расскажем, как установить веб-сервер Apache на сервере Debian 9.

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

      Прежде чем начать прохождение настоящего обучающего модуля, необходимо настроить на сервере обычного пользователя без привилегий root и с привилегиями sudo. Также вам потребуется включить базовый брандмауэр, чтобы заблокировать все порты, кроме необходимых. Вы научитесь настраивать учетную запись обычного пользователя и брандмауэр для вашего сервера, следуя указаниям руководства Начальная настройка сервера Debian 9.

      Создав учетную запись, войдите в систему как пользователь без привилегий root.

      Шаг 1 — Установка Apache

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

      Для начала выгрузим указатель локальных пакетов, чтобы отразить последние изменения на предыдущих уровнях:

      Затем установим пакет apache2:

      После подтверждения установки apt выполнит установку Apache и всех требуемых зависимостей.

      Шаг 2 — Настройка брандмауэра

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

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

      Выведите список профилей приложений ufw, введя следующую команду:

      Вы увидите список профилей приложений:

      Output

      Available applications: AIM Bonjour CIFS . . . WWW WWW Cache WWW Full WWW Secure . . .

      Профили Apache начинаются с WWW:

      • WWW: этот профиль открывает только порт 80 (обычный веб-трафик без шифрования)
      • WWW Cache: этот профиль открывает только порт 8080 (иногда используется для кэширования и веб-прокси)
      • WWW Full: этот профиль открывает порт 80 (обычный веб-трафик без шифрования) и порт 443 (трафик TLS/SSL с шифрованием)
      • WWW Secure: этот профиль открывает только порт 443 (трафик с шифрованием TLS/SSL)

      Рекомендуется применять самый ограничивающий профиль, который будет разрешать заданный трафик. Поскольку в этом модуле мы еще не настроили SSL для нашего сервера, нам нужно будет только разрешить трафик на порту 80.

      Для проверки изменений введите:

      В результатах вы должны увидеть, что трафик HTTP разрешен:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere WWW ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) WWW (v6) ALLOW Anywhere (v6)

      Как видите, профиль был активирован для разрешения доступа к веб-серверу.

      Шаг 3 — Проверка веб-сервера

      В конце процесса установки Debian 9 запускает Apache. Веб-сервер уже должен быть запущен и работать.

      Используйте команду systemd init system, чтобы проверить работу службы:

      • sudo systemctl status apache2

      Output

      ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2018-09-05 19:21:48 UTC; 13min ago Main PID: 12849 (apache2) CGroup: /system.slice/apache2.service ├─12849 /usr/sbin/apache2 -k start ├─12850 /usr/sbin/apache2 -k start └─12852 /usr/sbin/apache2 -k start Sep 05 19:21:48 apache systemd[1]: Starting The Apache HTTP Server... Sep 05 19:21:48 apache systemd[1]: Started The Apache HTTP Server.

      Как видно из результатов, служба успешно запущена. Однако лучше всего протестировать ее запуск посредством запроса страницы из Apache.

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

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

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

      Альтернатива заключается в использовании инструмента curl, который должен предоставить вам публичный IP-адрес, отображаемый в других местах в интернете.

      Вначале выполните установку curl с помощью apt:

      Затем используйте curl для получения icanhazip.com с помощью IPv4:

      Когда вы узнаете IP-адрес вашего сервера, введите его в адресную строку браузера:

      http://your_server_ip
      

      Вы увидите веб-страницу Debian 9 Apache по умолчанию:

      Страница Apache по умолчанию

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

      Шаг 4 — Управление процессом Apache

      Теперь ваш веб-сервер запущен и работает, и настало время изучить некоторые простые команды управления.

      Чтобы остановить веб-сервер, введите:

      • sudo systemctl stop apache2

      Чтобы запустить остановленный веб-сервер, введите:

      • sudo systemctl start apache2

      Чтобы остановить и снова запустить службу, введите:

      • sudo systemctl restart apache2

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

      • sudo systemctl reload apache2

      По умолчанию Apache настроен на автоматический запуск при загрузке сервера. Если вы не хотите этого, отключите такое поведение с помощью следующей команды:

      • sudo systemctl disable apache2

      Чтобы перезагрузить службу для запуска во время загрузки, введите:

      • sudo systemctl enable apache2

      Теперь Apache должен запуститься автоматически при следующей загрузке сервера.

      Шаг 5 — Настройка виртуальных хостов (рекомендуется)

      При использовании веб-сервера Apache вы можете использовать виртуальные хосты (аналогичные серверным блокам в Nginx) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов. Мы создадим домен example.com, но вы должны заменить это имя собственным доменным именем. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, пройдите наш обучающий модуль Введение в DigitalOcean DNS.

      В Apache в Debian 9 по умолчанию включен один серверный блок, настроенный на обслуживание документов из каталога /var/www/html. Хотя это хорошо работает для отдельного сайта, при хостинге нескольких сайтов это неудобно. Вместо изменения /var/www/html мы создадим в /var/www структуру каталогов для нашего сайта example.com, оставив /var/www/html как каталог по умолчанию для вывода в случае, если запросу клиента не соответствуют никакие другие сайты.

      Создайте каталог для example.com следующим образом, используя опцию -p для создания необходимых родительских каталогов:

      sudo mkdir -p /var/www/example.com/html
      

      Затем назначьте владение каталогом с помощью переменной среды $USER:

      • sudo chown -R $USER:$USER /var/www/example.com/html

      Разрешения корневых каталогов веб-сервера должны быть правильными, если вы не изменяли значение unmask. Тем не менее, вы можете проверить это с помощью следующей команды:

      • sudo chmod -R 755 /var/www/example.com

      Затем создайте в качестве примера страницу index.html, используя nano или свой любимый редактор:

      • nano /var/www/example.com/html/index.html

      Добавьте в страницу следующий образец кода HTML:

      /var/www/example.com/html/index.html

      <html>
          <head>
              <title>Welcome to Example.com!</title>
          </head>
          <body>
              <h1>Success!  The example.com virtual host is working!</h1>
          </body>
      </html>
      

      Сохраните файл и закройте его после завершения.

      Для обслуживания этого контента Apache необходимо создать файл виртуального хоста с правильными директивами. Вместо изменения файла конфигурации по умолчанию /etc/apache2/sites-available/000-default.conf мы создадим новый файл /etc/apache2/sites-available/example.com.conf:

      • sudo nano /etc/apache2/sites-available/example.com.conf

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

      /etc/apache2/sites-available/example.com.conf

      <VirtualHost *:80>
          ServerAdmin [email protected]
          ServerName example.com
          ServerAlias www.example.com
          DocumentRoot /var/www/example.com/html
          ErrorLog ${APACHE_LOG_DIR}/error.log
          CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

      Обратите внимание, что мы изменили DocumentRoot на новый каталог, а ServerAdmin — на адрес электронной почты, доступный администратору сайта example.com. Также мы добавили две директивы: директиву ServerName, которая устанавливает базовый домен и должна соответствовать определению виртуального хоста, и директиву ServerAlias, которая задает дополнительные имена, которые должны давать совпадение, как если бы они были базовыми именами.

      Сохраните файл и закройте его после завершения.

      Активируем файл с помощью инструмента a2ensite:

      • sudo a2ensite example.com.conf

      Отключите сайт по умолчанию, определеный в 000-default.conf:

      • sudo a2dissite 000-default.conf

      Затем проверим ошибки конфигурации:

      • sudo apache2ctl configtest

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

      Output

      Syntax OK

      Перезапустие Apache для внесения изменений:

      • sudo systemctl restart apache2

      Теперь Apache должен обслуживать ваше доменное имя. Вы можете проверить это, открыв в браузере адрес http://example.com, после чего должны увидеть примерно следующее:

      Пример виртуального хоста Apache

      Шаг 6 — Знакомство с важными файлами и каталогами Apache

      Теперь вы научились управлять службой Apache, и настало время познакомиться с несколькими важными каталогами и файлами.

      Контент

      • /var/www/html: веб-контент, в состав которого по умолчанию входит только показанная ранее страница Apache по умолчанию, выводится из каталога /var/www/html. Это можно изменить путем изменения файлов конфигурации Apache.

      Конфигурация сервера

      • /etc/apache2: каталог конфигурации Apache. Здесь хранятся все файлы конфигурации Apache.
      • /etc/apache2/apache2conf: главный файл конфигурации Apache. Его можно изменить для внесения изменений в глобальную конфигурацию Apache. Этот файл отвечает за загрузку многих других файлов в каталоге конфигурации.
      • /etc/apache2/ports.conf: этот файл задает порты, которые будет прослушивать Apache. По умолчанию Apache прослушивает порта 80, а если активирован модуль с функциями SSL, он также прослушивает порт 443.
      • /etc/apache2/sites-available/: каталог, где можно хранить виртуальные хосты для каждого сайта. Apache не будет использовать файлы конфигурации из этого каталога, если они не будут связаны с каталогом sites-enabled. Обычно все изменения конфигурации серверных блоков выполняются в этом каталоге, а затем активируются посредством ссылки на другой каталог с помощью команды a2ensite.
      • /etc/apache2/sites-enabled/: каталог, где хранятся активные виртуальные хосты для каждого сайта. Обычно они создаются посредством создания ссылок на файлы конфигурации из каталога sites-available с помощью команды a2ensite. Apache считывает файлы конфигурации и ссылки из этого каталога при запуске или перезагрузке, когда компилируется полная конфигурация.
      • /etc/apache2/conf-available/, /etc/apache2/conf-enabled/: эти каталоги имеют те же отношения, что и каталоги sites-available и sites-enabled, но используются для хранения фрагментов конфигурации, которые не принадлежат виртуальному хосту. Файлы из каталога conf-available можно активировать с помощью команды a2enconf и отключить с помощью команды a2disconf.
      • /etc/apache2/mods-available/, /etc/apache2/mods-enabled/: эти каталоги содержат доступны и активированные модули соответственно. Файлы с расширением .load содержат фрагменты для загрузки определенных модулей, а файлы с расширением .conf содержат конфигурации этих модулей. Модули можно активировать и отключать с помощью команд a2enmod и a2dismod.

      Журналы сервера

      • /var/log/apache2/access.log: по умолчанию каждый запрос веб-сервера регистрируется в этом файле журналда, если Apache не настроен по другому.
      • /var/log/apache2/error.log: по умолчанию все ошибки регистрируются в этом файле. Директива LogLevel в конфигурации Apache указывает, насколько детальные записи регистрируются в журналах ошибок.

      Заключение

      Теперь вы установили веб-сервер и у вас есть богатые возможности выбора типа обслуживаемого контента и технологий для расширения возможностей пользователя.

      Если вы хотите развернуть более полный комплекс приложений, ознакомьтесь с этой статьей Настройка набора LAMP в Debian 9.



      Source link