nginx и apache2 на том же сервере

У меня есть человечность 16.04 с nginx и apache2. Существует 2 DNS, записи указали на эту машину:

  • app1.mydomain.com
  • app2.mydomain.com

Мне нужен app1.mydomain.com, который будет разрешен апачем и app2.mydomain.com, который будет разрешен nginx. Оба на порте 80. Действительно ли это возможно?

кроме того, апач должен обработать 2 различных приложения (site1 и site2).

Я хотел бы:

  • app1.mydomain.com/site1 - быть разрешенным апачским и выполненным приложением site1
  • app1.mydomain.com/site2 - быть разрешенным приложением site2 огня и апачем
  • app2.mydomain.com - вручать фантомное приложение с nginx

Это - моя конфигурация 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;
}
2
задан 8 April 2018 в 19:28

2 ответа

В первую очередь. Apache и Nginx являются веб-серверами - не серверы DNS. Они ничего не разрешают. Этот вопрос не имеет никакого отношения к DNS, но все с тем, как веб-серверы обрабатывают запросы.

Мне нужен app1.mydomain.com, который будет разрешен апачем и app2.mydomain.com, который будет разрешен nginx. Оба на порте 80. Действительно ли это возможно?

Нет, это не возможно. Два приложения не могут слушать тот же порт. Можно решить это двумя способами:

  1. Имейте Apache, слушают на порте 80 и проксируют запросы на app2.mydomain.com к nginx, слушающему на другом порте и вручающему app1.mydomain.com прямо.
  2. Напротив. Имейте прокси nginx для Apache.

Или - сделайте обоих размещенными тем же веб-сервером. 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-документация может быть удобной в тонкой настройке его.

1
ответ дан 2 December 2019 в 04:44

Содержанием Вашего вопроса Вам уже разработали его, за исключением того, что можно только получить доступ к одному приложению на порт #. Вы не можете выполнить и 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 значение по умолчанию является первым виртуальным хостом, если не указано отличающимся.

0
ответ дан 2 December 2019 в 04:44

Другие вопросы по тегам:

Похожие вопросы: