由于内部重定向,nginx $request_method 在记录之前从 POST 更改为 GET

由于内部重定向,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;
为 的请求提供静态内容来说效果很好,POST200
由于$uri,nginx 的内部重定向导致$request_method从 变为POSTGET并且在 中/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

有什么解决方法吗?

答案1

error_page code ... [=[response]] uri编辑当前级别的 URI 和方法。

要不改变 URI 和方法,只需输入另一个上下文(名为位置)。

错误页面 405=@回退;

位置@fallback{
  返回 200 $uri;
}

相关内容