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
有什么解决方法吗?
答案1
error_page code ... [=[response]] uri
编辑当前级别的 URI 和方法。
要不改变 URI 和方法,只需输入另一个上下文(名为位置)。
错误页面 405=@回退; 位置@fallback{ 返回 200 $uri; }