2015-03-11 2 views
6

в исходном URL:/API/URL% 2Fencoded% 2F/с = queryParamsNginx proxy_pass и URL-декодирование

Nginx:

location /api { 
    client_max_body_size 2G; 
    proxy_pass https://oursite; 
} 

При такой конфигурации, я был в состоянии сохранить кодировку URL когда проходя через прокси. Если я добавлю «/» после «нашего сайта», он расшифрует URL-адрес.

Проблема:

Теперь URL после проксированном все еще содержит "/ апи /". Мне нужно удалить «/ api /» только при сохранении частей, закодированных в URL.

+0

если я использую перезапись с перерывом он декодирует его снова –

+1

Не давно был идентичным вопрос без ответ. На мой взгляд, вы должны использовать api, чтобы не иметь таких странных URL-адресов. Другой способ - иметь api на субдомене. –

+1

http://stackoverflow.com/q/28684300/1016033 –

ответ

8

Не так давно был вопрос без ответа. На мой взгляд, вы должны использовать api, чтобы не иметь таких странных URL-адресов. Другой способ - иметь api на субдомене. - Алексей Тен 11 марта '15 в 22:58

stackoverflow.com/q/28684300/1016033 - Алексей Тен 11 марта '15 в 23:01

Годовалым вызов принят!

location /api/ { 
     rewrite^$request_uri; 
     rewrite ^/api/(.*) $1 break; 
     return 400; 
     proxy_pass http://127.0.0.1:82/$uri; 
    } 

Все, люди!

Подробнее на Nginx pass_proxy subdirectory without url decoding, но он работает даже со строкой запроса, тоже:

% curl "localhost:81/api/url%2Fencoded%2F/?with=queryParams" 
/url%2Fencoded%2F/?with=queryParams 
% 
+0

Для тех, кто работает без вложенных путей, 'location/{proxy_pass http: //127.0.0.1$request_uri; } 'отлично работает – diachedelic

+0

@diachedelic, посмотрите на последнюю контрольную группу в [более подробный ответ] (// stackoverflow.com/questions/28684300/nginx-pass-proxy-subdirectory-without-url-decoding/37584637#37584637) - '$ request_uri' в вашем примере является избыточным. – cnst

+0

от десны, вы правы, моя ошибка заключалась в добавлении косой черты, например 'proxy_pass http: //127.0.0.1/;', которая заставила nginx нормализовать путь (упомянутый в документах здесь: http://nginx.org/en/ docs/http/ngx_http_proxy_module.html # proxy_pass) – diachedelic

Смежные вопросы