Вступление
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. Вы можете использовать этот метод для обслуживания безопасных и статических сайтов.