尝试通过Nginx反向代理请求Tomcat服务器时,收到405响应。

如果我直接请求tomcat服务器,则它可以从Chrome或Firefox成功运行。但是,如果我请求Nginx代理,我会从Chrome获得405,但可以从Firefox使用。

我在下面的nginx.conf中测试了不同的配置
    location / 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?

最佳答案

我一直在比较Firefox和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;
}

10-02 06:30
查看更多