我想有条件地更新请求标头的值,这样 上游看到更新后的值,而不是原始值 发送了一个。为了使上下文清晰,客户端可以发送自定义标头 说“ Hdr-Token”,其值在HTTP请求中设置为“ ABCD”, 如果此标头存在,我想更新标头的值 到“ EFGH”。如果标题本身不存在或值不存在 “ ABCD”,我不想设置/更新,即我要这样做 有条件的。
尝试了以下选项:
1)使用content_by_lua_block
location / {
content_by_lua_block {
if ngx.req.get_headers()["Hdr-Token"] == "ABCD" then
ngx.req.set_header("Hdr-Token", "EFGH");
end
}
proxy_pass http://localhost:8101;
}
2)在HTTP级别添加了地图
map $http_hdr_token $is_ok {
default "0";
ABCD "1";
}
并在位置栏中添加以下内容
location / {
if ($is_ok) {
proxy_set_header Hdr-Token 'EFGH';
}
proxy_pass http://localhost:8101;
}
第一个选项什么都不做,第二个选项抛出错误,说不能在此处添加proxy_set_header。我在下面添加了nginx配置。
configure arguments: --with-cc-opt='-g -O2 -fPIE
-fstack-protector-strong -Wformat -Werror=format-security
-Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,
-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
--prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log
--error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid
--http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug
--with-pcre-jit --with-ipv6 --with-http_ssl_module
--with-http_stub_status_module --with-http_realip_module
--with-http_auth_request_module --with-http_addition_module
--with-http_dav_module --with-http_flv_module
--with-http_geoip_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_image_filter_module
--with-http_mp4_module --with-http_perl_module
--with-http_random_index_module --with-http_secure_link_module
--with-http_v2_module --with-http_sub_module --with-http_xslt_module
--with-mail --with-mail_ssl_module --with-stream
--with-stream_ssl_module --with-threads
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/headers-more-nginx-module
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-auth-pam
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-cache-purge
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-dav-ext-module
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-development-kit
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-echo
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/ngx-fancyindex
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-http-push
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-lua
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-upload-progress
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-upstream-fair
--add-module=/build/nginx-Q158zN/nginx-1.10.3/debian/modules/ngx_http_substitutions_filter_module
有人可以帮我吗?我认为,模块“ /build/nginx-Q158zN/nginx-1.10.3/debian/modules/nginx-lua”应该让我做我想做的事情。
请注意,我没有从源代码编译nginx的自由,除了标准存储库之外,无法从ppa安装任何软件包。