Apache proxy для внутренних служб

Apache proxy для внутренних служб

Мне нужно создать файл conf для веб-сервера Apache (Linux), который будет действовать как прокси для нескольких backend-сервисов одного и того же сервера. Каждый backend-сервис работает как systemd-сервис на отдельных портах.

Файл конфигурации содержит следующее

<VirtualHost: *:80>
    ProxyPass /api/policies/???  http://127.0.0.1:6001/
    ProxyPassReverse /api/policies/???  http://127.0.0.1:6001/

    ProxyPass /api/policies/???/coverages http://127.0.0.1:6002/
    ProxyPassReverse /api/policies/???/coverages http://127.0.0.1:6002/

    ProxyPass /api/policies/???/premiums http://127.0.0.1:6003/
    ProxyPassReverse /api/policies/???/coverages http://127.0.0.1:6003/

</VirtualHost>

??? – относится к параметру запроса, который будет частью URL-адреса. Как это определить в конфигурации? Какое выражение нужно использовать

решение1

Возможны несколько подходов.

  1. Заключите директивы ProxyPass в правильном порядкеLocationMatchдирективы; что-то вроде

    <LocationMatch "/api/policies/(.*)/coverages">
        ProxyPass  http://127.0.0.1:6002/
        # ...
    </LocationMatch>
    <LocationMatch "/api/policies/(.*)/premiums">
        ProxyPass  http://127.0.0.1:6003/
        # ...
    </LocationMatch>
    <Location "/api/policies/">
        ProxyPass  http://127.0.0.1:6001/
        # ...
    </Location>
    
  2. Используйте mod_rewriteобратный проксиtarget [P]вместо директив ProxyPass, чтобы разрешить сопоставление с образцом.

     RewriteRule    "^/api/policies/(.*)/coverages/(.*)"  "http://127.0.0.1:6002/"  [P]
     RewriteRule    "^/api/policies/(.*)/premiums/(.*)"  "http://127.0.0.1:6003/"  [P]
    

Связанный контент