hi,章哥,发现在使用 ngx.location.capture 调用subrequest 时,X-Forwarded-For 并没有被copy过去。
$ cat conf/test.conf
worker_processes 3;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
# for testing
lua_code_cache off;
lua_package_path 'src/lua/?.lua;';
server {
listen 8080;
location = /v {
set $url '';
content_by_lua '
local t = require "test"
t.queryProxy()
';
}
location = /i {
set $url "http://127.0.0.1:8081/";
rewrite ^ /proxy;
}
location /proxy {
internal;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_request_headers on;
proxy_set_header Content-Type 'application/json';
proxy_pass_request_body on;
proxy_pass $url;
}
}
server {
listen 127.0.0.1:8081;
location / {
content_by_lua '
ngx.say(ngx.var.http_x_forwarded_for)
';
}
}
}
$ cat src/lua/test.lua
local cjson = require "cjson"
local function queryProxy()
local rsp = ngx.location.capture("/proxy",
{ vars = { url = "" }, })
ngx.say(cjson.encode(rsp))
end
local _M = {
queryProxy = queryProxy,
}
return _M
调用curl 结果如下:
curl --header "X-Forwarded-For: 1.2.3.4" http://127.0.0.1:8080/i
1.2.3.4, 127.0.0.1
curl --header "X-Forwarded-For: 1.2.3.4" http://127.0.0.1:8080/v
{"status":200,"body":"127.0.0.1\n","header":{"Content-Length":10,"Content-Type":"text\/plain"},"truncated":false}