当我尝试通过Nginx反向代理向Tomcat服务器请求时,我得到了一个405响应。
如果我直接请求tomcat服务器,它会在Chrome或Firefox上成功工作。但如果我请求Nginx代理,我会从Chrome得到一个405,但在Firefox上可以工作。
我一直在我的nginx.conf中的位置/foo/{ ... }下使用不同的配置进行测试。
我试过了:
error_page 405 =200 $uri;
也是
add_header "Allow" "GET, POST, HEAD, PUT, DELETE" always;
add_header "Access-Control-Allow-Methods" "GET, POST, PUT, DELETE, OPTIONS" always;`
location / {
dav_methods PUT DELETE;
proxy_pass http://csprocure;
}
我的重定向nginx.conf如下:
upstream serverS {
server xxx.xxx.xxx.xxx:yyyy;
}
server {
listen 80;
server_name $hostname;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
error_log /dev/stdout info;
access_log /dev/stdout;
location /foo/ {
proxy_pass http://serverS;
proxy_redirect http://xxx.xxx.xxx.xxx/ http://xxx.xxx.xxx.xxx:yyyy/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto: https;
}
我可以在我的配置中添加什么来避免Chrome中的405?
发布于 2018-12-26 13:33:41
我一直在比较Firefox和Chrome之间的请求,Chrome方面有所不同,在请求Chrome中,Chrome在头请求中添加了一个"Origin“参数,这导致了错误。
因此在我的nginx.conf中,我在location/下添加了参数以避免出现这种情况
proxy_set_header Origin "";
因此,我的位置配置块现在是:
location /foo/ {
proxy_set_header Origin "";
proxy_pass http://serverS;
proxy_redirect http://xxx.xxx.xxx.xxx/ http://xxx.xxx.xxx.xxx:yyyy/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto: https;
}
发布于 2018-12-20 06:09:07
可以在网上找到关于将HTTP方法列入白名单的一个很好的解释:here
这对我来说很有效:
add_header Allow "GET, POST, HEAD, PUT, DELETE" always;
if ( $request_method !~ ^(GET|POST|HEAD|PUT|DELETE)$ ) {
return 405;
}
显然,在测试更改之前,请确保检查配置nginx -t
并重新加载配置nginx -s reload
https://stackoverflow.com/questions/53853776
复制相似问题