сценарий

У меня есть поддомен DDNS sub1.dom1.com со статическим IP (вымышленный IP) 99.88.77.66.55 .

У меня есть домен dom2.com размещенный вне сайта с записью DNS CNAME, указывающей sub2.dom2.com и sub3.dom2.com на один и тот же IP (опять же, вымышленный), 99.88.77.66.55 .

В 99.88.77.66.55 меня есть локальная сеть позади моего брандмауэра. В этой локальной сети у меня есть три сервера:

  1. Веб-сервер с локальным полным доменным www.local.lan адресу 192.168.1.3:80
  2. Сервер приложений с локальным FDQN app.local.lan в 192.168.1.4:8069
  3. Файловый сервер с локальным полным доменным fs.local.lan в 192.168.1.5:2430

См. Диаграмму ниже для уточнения. Все три сервера работают как виртуальные серверы в тюрьмах в одной системе freeBSD (freeNAS).

Диаграмма сети

Что я хочу сделать

Согласно приведенной выше схеме, я хочу добавить обратный прокси-сервер для запуска в тюрьме в вышеупомянутой системе. Запросы от WAN должны быть направлены на соответствующий сервер на основе имени хоста, указанного в заголовке HTTP.

Соображения

  1. Стандартная переадресация портов: в настоящее время я получаю доступ к этим серверам через простую переадресацию портов на маршрутизаторе локальной сети. Обычно это приемлемое решение, однако, когда возникает необходимость в удаленном сбое в сети, возникает проблема сохранения прямых связей портов WAN-LAN. Кроме того, для пользователей, кроме меня, которым необходим доступ к этим серверам, им легче не запоминать номера портов.
  2. Приложение DD-WRT: Поскольку на моем маршрутизаторе установлена прошивка DD-WRT с подключенным USB-накопителем 4 ГБ, я изучил установку и запуск обратного прокси-сервера на маршрутизаторе с использованием Pound или чего-то подобного. Я сделал обширный поиск в Интернете в поисках путей для этого. Проблема, с которой я сталкиваюсь, заключается в том, что большинство руководств или руководств устарели и содержат неработающие ссылки на требуемые ресурсы.
  3. Apache/Nginx: Любой из этих двух вариантов кажется жизнеспособным решением. Однако, как и решения DD-WRT, которые я исследовал, многие из руководств либо содержат неработающие ссылки, либо вообще не содержат ссылок на требуемые ресурсы. Еще одно препятствие передо мной с параметрами Apache или Nginx заключается в том, что в большинстве руководств и руководств предполагается, что я уже знаю все, что нужно знать об Apache или Nginx. Я начинаю без предварительного опыта работы с любой из этих платформ, и я хочу учиться и экспериментировать, чтобы все заработало. Руководства и учебные пособия в основном только показывают server разделы необходимого кода. Также сделаны предположения, что вы уже знаете требуемые зависимости и как их реализовать.

Шаги, которые я уже предпринял

Nginx: пример из моего файла nginx.conf. Это только часть. Существуют другие разделы server для других серверов с измененными подробностями.

#nginx.conf

events {
  worker_connections 1024;
}

http {
  server {
    listen 80;
    server_name sub1.dom1.com #I've also tried www.lan.lan, here.
    access_log off;
    error_log off;
    location / {
      proxy_pass http://192.168.1.3:80/;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_ass_x_forwarded_for;
      proxy_max_temp_file_size 0;
      client_max_body_size 10m;
      client_body_buffer_size 128k;
      proxy_connect_timeout 90;
      proxy_send_timeout 90;
      proxy_ready_timeout 90;
      proxy_buffer_size 4k;
      proxy_buffers 4 32k;
      proxy_busy_buffers_size 64k;
      proxy_temp_file_write_size 64k;
    }
  }
}

Это, однако; возвращает ошибку 502 - Bad Gateway при попытке подключения.

Apache: Важно отметить, что я пробовал это с Apache22. Мой последний файл httpd.conf выглядит так:

LoadFile /usr/local/bin/libxml2.so
LoadModule proxy_html_module libexec/apache22/mod_proxy_html.so
LoadModule xml2enc_module libexec/apache22/mod_xl2enc.so

<VirtualHost *:80>
  ServerName sub1.dom1.com
  ServerAlias sub1.dom.com
  ProxyPass / http://192.168.1.3:80/
  ProxyPassReverse / http://192.168.1.3:80
</VirtualHost>

<VirtualHost *:80>
  ServerName sub2.dom2.com
  ServerAlias sub2.dom2.com
  ProxyPass / http://192.168.1.4:8069/
  ProxyPassReverse / http://192.168.1.4:8069
</VirtualHost>

<VirtualHost *:80>
  ServerName sub3.dom2.com
  ServerAlias sub3.dom2.com
  ProxyPass / http://192.168.1.5:2430/
  ProxyPass / http://192.168.1.5:2430
</VirtualHost

Когда я пытаюсь запустить Apache22, используя:

service apache22 start

Я получаю следующее:

Invalid command 'ProxyPass', perhaps misspelled or defined by a module not included in the server configuration

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

Фунт: Я столкнулся с проблемами при попытке установить ipkg на DD-WRT. Это может быть связано с архитектурой Atheos моего конкретного маршрутизатора. Я также столкнулся со многими неработающими ссылками, как упоминалось ранее.

Как ты можешь помочь

Хорошо, так что с многословным объяснением в стороне, вот то, что я ищу от сообщества.

Учитывая, что я ближе всего подошел к использованию Nginx, как я могу правильно настроить свой файл nginx.conf чтобы делать то, что я пытаюсь сделать? Что является причиной ошибки 502 и как ее исправить?

1 ответ1

0

Для решения nginx:

server_name всегда должно быть запрошенным именем хоста (в заголовке http).

  • Вы можете поставить * здесь, чтобы сделать контент доступным на любом домене / хосте.

proxy_pass не должен заканчиваться на / , кроме особо необходимых.

Я чаще всего видел 502 Bad gateway когда nginx не может подключиться к upsteam (proxy_pass).

  • Вы проверили политику брандмауэра для DMZ-> LAN?
  • Вы проверили error.log наличие подсказок?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .