Как настроить Nginx в качестве веб-сервера и обратного прокси-сервера для Apache на одном сервере Ubuntu 16.04

  1. Вступление Apache и Nginx - два популярных веб-сервера с открытым исходным кодом, которые часто используются...
  2. Шаг 1 - Установка Apache и PHP-FPM
  3. Шаг 2 - Настройка Apache и PHP-FPM
  4. Шаг 3 - Настройка Apache для использования mod_fastcgi
  5. Шаг 4 - Проверка функциональности PHP
  6. Шаг 5 - Создание виртуальных хостов для Apache
  7. Шаг 6 - Установка и настройка Nginx
  8. Шаг 7 - Настройка Nginx для виртуальных хостов Apache
  9. Шаг 8 - Установка и настройка mod_rpaf
  10. Шаг 9 - Настройка веб-сайтов HTTPS (необязательно)
  11. Шаг 10 - Блокировка прямого доступа к Apache (необязательно)
  12. Шаг 11 - Обслуживание статических файлов с использованием Nginx (необязательно)
  13. Заключение

Вступление

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.

Предпосылки

  • Новая Ubuntu 16.04 Droplet.
  • Стандартная учетная запись пользователя с привилегиями sudo. Вы можете настроить стандартную учетную запись, выполнив шаги 2 и 3 Начальная настройка сервера с Ubuntu 16.04 ,
  • Нужные доменные имена должны указывать на IP-адрес вашего дроплета на панели управления DigitalOcean. Смотрите Шаг 3 Как настроить имя хоста с DigitalOcean например, как это сделать. Если вы размещаете DNS своего домена в другом месте, вам следует вместо этого создать соответствующие записи А.

Дополнительные ссылки

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

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

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

Сначала обновите репозиторий apt, чтобы у вас были самые последние пакеты.

Далее установите необходимые пакеты:

  • sudo apt-get установить apache2 libapache2-mod-fastcgi php-fpm

Далее давайте изменим конфигурацию Apache по умолчанию.

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

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

  • sudo nano /etc/apache2/ports.conf

Найдите следующую строку:

Слушай 80

Измените это на:

Слушай 8080

Сохраните и выйдите из ports.conf.

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

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

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

Первая строка должна быть:

<VirtualHost *: 80>

Измените это на:

<VirtualHost *: 8080>

Сохраните файл и перезагрузите Apache.

  • sudo systemctl перезагрузить apache2

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

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

Активные подключения к Интернету (только серверы) Proto Recv-Q Локальный адрес Send-Q Внешний адрес Состояние PID / Имя программы tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1086 / sshd tcp6 0 0 ::: 8080 ::: * СЛУШАТЬ 4678 / apache2 tcp6 0 0 ::: 22 ::: * СЛУШАТЬ 1086 / sshd

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

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

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

Примечание . Если вы пробуете этот урок на существующей установке LAMP с mod_php, сначала отключите его с помощью:

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

Эти директивы конфигурации передают запросы файлов .php в сокет PHP-FPM UNIX.

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

Добавьте следующие строки в <IfModule mod_fastcgi.c>. , , Блок </ IfModule> под существующими элементами в этом блоке:

Приложение AddType / x-httpd-fastphp .php Приложение действия / 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.0-fpm.sock -pass-header Авторизация <Directory / usr / lib / cgi-bin> Требовать все предоставленные </ Directory>

Сохраните внесенные изменения в fastcgi.conf и выполните тест конфигурации.

Перезагрузите Apache, если отображается синтаксис OK . Если вы видите предупреждение Не удалось надежно определить полное доменное имя сервера, используя 127.0.1.1. Установите глобальную директиву «ServerName», чтобы подавить это сообщение. Это не влияет на нас сейчас.

  • sudo systemctl перезагрузить apache2

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

Шаг 4 - Проверка функциональности PHP

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

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

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

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

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

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

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

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

Затем создайте индексный файл для каждого сайта.

  • 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

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

<VirtualHost *: 8080> Имя_сервера 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

<VirtualHost *: 8080> Имя_сервера test.io ServerAlias ​​www. test.io DocumentRoot / var / www / test.io <Directory / var / www / test.io> AllowOverride All </ Directory> </ VirtualHost>

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

