Назад | Перейти на главную страницу

создать исключение letsencrypt для обратного прокси apache вместе с ограничениями ip

В нормальных условиях установка обратного прокси-сервера apache с исключением letsencrypt для /.well-known легко выполняется с помощью ProxyPass /.well-known! Кажется, стало намного сложнее (что-то, что я легко решил в nginx) настроить это исключение вместе с ограничениями ip для бэкэнда:

<VirtualHost *:80>
  ServerName example.com
  DocumentRoot /var/www/html
  Redirect / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com

  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
  DocumentRoot /var/www/html

  ErrorLog ${APACHE_LOG_DIR}/bfp-all_error.log
  CustomLog ${APACHE_LOG_DIR}/bfp-all_access.log combined

  RewriteEngine On
  RewriteCond %{HTTP:Connection} Upgrade [NC]
  RewriteCond %{HTTP:Upgrade} websocket [NC]
  RewriteRule /(.*) ws://localhost:8050/$1 [P,L]



  ProxyRequests Off
  ProxyPreserveHost On
<Location />
    ProxyPass "http://localhost:8050/"
    ProxyPassReverse "http://localhost:8050/"
    Require ip 10.0.0.0/24
    Require ip 192.168.0.0/24
</Location>
</VirtualHost>

Я пробовал использовать псевдоним и (а также каталог, который, кажется, уже довольно избыточен) перед разделом, но запросы продолжают поступать на бэкэнд:

DocumentRoot /var/web/letsencrypt
Alias /.well-known /var/web/letsencrypt/.well-known
  <Directory /var/web/letsencrypt/.well-known>
           Options -Indexes
           Require all granted
  </Directory>
  <Location /.well-known>
        ProxyPass !
        Require all granted
  </Location>

Есть идеи, как я могу это решить? Я ожидал, что это проблема, с которой люди сталкиваются время от времени, но я не нашел ничего в Интернете.

В этом случае «причина» пропуска запроса на бэкэнд заключается в том, что RewriteRule с [P] обходит блок Location с помощью директив ProxyPass (и любой возможный блок местоположения в пределах его соответствия). Таким образом, и они, и правила Require в нем будут проигнорированы, и запросы будут проксироваться для всех IP-адресов.

Если вы оставите RewriteRule и поставите ws://localhost:8050/ в правилах ProxyPass в <Location> раздел, он будет работать как задумано. Наиболее конкретный блок Location выиграет при объединении конфигураций, где это касается настройки Require и ProxyPass. Если более неопределенный блок Location установил Require или ProxyPass, вы жестяная банка замените это новым в наиболее конкретном блоке Location.

Сам прокси-сервер websocket уже блокирует запросы без заголовков обновления.

Начиная с Apache 2.4.19, можно поместить хорошо известный псевдоним прямо в блок Location, опуская первый аргумент.