You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mh...@apache.org on 2019/09/04 02:08:15 UTC
[openwhisk-apigateway] branch master updated: Add support for
preserving XF headers from upstream (#356)
This is an automated email from the ASF dual-hosted git repository.
mhamann pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwhisk-apigateway.git
The following commit(s) were added to refs/heads/master by this push:
new 24d9865 Add support for preserving XF headers from upstream (#356)
24d9865 is described below
commit 24d986537132c36794b583fe70f0af9eadf8cb31
Author: Hidematsu Sueki <hs...@gmail.com>
AuthorDate: Tue Sep 3 22:08:10 2019 -0400
Add support for preserving XF headers from upstream (#356)
* Preserve X-Forwarded-Host from upstream
* Use X-Forwarded-Uri if present
* Index headers from local variable
---
conf.d/commons/common-headers.conf | 13 +++++++++----
scripts/lua/routing.lua | 20 +++++++++++++++-----
2 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/conf.d/commons/common-headers.conf b/conf.d/commons/common-headers.conf
index b67b6ef..efb3106 100644
--- a/conf.d/commons/common-headers.conf
+++ b/conf.d/commons/common-headers.conf
@@ -25,18 +25,23 @@ add_header X-Request-Id $requestId;
proxy_set_header X-Request-Id $requestId;
# -----------
-# X-Real-IP
+# X-Real-IP
# -----------
set $proxy_remote_addr $http_x_real_ip;
set_if_empty $proxy_remote_addr $remote_addr;
proxy_set_header X-Real-IP $proxy_remote_addr;
# -----------------
-# X-Forwarded-For
-# X-Forwarded-Host
+# X-Forwarded-For
# -----------------
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-proxy_set_header X-Forwarded-Host $host;
+
+# ----------------
+# X-Forwarded-Host
+# ----------------
+set $proxy_forwarded_host $http_x_forwarded_host;
+set_if_empty $proxy_forwarded_host $host;
+proxy_set_header X-Forwarded-Host $proxy_forwarded_host;
# -----------------
# X-Forwarded-Port
diff --git a/scripts/lua/routing.lua b/scripts/lua/routing.lua
index fd10026..f4d1845 100644
--- a/scripts/lua/routing.lua
+++ b/scripts/lua/routing.lua
@@ -46,6 +46,8 @@ local _M = {}
--- Main function that handles parsing of invocation details and carries out implementation
function _M.processCall(dataStore)
+ -- Get request headers
+ local requestHeaders = ngx.req.get_headers()
-- Get resource object from redis
local tenantId = ngx.var.tenant
@@ -91,22 +93,30 @@ function _M.processCall(dataStore)
-- Set backend upstream and uri
backendRouting.setRoute(opFields.backendUrl, gatewayPath)
-- Set gateway url as request header
- local requestScheme = ngx.req.get_headers()["X-Forwarded-Proto"]
+ local requestScheme = requestHeaders["X-Forwarded-Proto"]
if requestScheme == nil or requestScheme == "" then
requestScheme = ngx.var.scheme
end
- local requestUrl = utils.concatStrings({requestScheme, "://", ngx.var.host})
- local prefix = ngx.req.get_headers()["X-Forwarded-Prefix"]
+ local requestHost = requestHeaders["X-Forwarded-Host"]
+ if requestHost == nil or requestHost == "" then
+ requestHost = ngx.var.host
+ end
+ local requestUrl = utils.concatStrings({requestScheme, "://", requestHost})
+ local prefix = requestHeaders["X-Forwarded-Prefix"]
if prefix ~= nil and prefix ~= "" then
requestUrl = utils.concatStrings({requestUrl, prefix})
end
- ngx.req.set_header("X-Forwarded-Url", utils.concatStrings({requestUrl, ngx.var.request_uri}))
+ local requestUri = requestHeaders["X-Forwarded-Uri"]
+ if requestUri == nil or requestUri == "" then
+ requestUri = ngx.var.request_uri
+ end
+ ngx.req.set_header("X-Forwarded-Url", utils.concatStrings({requestUrl, requestUri}))
-- Parse policies
if opFields.policies ~= nil then
parsePolicies(dataStore, opFields.policies, key)
end
-- Log updated request headers/body info to access logs
- if ngx.req.get_headers()["x-debug-mode"] == "true" then
+ if requestHeaders["x-debug-mode"] == "true" then
setRequestLogs()
end
dataStore:close()