POST 的 NGINX 代理通行证
NGINX proxy pass for POST
我有两个上游 A 和 B 运行ning 分别在端口 8301 和 8303 上。我的目的是将反向代理放在他们面前,将在 A 上失败的请求传递给 B。
我是这样配置nginx的
daemon off;
events {}
http {
upstream api {
server host.docker.internal:8301;
server host.docker.internal:8303 backup;
}
server {
listen 8300;
location / {
proxy_pass http://api;
proxy_redirect off;
proxy_intercept_errors on;
proxy_next_upstream error http_403;
proxy_next_upstream error http_502;
}
}
}
当我 运行 curl localhost:8300/xyz
并且 A 以 403
响应时,nginx 将请求传递给 B。但这不适用于 POST。 curl -X POST localhost:8300/xyz
returns 403 并且没有尝试上游 B.
如何配置 nginx 以代理传递所有请求方法?
当您使用 proxy_next_upstream 并要求重试 POST、LOCK、PATCH 之类的请求时,您需要这样配置 proxy_next_upsteam。
proxy_next_upstream error http_403 non_idempotent;
proxy_next_upstream error http_502 non_idempotent;
non_idempotent
normally, requests with a non-idempotent method (POST, LOCK, PATCH) are not passed to the next server if a request has been sent to an upstream server (1.9.13); enabling this option explicitly allows retrying such requests;
我有两个上游 A 和 B 运行ning 分别在端口 8301 和 8303 上。我的目的是将反向代理放在他们面前,将在 A 上失败的请求传递给 B。
我是这样配置nginx的
daemon off;
events {}
http {
upstream api {
server host.docker.internal:8301;
server host.docker.internal:8303 backup;
}
server {
listen 8300;
location / {
proxy_pass http://api;
proxy_redirect off;
proxy_intercept_errors on;
proxy_next_upstream error http_403;
proxy_next_upstream error http_502;
}
}
}
当我 运行 curl localhost:8300/xyz
并且 A 以 403
响应时,nginx 将请求传递给 B。但这不适用于 POST。 curl -X POST localhost:8300/xyz
returns 403 并且没有尝试上游 B.
如何配置 nginx 以代理传递所有请求方法?
当您使用 proxy_next_upstream 并要求重试 POST、LOCK、PATCH 之类的请求时,您需要这样配置 proxy_next_upsteam。
proxy_next_upstream error http_403 non_idempotent;
proxy_next_upstream error http_502 non_idempotent;
non_idempotent
normally, requests with a non-idempotent method (POST, LOCK, PATCH) are not passed to the next server if a request has been sent to an upstream server (1.9.13); enabling this option explicitly allows retrying such requests;