在Nginx中有条件地更新请求标头的值

时间:2018-11-07 13:43:37

标签: nginx ubuntu-16.04

我想有条件地更新请求标头的值,这样 上游看到更新后的值,而不是原始值 发送了一个。为了使上下文清晰,客户端可以发送自定义标头 说“ 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安装任何软件包。

0 个答案:

没有答案