nginx & internal & redirect
Maxim Dounin
mdounin at mdounin.ru
Mon Aug 25 16:00:23 UTC 2014
Hello!
On Mon, Aug 25, 2014 at 10:51:50AM -0400, BieZax wrote:
[...]
> Добрый день!
> Захотелось мне авторизовываться через mysql, нормальных модулей не
> нашел и нарисовал свой костыль в виде перлового демона, который
> слушает на порту 8080 и в случае удачной авторизации возвращает
> `"X-Accel-Redirect: /ok" . $url`. В конфиге nginx эта конструкция
> выглядит следующим образом:
Just a side note: есть auth_request, которой делает приблизительно
то же самое, но чуть удобнее с точки зрения конфигурирования.
Подробнее тут:
http://nginx.org/ru/docs/http/ngx_http_auth_request_module.html
> location /test/ {
> proxy_set_header X-CAuth-Realm "test";
> proxy_set_header X-CAuth-Base "test";
> proxy_set_header X-CAuth-Table "test";
> proxy_set_header X-CAuth-GField "test";
> proxy_set_header X-CAuth-PassF "password";
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-Host $host;
> proxy_set_header X-Forwarded-Server $host;
> proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
> proxy_pass http://127.0.0.1:8080;
> }
>
> location /ok/test/ {
> internal;
> proxy_pass https://hostname/test2/;
> proxy_redirect https://hostname/test2/ /ok/test/;
> }
> location /test2/ {
> # rewrite ^/test2/$ /test2/qwe.pl redirect;
> proxy_pass http://127.0.0.1:8081/test/;
> proxy_redirect http://127.0.0.1:8081/test/ /ok/test/;
> }
> И все прекрасно работало, пока не появился редирект(закоменчен). После
> попадания в редирект меня перекидывает сюда http://ok/test/qwe.pl.
> Никак не могу понять, откуда берется "ок", может кто-то сможет мне
> подсказать ?
Если берётся сразу после "http://", то это должно быть имя хоста
из заголовка Host или server_name.
Вообще, судя по конфигу, должен возвращаться редиркет на
"http://<hostname>/ok/test/qwe.pl":
- запрос к "/ok/test/" проксируется на https://hostname/test2/;
- rewrite в "location /test2/" возвращает перенаправление на
"/test2/qwe.pl" (+ "https://hostname");
- proxy_redirect в "location /ok/test/" заменяет префикс
"https://hostname/test2/" на "/ok/test/", т.е. перенаправление
на "/ok/test/qwe.pl" (при возврате клиенту - к этому добавляет
схема и имя хоста).
Всё это в предположении, что "proxy_pass https://hostname" - суть
проксирование на тот же nginx.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru