我正在使用像这样的配置将nginx用作http服务的反向代理:
location /jobexecutor/ {
proxy_pass http://jobexecutor:8080/jobexecutor/;
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-Proto $scheme;
proxy_redirect off;
proxy_connect_timeout 75s;
}
GET请求被代理到服务正常,但是当我使用POST时,请求被代理到服务正常,但是主体为空。直接发布到服务时,它可以正常工作。 有什么想法吗?
答案 0 :(得分:1)
您找到了解决方法,但我怀疑不是根本原因。
根据RFC7231,这是一个已知的问题,在重定向之后,301和302服务器响应通常会导致将不是safe的请求方法转换为GET请求。
普通的for
对客户端应该是透明的,因此听起来Nginx配置的其他部分首先在进行请求重定向之前先进行了客户端重定向。
一旦确定发生这种情况的位置,就可以重新配置Nginx conf以消除重定向,或者将301/302响应代码分别更改为307/308,这将在保持原始请求方法的同时进行重定向。
答案 1 :(得分:0)
我终于找到了答案。 curl的问题在于,在重定向之后,它想将POST转换为GET,但是--post301
arg似乎迫使它将其保留为GET,但是主体迷失了。
为了获得预期的行为,您需要指定-L
或类似的参数(以及class Set2Inline(admin.TabularInline): # extending any admin Inline Class will work AFAIK
...
classes = ['collapse',]
...
参数)。
参见https://curl.haxx.se/docs/manpage.html#--post301