webrider
@webrider
PM, PHP-developer

Перенаправление аякс-запросов средствами nginx

День добрый! Пытаюсь организовать создание доменов 3-го уровня для определённых пользователей (user1.site.ru должно отрабатывать как site.ru/user/1). Столкнулся с проблемой путей на поддоменах (т.к. ссылки в проекте все относительные).
Пытаюсь средствами веб сервера определять аякс запросы и перенаправлять их по обычному урлу (т.е. user1.site.ru/ajax/123 должно отрабатывать также как site.ru/ajax/123)

Вот кусок конфига для конкретного поддомена (допустим user1)

location / {
      resolver 127.0.0.1;
      if ($http_x_requested_with = XMLHttpRequest) {
        set $pass1 http://www.site.ru/;
      }
      if ($http_x_requested_with != XMLHttpRequest) {
        set $pass1 http://www.site.ru/user/1/;
      }
      proxy_pass $pass1;
    }


Аякс запросы отрабатывают неправильно.
Прошу помощи в написании проверки на аякс-запрос.
  • Вопрос задан
  • 5783 просмотра
Пригласить эксперта
Ответы на вопрос 3
@mayorovp
Попробуйте отказаться от if — он не всегда работает очевидным образом. Надо как-нибудь так:

resolver 127.0.0.1;

location / {
  proxy_pass http://www.site.ru/user/1/;
}

location /ajax/ {
  proxy_pass http://www.site.ru/ajax/
}


Хотя, делать proxy_pass на свой же собственный сервер…
Ответ написан
timokhin
@timokhin
iOS developer
У меня так сработало:

server{
...
if ($http_x_requested_with = XMLHttpRequest) {
    rewrite ^(.*)$ /ajax/$1 last;
}


если внутри location, то last заменить на break

nginx.org/ru/docs/http/ngx_http_rewrite_module.html
Ответ написан
nginx.org/ru/docs/http/ngx_http_map_module.html

map $http_x_requested_with $passvar {
    default http://www.site.ru/user/1/;
    XMLHttpRequest http://www.site.ru/;
}

resolver 127.0.0.1;

server {
 location / {
  proxy_pass $passvar;
 }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы