Fork me on GitHub

Apache revers proxy и проброс IP клиента

Apache в роле реверсивного прокси сервера

Список модулей для проксирования

  • mod_proxy - основной модуль Apache
  • mod_proxy_ajp - для работы с протоколом AJP (Apache JServe Protocol version 1.3)
  • mod_proxy_fcgi - для FastCGI
  • mod_proxy_wstunnel - для сокетов (WS, WSS)
  • mod_proxy_balancer - для балансировки
  • mod_proxy_http - для протоколов HTTP/0.9, HTTP/1.0, и HTTP/1.1
  • mod_proxy_hml - один из основных компонентов обратного прокси-сервера ProxyPassReverse
  • mod_proxy_ftp - для протокола FTP
  • mod_proxy_connect - для туннелирования SSL
  • mod_cache - для кеширование
  • mod_headers - для управление заголовками HTTP
  • mod_deflate - для сжатие
  • mod_remoteip - для передачи IP адреса user agent через прокси

Пример простого проксирования на внутренний серевр DMZ, Apache слушает на петле, порт 8080

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<VirtualHost 127.0.0.1:8080>
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ServerAdmin dtulyakov@example.org
    ServerName lib.example.org
    ServerAlias lib.example.org
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / http://lib.local:80/
    ProxyPassReverse / http://lib.local:80/
    LogLevel warn
</VirtualHost>

Пример для кластера

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<VirtualHost 127.0.0.1:8080>
    <Proxy balancer://mycluster>
        BalancerMember http://10.0.3.200:8080/
        BalancerMember http://10.0.4.200:8080/
        ProxyPass / balancer://mycluster
    </Proxy>
    ServerAdmin dtulyakov@example.org
    ServerName lib.example.org
    ServerAlias lib.example.org
    ProxyRequests Off
    ProxyPass / balancer://mycluster
    ProxyPassReverse / balancer://mycluster
    LogLevel warn
</VirtualHost>

Пример SSL прокси

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<VirtualHost *:443>
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/ssl/example.org.crt
    SSLCertificateKeyFile /etc/ssl/example.org.key
    SSLProxyEngine on
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / https://backend.example.org
    ProxyPassReverse / https://backend.example.org
    ProxyPass / balancer://balancer_cluster_name
    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/example.org-ssl-error.log
    TransferLog ${APACHE_LOG_DIR}/example.org-ssl-transfer.log
    CustomLog ${APACHE_LOG_DIR}/example.org-ssl-access.log combined
</VirtualHost>

Необходимые пакеты для SSL прокси

1
sudo apt install libapache2-mod-proxy-html libapache2-mod-gnutls

Apache за прокси сервером не важно за Nginx Varnish Apache или другим

Что надо сделать для того, что бы приезжал IP адрес user agent а не шлюза на котором установлен прокси.

1
sudo apt install libapache2-mod-rpaf

Пример настройки одного форума

1
vi /etc/apache2/mods-enabled/rpaf.conf
1
2
3
4
5
6
7
8
<IfModule rpaf_module>
    RPAFenable On
    RPAFsethostname Off
    # Можно указать несколько (своих) адресов которые не должны попадать
    RPAFproxy_ips 127.0.0.1 10.0.3.1
    # X-Forwarded-For to something of your choice:
    RPAFheader X-Real-IP
</IfModule>

У Apache есть свой модуль remoteip.

Но я его пока не пробовал использовать

Comments