Добрый день,
Я использую 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]