В общем, был такой таск: есть у нас локальная сетка и маршрутизатор Peplink. В локальной сетке на многих тазиках крутятся сайты, которые должны быть доступны извне. Как это сделать? Разносить по портам - не вариант, т. к. пользователю неудобно всё-таки набирать URL типа блаблабла:8081. Решение - использовать HTTP-прокси, а на тазик с ним открыть в маршрутизаторе порты 80, 443. Для проксирования обычно используют nginx, но апач тоже отлично справляется с этой задачей.
Так сложилось, что тазик с прокси был Убунтой (клиент категорически н ехотел работать с другими дистрибутивами Linux), а "в Убунте всё не как у людей" (с) :) потому конфигурация её несколько отличается от других дистрибутивов. Но, приняв философию Убунты, я понял, что многие решения в ней очень даже удобны, хотя некоторые мне не нравятся - например, отсутствие пользователя root. Но это уже философия, грозящая холиваром, потому перейдем к делу :)
В убунте манипулирование апачем происходит с помощью глобальных команд: включение/выключение виртуал хостов - a2ensite / a2dissite с одним аргументом - пути к конфигу, в котором прописан виртуал хост. Включение/выключение модов или расширений происводится командами a2enmod / a2dismod.
В общем, алгоритм работы такой:
1) Нужно включить необходимые модули апача. Устанавливаем:
sudo apt-get install libapache2-mod-proxy-html libapache2-mod-gnutls
2) Делаем конфиг виртуал хоста (по 1му файлу на 1 хост!) и помещаем его в /etc/apache2/sites-available. Пример HTTPS конфига проксирования на тазик с Confluence - это такая джавовская веб-морда для программистов и не только, работающая на Apache Tomcat (с портом 8444):
<VirtualHost *:443>
#мыло админа и документ рут не существующий - т. к. апач требует хоть какой-то обязательно
ServerAdmin admin@mydomain.com
DocumentRoot "/etc/httpd/docs/dummy-host.example.com"
#вот здесь внимательно заполняем теми данными, которые у нас есть в ДНС-ах
ServerName conf.mydomain.com
ServerAlias www.conf.mydomain.com
#настройки SSL - включение SSL и пути к файлам ключей
SSLEngine On
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key
#включение прокси для данного виртуал хоста и некоторые настройки. Я в них особо не вчитывался - работает так отлично :)
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyVia full
<proxy *>
Order deny,allow
Allow from all
</proxy>
#чего и куда проксируем / означает что проксируются все запросы к сайту, начиная с корня
ProxyPass / https://192.168.1.132:8444/
ProxyPassReverse / https://192.168.1.132:8444/
</VirtualHost>
Замечание: Не забываем создать ssl-сертификаты либо положить с другой машины в папку /etc/ssl/ и выставить права (chmod 700 /etc/ssl/ и на файлы: chmod 600 /etc/ssl/server.crt и chmod 600 /etc/ssl/server.key)
Для HTTP virtual host убираются строчки, связанные с SSL и меняется порт 443 на 80, SSLProxyEngine On меняется на ProxyEngine On. Ну и в директиве ProxyPass https на http - понятное дело.
Затем командой
sudo a2ensite /etc/apache2/sites-available/конфиг_виртуал_хоста
Активируем наш виртуал хост. После этого нужно перезагрузить апач:
sudo /etc/init.d/apache2 reload
Усё, будет проксировать.
После долгого секса с Debian выяснил, что надо еще дополнительно сделать:
Так сложилось, что тазик с прокси был Убунтой (клиент категорически н ехотел работать с другими дистрибутивами Linux), а "в Убунте всё не как у людей" (с) :) потому конфигурация её несколько отличается от других дистрибутивов. Но, приняв философию Убунты, я понял, что многие решения в ней очень даже удобны, хотя некоторые мне не нравятся - например, отсутствие пользователя root. Но это уже философия, грозящая холиваром, потому перейдем к делу :)
В убунте манипулирование апачем происходит с помощью глобальных команд: включение/выключение виртуал хостов - a2ensite / a2dissite с одним аргументом - пути к конфигу, в котором прописан виртуал хост. Включение/выключение модов или расширений происводится командами a2enmod / a2dismod.
В общем, алгоритм работы такой:
1) Нужно включить необходимые модули апача. Устанавливаем:
sudo apt-get install libapache2-mod-proxy-html libapache2-mod-gnutls
Разрешаем:
sudo a2enmod proxy
sudo a2enmod ssl
sudo a2enmod cache
sudo /etc/init.d/apache2 restart
2) Делаем конфиг виртуал хоста (по 1му файлу на 1 хост!) и помещаем его в /etc/apache2/sites-available. Пример HTTPS конфига проксирования на тазик с Confluence - это такая джавовская веб-морда для программистов и не только, работающая на Apache Tomcat (с портом 8444):
<VirtualHost *:443>
#мыло админа и документ рут не существующий - т. к. апач требует хоть какой-то обязательно
ServerAdmin admin@mydomain.com
DocumentRoot "/etc/httpd/docs/dummy-host.example.com"
#вот здесь внимательно заполняем теми данными, которые у нас есть в ДНС-ах
ServerName conf.mydomain.com
ServerAlias www.conf.mydomain.com
#настройки SSL - включение SSL и пути к файлам ключей
SSLEngine On
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key
#включение прокси для данного виртуал хоста и некоторые настройки. Я в них особо не вчитывался - работает так отлично :)
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyVia full
<proxy *>
Order deny,allow
Allow from all
</proxy>
#чего и куда проксируем / означает что проксируются все запросы к сайту, начиная с корня
ProxyPass / https://192.168.1.132:8444/
ProxyPassReverse / https://192.168.1.132:8444/
</VirtualHost>
Для HTTP virtual host убираются строчки, связанные с SSL и меняется порт 443 на 80, SSLProxyEngine On меняется на ProxyEngine On. Ну и в директиве ProxyPass https на http - понятное дело.
Затем командой
sudo a2ensite /etc/apache2/sites-available/конфиг_виртуал_хоста
Активируем наш виртуал хост. После этого нужно перезагрузить апач:
sudo /etc/init.d/apache2 reload
Усё, будет проксировать.
После долгого секса с Debian выяснил, что надо еще дополнительно сделать:
sudo a2enmod proxy_connect
sudo a2enmod proxy_html
sudo a2enmod proxy_ftp