Nginx прокси X-Accel меняет метод на GET
Я запускаю Nginx X-Accel Proxy в разработке со следующей конфигурацией:
upstream gate_proxy {
server 127.0.0.1:8889;
}
server {
listen 80 default_server;
server_name default;
charset utf-8;
client_max_body_size 75M;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Send all traffic to gate first
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_pass http://gate_proxy;
}
# Proxy to Apache after X-Accel
location /x-accel-apache/ {
internal;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
# Make sure the trailing slash is maintained here, as this affects the URI relayed.
proxy_pass http://127.0.0.1:8081/;
}
}
Это работало нормально, пока я не понял, что мой Nginx был 1.4.6 и очень устарел, поскольку я близок к производству и стараюсь убедиться, что у меня есть последние обновления и т. Д.
Теперь с 1.10.1 это больше не работает, и все запросы POST принимаются как таковые в Nginx на переднем крае, но когда они в конечном итоге передаются по http://127.0.0.1:8081/, они принимаются как метод GET.
РЕДАКТИРОВАТЬ: Кроме того, подтвердил, что gate_proxy ( http://127.0.0.1:8889/) также получает метод POST еще после обновления.
1 ответ
Решено https://stackoverflow.com/a/41282238/698289
В контексте моей собственной конфигурации location /x-accel-apache/
раздел теперь выглядит так:
# Proxy to Apache after X-Accel
location @webapp {
internal;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
set $stored_redirect_location $upstream_http_x_accel_redirect_location;
proxy_pass http://127.0.0.1:8081$stored_redirect_location;
}
И в gate_proxy я установил следующее:
set_header('X-Accel-Redirect', '@webapp')
set_header('X-Accel-Redirect-Location', request_path)
Подтверждено, что он работает с текущей последней стабильной (1.10.3) и основной (1.11.9)