Nginx отбрасывает данные после знака номера (#)

У меня есть существующий запрос, который похож
https://smth.ru/smth/GET_DATA? p_DATA_TYPE=arg1#arg2&arg2=XXX

Я знаю, что это ужасно неправильно, но я должен работать с ним. И это работало ealier с апачем.

Теперь мне нужен nginx для работы прокси для этого запроса. Но это просто отбрасывает все после "#", и я не могу найти его ни в каких переменных как $query_string

Вот почему сервер бэкэнда получает только
https://smth.ru/smth/GET_DATA? p_DATA_TYPE=type

Как я могу получить параметры после # или заставить nginx проксировать полный запрос?

Мой блок сервера похож

server
{
...
location /
{

    proxy_pass_header       Authorization;
    proxy_pass_request_headers on;
    proxy_pass http://127.0.0.1:8080/$request_uri?$query_string;
    proxy_set_header Host            $host;
    proxy_set_header X-Forwarded-For $remote_addr;

}
...
}

Передача прокси как

    proxy_pass http://127.0.0.1:8080;

также не имеет никакого эффекта.

Испытанный пакет nginx.x86_64 0:1.6.2-23.el6.art затем обновленный к nginx.x86_64 0:1.8.0-1.el6.ngx - тот же эффект...

UPD: кажется, что Apache использует целый запрос, в то время как nginx отбрасывает все после #.

0
задан 14 August 2015 в 17:32
1 ответ

Ваша проблема в том, что браузеры даже не посылают идентификатор фрагмента на сервер, так что даже если бы Nginx был готов переписать на основе этого, он бы не смог этого сделать, потому что ему не была предоставлена эта информация.

Мне действительно любопытно, как ваше предыдущее решение работало с Apache - я только что дважды проверил и мой Firefox не посылает идентификатор фрагмента в запросе (по перехвату пакетов). Может быть, какой бы браузер вы ни использовали, он вел себя по-другому.

Потенциальным решением было бы escape хэш-символ по URL-кодировке, в результате чего он стал %23. Вы можете использовать Javascript для автоматической модификации при загрузке страницы (проверьте, присутствует ли идентификатор фрагмента, и если присутствует, конвертируйте его в %23 и обновите страницу, используя новый URL). После этого нужно будет переписать на основе этого вместо исходного символа хэша.

.
3
ответ дан 4 December 2019 в 12:26

Теги

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