Проверьте Apache на ошибки конфигурации снова.

Перезагрузите Apache, если отображается синтаксис OK .

  • sudo systemctl перезагрузить apache2

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

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

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

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

Вы должны увидеть один и тот же список спецификаций конфигурации PHP на каждом сайте, как вы видели в шаге 4. Теперь у нас есть два сайта, размещенные на Apache на порту 8080

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

На этом этапе мы установим Nginx и настроим домены example.com и sample.org как виртуальные хосты Nginx. Полное руководство по настройке виртуальных хостов в Nginx смотрите Как настроить серверные блоки Nginx (виртуальные хосты) в Ubuntu 16.04 ,

Установите Nginx, используя менеджер пакетов.

  • sudo apt-get установить nginx

Затем удалите символическую ссылку виртуального хоста по умолчанию, так как мы больше не будем ее использовать. Позже мы создадим наш собственный сайт по умолчанию (example.com).

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

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

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

Как и в случае с виртуальными хостами 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 вызывает сервер {. , .} области блоков конфигурационного файлового сервера . Создайте блок сервера для основного виртуального хоста, example.com. Директива конфигурации default_server делает его виртуальным хостом по умолчанию, который обрабатывает HTTP-запросы, которые не соответствуют ни одному другому виртуальному хосту.

Вставьте следующее в файл для example.com:

сервер {слушай 80 default_server; root / usr / share / nginx / example.com; index index.php index.html index.htm; имя_сервера example.com www.example.com; location / {try_files $ uri $ uri / /index.php; } location ~ \ .php $ {fastcgi_pass unix: /run/php/php7.0-fpm.sock; include snippets / fastcgi-php.conf; }}

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

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

Блок сервера для sample.org должен выглядеть следующим образом:

сервер {root / usr / share / nginx / sample.org; index index.php index.html index.htm; имя_сервера sample.org www.sample.org; location / {try_files $ uri $ uri / /index.php; } location ~ \ .php $ {fastcgi_pass unix: /run/php/php7.0-fpm.sock; include snippets / fastcgi-php.conf; }}

Сохраните и закройте файл. Затем включите оба сайта, создав символические ссылки на каталог сайтов с поддержкой.

  • 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, если отображается OK .

  • sudo systemctl перезагрузить nginx

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

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

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

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

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

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

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

Добавьте блок кода ниже. Это указывает имена обоих доменов виртуальных хостов Apache и передает их запросы в Apache. Не забудьте использовать публичный IP-адрес в proxy_pass.

сервер {слушай 80; имя_сервера 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 $ схема; }}

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

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

Провести тест конфигурации:

Перезагрузите Nginx, если отображается OK .

  • sudo systemctl перезагрузить nginx

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

Переменные 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-get установить разархивировать 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

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

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

Создайте другой файл в этом каталоге. Это будет содержать директивы конфигурации.

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

Добавьте следующий блок кода, убедившись, что добавили IP-адрес вашей капли.

<IfModule mod_rpaf.c> RPAF_Enable на RPAF_Header X-Real-Ip RPAF_ProxyIPs your_server_ip RPAF_SetHostName в RPAF_SetHTTPS в RPAF_SetPort вкл </ IfModule>

Вот краткое описание каждой директивы. Смотрите mod_rpaf ПРОЧТИ МЕНЯ файл для получения дополнительной информации.

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

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

Это создает символические ссылки на файлы rpaf.load и rpaf.conf в директории с поддержкой модов. Теперь сделайте тест конфигурации.

Перезагрузите Apache, если возвращен синтаксис OK .

  • sudo systemctl перезагрузить apache2

Перейдите на страницу phpinfo () веб-сайтов Apache в вашем браузере и проверьте раздел PHP Variables . Переменная REMOTE_ADDR теперь также будет переменной публичного IP-адреса вашего локального компьютера.

Шаг 9 - Настройка веб-сайтов HTTPS (необязательно)

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

Создайте каталог для сертификатов SSL и их закрытых ключей.

  • sudo mkdir / etc / nginx / ssl

