2016-10-19 5 views
0

Мне нужно изменить заголовки ответов, поставленные с помощью директивы rexy-прокси, настроенной на http-сервере apache.Сочетание прокси-перезаписи в HTTP-сервере apache с обработкой заголовка

вещи прекрасно работать с этим простым примером, он безусловно доставляет цель с сервера бэкэнда для всех запросов:

<VirtualHost ...> 
    ... 
    # unconditionally modify headers 
    Header set Content-Type "text/html" 
    Header unset Content-Disposition 
    Header unset Content-Transfer-Encoding 
    # fetch goal from backend 
    RewriteEngine on 
    SSLProxyEngine on 
    RewriteRule^https://back.example.org/goal [P] 
    ... 
    # prevent all access to the file system 
    DocumentRoot /var/www/html 
    <Directory /var/www/html> 
    Options none 
    Order deny,allow 
    Deny from All 
    </Directory> 
</VirtualHost> 

Однако проблема в том, что хозяин также должен доставить несколько статических файлов из другой серверный сервер, где заголовки должны не быть изменены! Поэтому я сделал попытку переписать к виртуальной цели на первом этапе, применяются правила модификации заголовка, а затем прокси на втором этапе:

<VirtualHost ...> 
    ... 
    # modify headers only for /goal 
    <Location /goal> 
    Header set Content-Type "text/html" 
    Header unset Content-Disposition 
    Header unset Content-Transfer-Encoding 
    </Location> 
    # fetch static exceptions from static backend 
    RewriteEngine on 
    SSLProxyEngine on 
    RewriteRule static-1$ https://static.example.org/static-1 [P] 
    RewriteRule static-2$ https://static.example.org/static-2 [P] 
    RewriteRule static-3$ https://static.example.org/static-3 [P] 
    # two step rewrite and proxy to fetch goal from backend and get the headers modified 
    RewriteRule ^/goal$ https://back.xample.org/goal [P] 
    RewriteRule^/goal [PT,N] 
    ... 
    # prevent all access to the file system 
    DocumentRoot /var/www/html 
    <Directory /var/www/html> 
    Options none 
    Order deny,allow 
    Deny from All 
    </Directory> 
</VirtualHost> 

Это, однако, оставляет меня с состоянием HTTP 403.

Я использовал запись перезаписи для дальнейшего понимания, и действительно, запрос переписан на /goal в соответствии с первым шагом, API-интерфейс API-интерфейса URI снова вызывается, а затем запрос просто отображается в файловую систему, которая объясняет 403. Почему Второй шаг переписывания применяется, шаг прокси, в следующем раунде?

Или, мой фактический вопрос: как я могу получить изменения заголовков, которые применяются к выворачиванию всех прокси-репозитов, но определяют некоторые явные исключения из модификаций заголовка?

ответ

0

Хорошо, ткнул немного миром, так как я не получил ни ответа, ни комментария ... (почему многие мои вопросы касаются только стены молчания?).

Рабочее решение должно использовать отрицательную директиву LocationMatch для исключений статического содержимого. Не сексуально, но работает:

<VirtualHost ...> 
    ... 
    RewriteEngine on 
    SSLProxyEngine on 
    # fetch static exceptions from static backend 
    RewriteRule static-1$ https://static.example.org/static-1 [P] 
    RewriteRule static-2$ https://static.example.org/static-2 [P] 
    RewriteRule static-3$ https://static.example.org/static-3 [P] 
    # proxy goal from backend 
    RewriteRule^https://back.xample.org/goal [P] 
    ... 
    # modify headers, but _not_ for static exceptions 
    <LocationMatch "^/(?!static)"> 
    Header set Content-Type "text/html" 
    Header unset Content-Disposition 
    Header unset Content-Transfer-Encoding 
    </LocationMatch> 
    ... 
    # prevent all access to the file system 
    DocumentRoot /var/www/html 
    <Directory /var/www/html> 
    Options none 
    Order deny,allow 
    Deny from All 
    </Directory> 
</VirtualHost> 

 Смежные вопросы

  • Нет связанных вопросов^_^