веб-сайты на разных серверах, но хочу, чтобы все сайты были доступны через порт 80 и 443

У меня есть два веб-сервера за маршрутизатором: 1 бизнес-приложение / сайт (Windows) и 1 сервер LAMP / веб-разработки с несколькими сайтами / проектами (apache с vhosts, собственные домены и т. Д.). До сих пор для публичного доступа к проектам веб-разработчиков я использовал разные порты для каждого виртуального хоста на сервере Linux, поскольку порт 80 перенаправляет на сервер Windows (он имеет приоритет). Теперь я предпочитаю использовать свои домены и поддомены для публичного доступа к своим проектам веб-разработчиков (вместо того, чтобы запоминать номера портов) ... как мне это настроить, чтобы я мог получить доступ ко всем веб-сайтам на обоих серверах через порт 80 ( и порт 443 ... Я добавляю SSL)?

0
задан 2 July 2016 в 01:57
4 ответа

Да, ребята правы, обратный прокси - это метод, который я хочу здесь использовать. Я заставил его работать красиво, настроив новую виртуальную машину и установив nginx в качестве обратного прокси-сервера. Новый сервер nginx теперь действует как «внешний сервер», а мои серверы Ubuntu (14.04.4) / apache (2.4.7) и Windows / IIS (со всеми моими сайтами) теперь действуют как «внутренние серверы». Я просто изменил прямую запись порта для порта 80 / http в маршрутизаторе, чтобы отразить IP-адрес нового обратного прокси-сервера, и настроил мои файлы конфигурации nginx и apache, как показано ниже.

Мой файл конфигурации nginx (/ etc / nginx / sites- включено / по умолчанию):

server {
# catch all for all other domains and sub-domains that are pointing here, but don't have a site hosted here (or that I'm too lazy to track down)
return 404;
}

server {

#
# stupidwindowsserveristillcantgetridof.com - line of business windows server
#

server_name stupidwindowsserveristillcantgetridof.com www.stupidwindowsserveristillcantgetridof.com;

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.1.1.10:80;
}

}

server {

#
# dev.domain1.com - web dev app/project #1
#

server_name dev.domain1.com;

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.1.1.20:80;
}

}

server {

#
# beta.domain2.com - web dev app/project #2
#

server_name beta.domain2.com;

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.1.1.20:80;
}

}

server {

#
# domain3.com - web dev app/project #3
#

server_name domain3.com;

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.1.1.20:80;
}

}

Пример виртуального хоста, соответствующего доменному имени проекта веб-разработки в моем файле конфигурации apache:

#
# Virtual host for dev.domain1.com - web dev app/project #1
#

<VirtualHost *:80>
ServerAdmin admin@domain1.com
    ServerName dev.domain1.com
#ServerAlias dev.domain1.com
    DocumentRoot /var/www/add_on_domain/dev.domain1.com

    <Directory /var/www/add_on_domain/dev.domain1.com>
            Options -Indexes +FollowSymLinks +MultiViews
            AllowOverride All
    Require all granted 
    </Directory>

ErrorLog ${APACHE_LOG_DIR}/dev.domain1.com-error.log
CustomLog ${APACHE_LOG_DIR}/dev.domain1.com-access.log combined
</VirtualHost>

Надеюсь, это поможет кому-то еще более эффективно.

P.S. - Я планирую добавить SSL / https позже

0
ответ дан 4 December 2019 в 11:26

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

Есть много вопросов и ответов об использовании apache в качестве обратного прокси уже на SF

1
ответ дан 4 December 2019 в 11:26

Лучший способ, i думаю, это nginx и ngx_http_proxy_module . Он хорошо масштабируемый, быстрый и функциональный. Вы можете настроить шифрование с помощью одного сертификата для всего сайта, это довольно прозрачно. Для очень простого примера добавьте dirrective в конфигурацию srv nginx:

location /srv1 {
    proxy_pass       http://server1;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}
location /srv2 {
    proxy_pass       http://server2;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Теперь, если вы попытаетесь перейти к http: // nginx / srv1 , вы увидите ответ от server1. Кроме того, вы можете разделить конфигурацию для двух доменов, каждый из которых должен содержать одно location / с porxy_pass, как в примере выше.

1
ответ дан 4 December 2019 в 11:26

Настройте обратный прокси-сервер (прослушивание портов 80 и 443) между вашим маршрутизатором и двумя другими серверами и направьте трафик по имени хоста с прокси-сервера на два других (или более ) серверов. Примечание: сделав это, вы также сможете приобрести один подстановочный знак или сертификат с поддержкой SAN для обработки ВСЕХ ваших защищенных сайтов.

Вы не предоставили достаточно информации о вашей конкретной конфигурации, чтобы объяснить, как именно это сделать, но это site и другие полны информации о настройке и настройке обратных прокси. (Даже если бы вы предоставили достаточно информации, однако, такой широкий вопрос «как мне ...», вероятно, был бы не по теме на ServerFault.)

В любом случае вы сможете направить любой входящий сайт на любой внутренний сервер, независимо от того, какой набор технологий используется для настройки внутренних серверов (Apache, nginx, IIS и т. Д.), И «перенаправление» (т.е. обратное проксирование) может быть основано только на имени хоста в запросе (будь то имя домена, имя поддомена или даже определенные каталоги или файлы). Фактически, вы даже можете отправлять трафик на внешние сайты, но если вы это сделаете, конечно, вам нужно будет убедиться, что вы надлежащим образом обрабатываете безопасность (например, обеспечиваете https и т. Д.) Для внешнего трафика вашего брандмауэра. Другими словами, технология делает все , что вы хотите, точно так же, как вы этого хотите!

Обратный прокси-сервер может быть реализован как специально настроенный Apache, IIS , nginx или другой «веб-сервер», а также существует множество «серверных» технологий, специально адаптированных для этого (например, haproxy).

Учитывая, где вы находитесь в этом процессе, вы должны взять это руководство и узнать больше о технологиях в целом. Другими словами, вы не должны ожидать, что этот конкретный вопрос приведет к тому, что кто-то (1) выберет правильную реализацию и (2) расскажет вам, как ее настроить и настроить для вашей конкретной проблемы.

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

Шаги для «решения» вашей проблемы:

  1. определите подходящее решение (ЗАВЕРШЕНО: обратный прокси - это то, что вам нужно)
  2. определите и оцените возможные реализации (НА ПУТИ: многие были определены для вас здесь, и поиск обратных прокси на этом и других сайтах даст вам огромное количество информации)
  3. выберите технологию для реализации решения
  4. установить и настроить выбранную технологию (ServerFault здесь для вас, просто задайте конкретные вопросы, касающиеся проблем, которые вы пытались решить)
3
ответ дан 4 December 2019 в 11:26

Теги

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