Назад | Перейти на главную страницу

nginx $ request_method изменяется с POST на GET перед регистрацией из-за внутренних перенаправлений

Версия NGINX: 1.10.3 на ОС Debain 9.1 с Jessie-Backports
nginx.conf:

user www-data;
pid /var/run/nginx.pid;
worker_processes  1;
error_log /var/log/nginx/error.log;
events {
    worker_connections 1024;
}
http {
    log_format main 'request_method:$request_method request:$request';
    server {
        listen 80;
        error_page  405  =200 $uri;
        access_log /var/log/nginx/access.log main;
        location / {
            default_type text/html;
            root   /usr/share/nginx/html/;
            include mime.types;
            index  index.html index.htm index.asp index.aspx index.php default.html default.htm default.asp default.aspx default.php;
        }
        error_page   403                       /403.html;
        error_page   400 401 402 404           /404.html;
        error_page   500 502 503 504           /50x.html;
        location = /400.html {
                root    /usr/share/nginx/error-pages/Apache/2.4.20;
        }
        location = /403.html {
                root    /usr/share/nginx/error-pages/Apache/2.4.20;
        }
        location = /404.html {
                root    /usr/share/nginx/error-pages/Apache/2.4.20;
            }
        location = /50x.html {
                root    /usr/share/nginx/error-pages/Apache/2.4.20;
        }
    }
}

Когда я POST этот сервер, поскольку nginx не может обслуживать статические страницы на POST, Я получаю 405 код ответа. Но мне нужно обслуживать статическую страницу на POST просьба также. Таким образом, большинство обходных путей в Интернете предлагали этот фрагмент кода = error_page 405 =200 $uri;
Это отлично работало для передачи статического контента в POST запрос с кодом ответа 200, НО
Из-за $uriвнутренние перенаправления nginx вызывают $request_method изменить с POST к GET и в /var/log/nginx/access.log, Я получаю это:

request_method:GET request:POST /Login.html HTTP/1.1\n
вместо того
request_method:POST request:POST /Login.html HTTP/1.1\n

Есть ли способ решить эту проблему?

error_page code ... [=[response]] uri редактирует URI и метод для текущего уровня.

Чтобы не изменять URI и метод, просто введите другой контекст (с именем location).

error_page 405 = @fallback; местоположение @fallback {
  return 200 $uri;
}