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)

Другие вопросы по тегам