Tinyproxy: пример конфигурации для режима реверс-прокси

Реверс-прокси за 5 минут? Tinyproxy.

31 Oct 2021


...

Что такое реверс-прокси

Реверс-прокси, обратная прокси – это сервис/процесс, который создает для клиента видимость, что несколько http-функциональностей работают в рамках одного процесса, когда на самом деле они реализуются разными процессами (возможно даже на разных серверах).

Например: на локальной машине на порту 5002 запускаем Jekyll, а на порту 5001 – psgi-приложение. Хотим, чтобы обе функциональности были доступны по http://127.0.0.1:5003: Jekyll-сайт – в корне, а psgi-приложение – в /smth.

Такая задача решается с помощью реверс-прокси.

В качестве реверс-прокси часто используется Ngnix, также реверс-проксирование умеют Squid, Apache, другие программы. Например, Tinyproxy.

Устанавливаем

Ubuntu:

> sudo apt-get install tinyproxy

Пример конфига

Пишем файл tinyproxy.conf:

User nobody
Group nogroup

Port 5003
Listen 127.0.0.1

BindSame yes
Timeout 600

# поменять на подходящий
Logfile ".../tinyproxy/tinyproxy.log"
LogLevel Info
# поменять на подходящий
PidFile ".../tinyproxy/tinyproxy.pid"

MaxClients 5
MinSpareServers 2
MaxSpareServers 5
StartServers 2

MaxRequestsPerChild 0

Allow 127.0.0.1

ViaProxyName "tinyproxy2"

ConnectPort 0

ReversePath "/" "http://127.0.0.1:5002/"
ReversePath "/smth/" "http://127.0.0.1:5001/"

ReverseOnly Yes
ReverseMagic Yes

В директивах Logfile и PidFile подставить подходящие пути.

Запускаем и останавливаем

Запускаем:

tinyproxy -c tinyproxy.conf

Tinyproxy сразу демонизируется, и терминал не занимает. pid запущенного процесса смотрим в файле из директивы PidFile.

Смотрим на процесс:

ps gaxuww |grep `cat .../tinyproxy/tinyproxy.pid`

Останавливаем процесс:

kill `cat .../tinyproxy/tinyproxy.pid`

Читаем лог:

less .../tinyproxy/tinyproxy.log

Что умеет Tinyproxy

  • работает как форвард-прокси
  • работает как реверс-прокси
  • самостоятельно демонизируется
  • поддерживает метод CONNECT (надо для проксирования https-трафика)
  • позволяет гибко управлять запуском/остановкой рабочих потоков (директивы MaxClients, MinSpareServers, MaxSpareServers, StartServers, MaxRequestsPerChild)
  • ест мало памяти и cpu

Дополнительно читаем