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

Вступление

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

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

Из этого туториала вы узнаете, как настроить 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 в Initial Server Setup с Ubuntu 16.04 ,

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

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

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

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

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

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

sudo apt-get update

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

sudo apt-get install 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

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

Listen 80

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

Listen

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

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

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

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

<VirtualHost *:80>

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

<VirtualHost *:>

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

sudo systemctl reload apache2

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

sudo netstat -tlpn
Вывод должен выглядеть следующим образом: * apache2 * прослушивает *

8080 *.

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 :::22             :::*                 LISTEN   1086/sshd

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

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

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

sudo a2dismod php7.0

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

sudo a2enmod actions

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

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

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

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.0-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
   Require all granted
</Directory>

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

sudo apachectl -t

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

sudo systemctl reload apache2

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

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

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

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

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

изображение: https: //assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/YbWDj9i.png [phpinfo Server API]

изображение: https: //assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/363bUHT.png [phpinfo 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/{,}

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

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

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

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

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

sudo nano /etc/apache2/sites-available/.conf

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

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

Это только самые основные директивы. Полное руководство по настройке виртуальных хостов в Apache см. В How Настроить виртуальные хосты Apache в Ubuntu 16.04.

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

sudo nano /etc/apache2/sites-available/.conf
<VirtualHost *:8080>
   ServerName
   ServerAlias www.
   DocumentRoot /var/www/
   <Directory /var/www/>
       AllowOverride All
   </Directory>
</VirtualHost>

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

sudo a2ensite
sudo a2ensite

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

sudo apachectl -t

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

sudo systemctl reload apache2

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

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

изображение: https: //assets.digitalocean.com/articles/apache_and_nginx/3.png [страница индекса foobar.net]

изображение: https: //assets.digitalocean.com/articles/apache_and_nginx/4.png [индексная страница test.io]

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

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

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

На этом шаге мы установим Nginx и настроим домены + example.com + и + sample.org + в качестве виртуальных хостов Nginx. Полное руководство по настройке виртуальных хостов в Nginx см. По адресу https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16. -04 [Как настроить серверные блоки Nginx (виртуальные хосты) в Ubuntu 16.04].

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

sudo apt-get install nginx

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

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

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

sudo mkdir -v /usr/share/nginx/{,}

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

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

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

sudo nano /etc/nginx/sites-available/

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

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

server {
   listen 80 default_server;

   root /usr/share/nginx/;
   index index.php index.html index.htm;

   server_name ;
   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/

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

server {
   root /usr/share/nginx/;
   index index.php index.html index.htm;

   server_name ;
   location / {
       try_files $uri $uri/ /index.php;
   }

   location ~ \.php$ {
       fastcgi_pass unix:/run/php/php7.0-fpm.sock;
       include snippets/fastcgi-php.conf;
   }
}

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

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

Выполните тест конфигурации Nginx:

sudo nginx -t

Затем перезагрузите Nginx, если отображается * OK *.

sudo systemctl reload nginx

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

изображение: https: //assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/A43puCy.png [PHP-переменные Nginx]

  • [«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 +.

server {
   listen 80;
   server_name ;

   location / {
       proxy_pass http://: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

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

sudo nginx -t

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

sudo systemctl reload nginx

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

изображение: https: //assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/A465fzT.png [phpinfo из Apache через Nginx]

Переменные * SERVER_SOFTWARE * и * DOCUMENT_ROOT * подтверждают, что этот запрос был обработан Apache. Переменные * HTTPXREAL_IP * и * HTTPXFORWARDED_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 install unzip build-essential apache2-dev

Загрузите последнюю стабильную версию с GitHub.

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

Распакуйте его:

unzip stable.zip

Перейдите в рабочий каталог.

cd mod_rpaf-stable

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

make
sudo make install

Создайте файл в каталоге + 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             On
   RPAF_Header             X-Real-Ip
   RPAF_ProxyIPs
   RPAF_SetHostName        On
   RPAF_SetHTTPS           On
   RPAF_SetPort            On
</IfModule>

Вот краткое описание каждой директивы. Смотрите файл + mod_rpaf + README для получения дополнительной информации.

  • * 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 + и включите модуль.

sudo a2enmod rpaf

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

sudo apachectl -t

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

sudo systemctl reload apache2

Откройте в браузере один из сайтов Apache "+ phpinfo () +" и проверьте раздел * 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/-key.pem -out /etc/nginx/ssl/-cert.pem -days 3650 -nodes
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/-key.pem -out /etc/nginx/ssl/-cert.pem -days 3650 -nodes

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

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

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

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

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

server {
   listen 80;
   listen 443 ssl;
   server_name ;

   ssl on;
   ssl_certificate /etc/nginx/ssl/-cert.pem;
   ssl_certificate_key /etc/nginx/ssl/-key.pem;

   location / {
       proxy_pass http://: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;
   listen 443 ssl;
   server_name ;

   ssl on;
   ssl_certificate /etc/nginx/ssl/-cert.pem;
   ssl_certificate_key /etc/nginx/ssl/-key.pem;

   location / {
       proxy_pass http://: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;
   }
}

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

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

sudo nginx -t

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

sudo systemctl reload nginx

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

изображение: https: //assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/hkuGcN8.png [phpinfo ssl]

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

Шаг 10 - Блокировка прямого доступа к Apache (необязательно)

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

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

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

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

  • Примечание: * Правила IPtables не выдерживают перезагрузку системы по умолчанию. Есть несколько способов сохранить правила IPtables, но самый простой - использовать + iptables-persistent + в репозитории Ubuntu. Изучите th article, чтобы узнать больше о том, как настроить IPTables ,

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

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

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

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

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

server {
   listen 80;
   server_name test.io www.test.io;








       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;
   }




}

server {
   listen 80;
   server_name foobar.net www.foobar.net;








       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;
   }




}

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

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

sudo nginx -t

Перезагрузите 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 действительно отвечает:

- - [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 не сможет ограничить доступ к статическим файлам. Контроль доступа для статических файлов должен быть настроен в файле виртуального хоста Nginx + apache +.

Заключение

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

Related