К основному контенту

Настройка mod_proxy в Apache

Настройка mod_proxy в Apache

В общем, был такой таск: есть у нас локальная сетка и маршрутизатор 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
Разрешаем:
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>
Замечание: Не забываем создать 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 выяснил, что надо еще дополнительно сделать:


sudo a2enmod proxy_connect
sudo a2enmod proxy_html
sudo a2enmod proxy_ftp

Комментарии

Популярные сообщения из этого блога

How to do Arithmetic Operations in Ansible

You can use arithmetic calculations in Ansible using the Jinja syntax. This is helpful in many situations where you have stored the output of an operation, and you need to manipulate that value. All usual operation like addition, subtraction, multiplication, division, and modulo are possible. Let us start with an example. We will be using the  debug module  to print the out the result. The following tasks show all the basic arithmetic operations. The output is given in comments. Ansible arithmetic operation example - hosts: loc tasks: - debug: msg: "addition{{ 4 +3 }}" #Ansible addition 7 - debug: msg: "substraction {{ 4 - 3 }}" #Ansible arithmetic substraction 1 - debug: msg: "multiplication {{ 4 * 3 }}" #multiplication 12 - debug: msg: "Modulo operation {{ 7 % 4}}" #ansible Modulo operation - find remainder 3 - debug: msg: "floating division {{ 4 / 3}}" #ansible floating divisio...

ubuntu/debian ipmi

#install ipmitool (this is for debian) apt-get install ipmitool #insert the kernel modules needed for ipmi modprobe ipmi_devintf modprobe ipmi_si modprobe ipmi_msghandler #get the current mode (01 00 is dedicated mode) ipmitool raw 0x30 0x70 0x0c 0 #send the raw command to enable dedicated lan ipmitool raw 0x30 0x70 0xc 1 1 0
Ansible - Appending to lists and dictionaries  n this blog post I'll show how to add items to lists and dictionaries, when using loops, and across tasks. Normally when trying to add a new item to the variable, while in the loop, or between tasks, Ansible will ovewrite the values, keeping the result of the last iteration. For example, let's see what will be the result of running the following playbook: --- - name: Append to list hosts: localhost vars: cisco: - CiscoRouter01 - CiscoRouter02 - CiscoRouter03 - CiscoSwitch01 arista: - AristaSwitch01 - AristaSwitch02 - AristaSwitch03 tasks: - name: Add Cisco and Airsta devices to the list set_fact: devices: "{{ item }}" with_items: - "{{ cisco }}" - "{{ arista }}" - name: Debug list debug: var: devices verbosity: 0 [przemek@quasar blog]$ ansible-playbook append_list.yml PLAY [Append to list] ****************...