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

Apache mod_proxy + mod_rewrite = Ошибка «Запрос превысил лимит…»

Добрый день,

Я использую Apache в качестве обратного прокси для моего приложения Tornado, которое работает на http://localhost:8090. Я хочу, чтобы Apache проксировал все, что поступает в / api / v2 через HTTPS, на http://localhost:8090. Apache также заботится об аутентификации, поэтому мне нужно перенаправить аутентифицированное имя пользователя в мое приложение Tornado. Следовательно, используя mod_rewrite.

Я добавил следующую запись в конфигурацию Apache:

<Location "/api/v2">
    ProxyPass http://localhost:8090

    # Next four lines are to set X-Forwarded-User
    RewriteEngine On
    RewriteRule .* - [E=RU:%{LA-U:REMOTE_USER}]
    RequestHeader set X-Forwarded-User %{RU}e

    SSLRequireSSL

    AuthType Basic
    AuthName "My site"
    AuthBasicProvider external
    AuthExternal pwauth
    Require valid-user

    Order deny,allow
    Allow from all
</Location>

Это творит чудеса, за исключением того, что я вижу следующую ошибку в моем журнале Apache:

Request exceeded the limit of 10 subrequest nesting levels due to probable confguration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

Я включил журнал отладки для перезаписи мода, и я действительно вижу странную вещь - похоже, что перезапись происходит 10 раз в цикле, накапливая запрос на себя:

172.16.0.150 - admin [29/Jan/2014:19:01:06 +0200] [sm397/sid#7f8452235588][rid#7f840c0093b8/initial] (3) [perdir /api/v2/] applying pattern '.*' to uri 'proxy:http://localhost:8090/'
172.16.0.150 - admin [29/Jan/2014:19:01:06 +0200] [sm397/sid#7f8452235588][rid#7f840c01f638/subreq] (3) [perdir /api/v2/] applying pattern '.*' to uri 'proxy:http://localhost:8090/proxy:http://localhost:8090/'
172.16.0.150 - admin [29/Jan/2014:19:01:06 +0200] [sm397/sid#7f8452235588][rid#7f840c00d6a8/subreq] (3) [perdir /api/v2/] applying pattern '.*' to uri 'proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/'
172.16.0.150 - admin [29/Jan/2014:19:01:06 +0200] [sm397/sid#7f8452235588][rid#7f840c025e08/subreq] (3) [perdir /api/v2/] applying pattern '.*' to uri 'proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/'
172.16.0.150 - admin [29/Jan/2014:19:01:06 +0200] [sm397/sid#7f8452235588][rid#7f840c029e28/subreq] (3) [perdir /api/v2/] applying pattern '.*' to uri 'proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/'
172.16.0.150 - admin [29/Jan/2014:19:01:06 +0200] [sm397/sid#7f8452235588][rid#7f840c02de48/subreq] (3) [perdir /api/v2/] applying pattern '.*' to uri 'proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/proxy:http://localhost:8090/'

Полный журнал здесь: http://pastebin.com/raw.php?i=HqnuFFpQ

Как это исправить?

Спасибо

Это очень странно, так как ничего не должно вызывать добавление подзапросов.

Посмотрим, изменится ли что-нибудь, если это правило не применяется к безумным подзапросам, добавив NS флаг:

RewriteRule .* - [E=RU:%{LA-U:REMOTE_USER},NS]