Для этой статьи мы будем использовать самозаверяющие SSL-сертификаты со сроком действия 10 лет. Создайте самозаверяющие сертификаты для foobar.net и test.io.

  • sudo openssl req -x509 -sha256 -newkey rsa: 2048 -keyout / etc / nginx / ssl / foobar.net -key.pem -out / etc / nginx / ssl / foobar.net -cert.pem -days 3650 -nodes
  • sudo openssl req -x509 -sha256 -newkey rsa: 2048 -keyout / etc / nginx / ssl / test.io -key.pem -out / etc / nginx / ssl / test.io -cert.pem -days 3650 -nodes

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

Название страны (двухбуквенный код) [AU]: название штата или провинции США (полное название) [в некоторых штатах]: название населенного пункта Нью-Йорка (например, город) []: название организации города Нью-Йорка (например, компании) [Интернет Widgits Pty Ltd]: название подразделения организации DigitalOcean Inc (например, раздел) []: общее имя (например, полное доменное имя сервера или ваше имя) []: адрес электронной почты foobar.net []:

Теперь откройте файл виртуального хоста Apache, который передает запросы от Nginx к Apache.

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

Поскольку у нас есть отдельные сертификаты и ключи для каждого домена, нам нужен отдельный сервер {. , , } блоки для каждого домена. Вы должны удалить текущее содержимое файла и заменить его следующим содержимым:

сервер {слушай 80; слушай 443 песни; имя_сервера test.io www.test.io; ssl on; ssl_certificate / etc / nginx / ssl / test.io -cert.pem; ssl_certificate_key / etc / nginx / ssl / test.io -key.pem; 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 $ схема; }} сервер {слушай 80; слушай 443 песни; имя_сервера foobar.net www.foobar.net; ssl on; ssl_certificate / etc / nginx / ssl / foobar.net -cert.pem; ssl_certificate_key / etc / nginx / ssl / foobar.net -key.pem; 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 $ схема; }}

Мы разделили исходный серверный блок на два отдельных блока и также попросили Nginx прослушивать порт 443, порт по умолчанию для защищенных сайтов.

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

Перезагрузите Nginx, если тест пройден успешно.

  • sudo systemctl перезагрузить nginx

Теперь откройте один из доменов Apache в своем браузере, используя префикс https: //. Сначала посетите https: // foobar.net /info.php, и вы увидите это:

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

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

Шаг 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-адрес вашего Droplet вместо примера красным. Как только порт 8080 заблокирован в брандмауэре, проверьте, что Apache недоступен для него. Откройте веб-браузер и попробуйте получить доступ к одному из доменных имен Apache через порт 8080. Например: http: // example.com: 8080

В браузере должно отображаться сообщение об ошибке «Не удается подключиться» или «Веб-страница недоступна». С опцией tcp-reset IPtables сторонний разработчик не увидит никакой разницы между портом 8080 и портом, на котором нет никакой службы.

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

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

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

Сначала откройте файл виртуального хоста apache.

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

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

сервер {слушай 80; имя_сервера 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_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 $ схема; } расположение ~ / \. {отрицать все; }} сервер {слушай 80; имя_сервера 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 $ схема; } расположение ~ / \. {отрицать все; }}

Если вы также хотите, чтобы HTTPS был доступен, сохраните прослушивание 443 ssl; линии и другие настройки SSL из шага 9.

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

Предупреждение: расположение ~ / \. директива очень важна; это не позволяет Nginx печатать содержимое таких файлов, как .htaccess и .htpasswd, которые содержат конфиденциальную информацию.

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

Перезагрузите Nginx, если тест пройден успешно.

  • sudo service nginx reload

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

  • хвост sudo -f /var/log/apache2/other_vhosts_access.log

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

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, как Gecko) Chrome / 47.0.2526.111 Safari / 537.36 "

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

Когда вы закончите наблюдать файл журнала, нажмите CTRL + C, чтобы прекратить следить за ним.

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

Заключение

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

Echo "<?
Php phpinfo ();?
Echo "<?
Php phpinfo ();?
Php phpinfo ();?
Php phpinfo ();?
Php phpinfo ();?