2014-07-27 55 views
3

有沒有辦法可以將字符串替換應用於nginx變量。我使用nginx作爲s3受限下載的代理。我將$upstream_http_etag轉發給具有不同名稱的響應頭。對變量的Nginx字符串處理

add_header Content-MD5 $upstream_http_etag; 
proxy_set_header Content-MD5 $upstream_http_etag; 

問題是etag是double quoted。在將它添加到標題之前,我想刪除這個雙引號。有沒有可能的方法來做到這一點。

我知道我可以在客戶端上刪除它。但是這是爲了讓更舊的應用程序無需更新即可運行。

任何幫助,非常感謝。

回答

1

一個可能的解決方案是使用lua-nginx-module的header_filter_by_lua指令而不是add_header指令。

例如,

location/{ 
    header_filter_by_lua ' 
      -- delete double quoted 
      local value = string.gsub(ngx.var.upstream_http_etag or "", [[^"(.+)"$]], "%1") 
      -- add response header 
      ngx.header["Content-MD5"] = value 
    '; 
    proxy_pass ...; 
} 

順便說一句,proxy_set_header用於傳遞額外請求頭向上遊, 然而,$upstream_http_etag是上游響應頭。
所以proxy_set_header Content-MD5 $upstream_http_etag;是沒有意義的。