我正在执行给定的请求
http://example.com/my/route/bar
,请求正文有5M,所以想使用client_max_body_size 0M
作为路线/my/route/*
。但是当我在其中有 proxy_pass
时,我很难让 nginx 使用我的自定义位置。
在第一个场景中,我收到“413 Request Entity Too Large”响应,这意味着第一个位置未匹配,并且 nginx 正在使用默认位置。
location /my/route {
client_max_body_size 0M;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://fabio:9999;
}
location / {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://fabio:9999;
}
但是如果使用以下场景(将
proxy_pass http://fabio:9999;
更改为 return 404;
),请求将返回 404,这是预期的响应。
location /my/route {
client_max_body_size 0M;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
return 404;
}
location / {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://fabio:9999;
}
在第一个场景中我做错了什么?我需要使用
location /my/route
来匹配 proxy_pass
。
您可以将两个位置合并为一个并将我的根嵌套到
/
中。然后在嵌套位置块中设置具体配置。
这是一个例子(尚未测试):
location / {
location /my/route {
client_max_body_size 0M;
}
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://fabio:9999;
}