У меня есть человечность 16.04 с nginx и apache2. Существует 2 DNS, записи указали на эту машину:
Мне нужен app1.mydomain.com, который будет разрешен апачем и app2.mydomain.com, который будет разрешен nginx. Оба на порте 80. Действительно ли это возможно?
кроме того, апач должен обработать 2 различных приложения (site1 и site2).
Я хотел бы:
Это - моя конфигурация Apache:
<VirtualHost *:80>
ServerAdmin admin@mydomain.com
ServerName app1.mydomain.com
ServerAlias www.app1.mydomain.com
ErrorLog /var/www/site1/logs/error.log
CustomLog /var/www/site1/logs/access.log combined
WSGIScriptAlias /api /var/www/site1/application/index.py/
Alias /static /var/www/site1/application/static
<Directory /var/www/site1/application>
Order deny,allow
Allow from all
</Directory>
AddType text/html .py
ErrorLog /var/www/site2/logs/error.log
CustomLog /var/www/site2/logs/access.log combined
WSGIScriptAlias /site2 /var/www/site2/index.py/
Alias /site2/uploads /var/sftp/site2/uploads/
<Directory /var/www/site2/>
Order deny,allow
Allow from all
</Directory>
Это - мой файл конфигурации NGINX:
server {
listen 8080;
listen [::]:8080;
server_name app2.mydomain.com;
root /var/www/ghost/system/nginx-root;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
location ~ /.well-known {
allow all;
}
client_max_body_size 50m;
}
В первую очередь. Apache и Nginx являются веб-серверами - не серверы DNS. Они ничего не разрешают. Этот вопрос не имеет никакого отношения к DNS, но все с тем, как веб-серверы обрабатывают запросы.
Мне нужен app1.mydomain.com, который будет разрешен апачем и app2.mydomain.com, который будет разрешен nginx. Оба на порте 80. Действительно ли это возможно?
Нет, это не возможно. Два приложения не могут слушать тот же порт. Можно решить это двумя способами:
Или - сделайте обоих размещенными тем же веб-сервером. Apache и nginx находятся во многих экземплярах, взаимозаменяемых на техническом уровне, таким образом, с точки зрения приложений он не должен действительно иметь значения. Мудрый управлением они довольно отличаются.
Я отмечаю, что Вы выполняете nginx на порте 8080, таким образом, я предполагаю, что Вы хотите использовать апача в качестве прокси. Затем создайте новый Виртуальный Хост к апачу, например. /etc/apache2-sites-available/app2.mydomain.com.conf
:
<VirtualHost *:80>
DocumentRoot "/var/www"
ErrorLog "logs/app2-error_log"
CustomLog "logs/app2-access_log" common
ServerName app2.mydomain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
Proxypass / http://localhost:8080/
</VirtualHost>
Затем выполненный sudo a2enmod proxy_http; sudo a2ensite app2.mydomain.com; sudo service apache2 reload
.
Это включит mod_proxy, mod_proxy_http и заставит апача передать любые запросы для VirtualHost app2.mydomain.com к nginx, который согласно Вашей конфигурации работает на порте 8080.
Я не протестировал эту конфигурацию, таким образом, некоторая тонкая настройка может быть необходима.
Как заметка на полях: почему Вам нужен nginx? Согласно установке nginx это просто проксирует запрос на некоторую другую работу веб-сервера порта 2368. Можно проксировать непосредственно использующего апача...
mod_proxy-документация может быть удобной в тонкой настройке его.
Содержанием Вашего вопроса Вам уже разработали его, за исключением того, что можно только получить доступ к одному приложению на порт #. Вы не можете выполнить и Apache2 и Nginx на том же порте. Это не возможно.
Так как Вы упомянули, что у Вас уже есть своя работа DNS и указывающий на корректную машину (IP). Можно достигнуть Вашего app1.mydomain.com
значением по умолчанию (port 80
) с:
http://app1.mydomain.com
Это совпадает с
http://app1.mydomain.com:80
Необходимо будет указать порт для Nginx, для которого Вы, Вашим конфигурационным файлом, установили port 8080
.
Используйте это для доступа к site1:
http://app1.mydomain.com:8080
При определении неправильного порта страница по умолчанию загрузится независимо от используемого доменного имени. Для Apache значение по умолчанию является первым виртуальным хостом, если не указано отличающимся.