从根本上讲,在将proxy_pass存储在变量中之后,我找到了一种方法来找到在nginx中删除响应头的方法。 proxy_hide_header不允许我存储值。
换句话说:
我正在尝试访问自定义响应标头,将其保存到变量中,并将其删除,以便它不会传播到客户端。然后在访问日志中使用该变量。 不幸的是,以下似乎不起作用:
http {
log_format main '$remote_addr $http_host $destination_addr [$time_local]
"$request" $status';
access_log /opt/logs/access.log main;
server {
listen 142.133.151.129:8090 default;
##This is my internal variable for the response header field
set $destination_addr "-";
location / {
proxy_pass http://my_upstream_server;
#store the response header field
set $destination_addr $sent_http_x_destination;
#now get rid of this response header field
set $sent_http_x_destination "";
}
}
}
我为$ sent_http_x_destination获取空值。
以下是卷曲请求和响应:
# curl -Ov http://142.133.151.129:8090/ao3/vod/soccer/worldcup2014/final1
< HTTP/1.1 206 Partial Content
< Server: openresty/1.9.3.1
< Date: Tue, 16 Feb 2016 22:25:32 GMT
< Content-Type: application/octet-stream
< Content-Length: 99990100
< Connection: keep-alive
< X-Destination: 142.133.151.94
有人知道如何在存储并用于访问日志后删除“X-Destination”吗?我得到“$ destination_addr”,空值。
由于
答案 0 :(得分:2)
一个人可以使用output$dtOutput <- DT::renderDataTable({
dtToShow <- as.data.table(lList)
colnames(dtToShow) <- c("List")
data.table(
data = dtToShow), rownames = F,extensions = "RowReorder",
server = F, escape = F, options = list(rowReorder = T,
searching = F, ordering = F, paging = F)
})
从代理中删除返回给NGINX的标头,请参见ngx_http_proxy_module docs
DECLARE @string VARCHAR(500) = '{"ABC":1,"ABC_DT":-1,"ABC_DBQty":0,"ABC_DSQty":0,"ABC_LMT":1,"ABC_DT":-1,"CTSD":"TEST","TE":23}'
SET @string = REVERSE(@string)
SELECT REVERSE(
SUBSTRING(@string,2,CHARINDEX(':',@string)-1-1)
) --return: 23
可用于记录日志,请参见ngx_http_upstream_module docs
重写配置如下:
proxy_hide_header
答案 1 :(得分:1)
我对此并不完全确定,但我认为只要您依赖该日志标题,就需要将其设置为标题...否则,日志将无法使用它
话虽如此,您可以尝试proxy_hide_header
并查看它是否有效。
答案 2 :(得分:1)
我能看到的唯一方法是创建一个lua脚本,它将使用http-resty重新实现代理传递,将头保存在nginx变量中并在返回之前将其删除。然后,保存的nginx变量将用于访问日志。 这是我的答案。 我希望nginx提供一种更简单的方法。
请告诉我您对此答案的评论。 感谢您对此主题的所有意见!