Версия 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; }