сценарий
У меня есть поддомен 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
меня есть локальная сеть позади моего брандмауэра. В этой локальной сети у меня есть три сервера:
- Веб-сервер с локальным полным доменным
www.local.lan
адресу192.168.1.3:80
- Сервер приложений с локальным FDQN
app.local.lan
в192.168.1.4:8069
- Файловый сервер с локальным полным доменным
fs.local.lan
в192.168.1.5:2430
См. Диаграмму ниже для уточнения. Все три сервера работают как виртуальные серверы в тюрьмах в одной системе freeBSD (freeNAS).
Что я хочу сделать
Согласно приведенной выше схеме, я хочу добавить обратный прокси-сервер для запуска в тюрьме в вышеупомянутой системе. Запросы от WAN должны быть направлены на соответствующий сервер на основе имени хоста, указанного в заголовке HTTP.
Соображения
- Стандартная переадресация портов: в настоящее время я получаю доступ к этим серверам через простую переадресацию портов на маршрутизаторе локальной сети. Обычно это приемлемое решение, однако, когда возникает необходимость в удаленном сбое в сети, возникает проблема сохранения прямых связей портов WAN-LAN. Кроме того, для пользователей, кроме меня, которым необходим доступ к этим серверам, им легче не запоминать номера портов.
- Приложение DD-WRT: Поскольку на моем маршрутизаторе установлена прошивка DD-WRT с подключенным USB-накопителем 4 ГБ, я изучил установку и запуск обратного прокси-сервера на маршрутизаторе с использованием Pound или чего-то подобного. Я сделал обширный поиск в Интернете в поисках путей для этого. Проблема, с которой я сталкиваюсь, заключается в том, что большинство руководств или руководств устарели и содержат неработающие ссылки на требуемые ресурсы.
- 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 и как ее исправить?