You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by mo...@apache.org on 2023/04/14 07:42:32 UTC

[apisix] branch master updated: refactor: remove if statement in nginx.conf (#8275)

This is an automated email from the ASF dual-hosted git repository.

monkeydluffy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 10825bbb0 refactor: remove if statement in nginx.conf (#8275)
10825bbb0 is described below

commit 10825bbb068ea3b19c7e8468f67afc871d424fb1
Author: Liu Wei <mo...@gmail.com>
AuthorDate: Fri Apr 14 15:42:23 2023 +0800

    refactor: remove if statement in nginx.conf (#8275)
---
 apisix/cli/ngx_tpl.lua                |  7 +--
 apisix/core/ctx.lua                   |  6 +--
 benchmark/fake-apisix/conf/nginx.conf | 16 +-----
 t/APISIX.pm                           |  7 +--
 t/plugin/ip-restriction.t             |  2 +-
 t/plugin/proxy-rewrite3.t             | 96 +++++++++++++++++++++++++++++++++++
 6 files changed, 103 insertions(+), 31 deletions(-)

diff --git a/apisix/cli/ngx_tpl.lua b/apisix/cli/ngx_tpl.lua
index 142d92298..6a9766457 100644
--- a/apisix/cli/ngx_tpl.lua
+++ b/apisix/cli/ngx_tpl.lua
@@ -703,16 +703,11 @@ http {
 
             ### the following x-forwarded-* headers is to send to upstream server
 
-            set $var_x_forwarded_for        $remote_addr;
             set $var_x_forwarded_proto      $scheme;
             set $var_x_forwarded_host       $host;
             set $var_x_forwarded_port       $server_port;
 
-            if ($http_x_forwarded_for != "") {
-                set $var_x_forwarded_for "${http_x_forwarded_for}, ${realip_remote_addr}";
-            }
-
-            proxy_set_header   X-Forwarded-For      $var_x_forwarded_for;
+            proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
             proxy_set_header   X-Forwarded-Proto    $var_x_forwarded_proto;
             proxy_set_header   X-Forwarded-Host     $var_x_forwarded_host;
             proxy_set_header   X-Forwarded-Port     $var_x_forwarded_port;
diff --git a/apisix/core/ctx.lua b/apisix/core/ctx.lua
index 47b6bef85..d723f17cb 100644
--- a/apisix/core/ctx.lua
+++ b/apisix/core/ctx.lua
@@ -198,9 +198,9 @@ do
         upstream_cache_key         = true,
         upstream_cache_bypass      = true,
 
-        var_x_forwarded_proto = true,
-        var_x_forwarded_port  = true,
-        var_x_forwarded_host  = true,
+        var_x_forwarded_proto      = true,
+        var_x_forwarded_port       = true,
+        var_x_forwarded_host       = true,
     }
 
     -- sort in alphabetical
diff --git a/benchmark/fake-apisix/conf/nginx.conf b/benchmark/fake-apisix/conf/nginx.conf
index 9ae60d248..f35131cbe 100644
--- a/benchmark/fake-apisix/conf/nginx.conf
+++ b/benchmark/fake-apisix/conf/nginx.conf
@@ -103,25 +103,11 @@ http {
 
             ### the following x-forwarded-* headers is to send to upstream server
 
-            set $var_x_forwarded_for        $remote_addr;
             set $var_x_forwarded_proto      $scheme;
             set $var_x_forwarded_host       $host;
             set $var_x_forwarded_port       $server_port;
 
-            if ($http_x_forwarded_for != "") {
-                set $var_x_forwarded_for "${http_x_forwarded_for}, ${realip_remote_addr}";
-            }
-            if ($http_x_forwarded_proto != "") {
-                set $var_x_forwarded_proto $http_x_forwarded_proto;
-            }
-            if ($http_x_forwarded_host != "") {
-                set $var_x_forwarded_host $http_x_forwarded_host;
-            }
-            if ($http_x_forwarded_port != "") {
-                set $var_x_forwarded_port $http_x_forwarded_port;
-            }
-
-            proxy_set_header   X-Forwarded-For      $var_x_forwarded_for;
+            proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
             proxy_set_header   X-Forwarded-Proto    $var_x_forwarded_proto;
             proxy_set_header   X-Forwarded-Host     $var_x_forwarded_host;
             proxy_set_header   X-Forwarded-Port     $var_x_forwarded_port;
diff --git a/t/APISIX.pm b/t/APISIX.pm
index e0ad70427..b0c361183 100644
--- a/t/APISIX.pm
+++ b/t/APISIX.pm
@@ -776,16 +776,11 @@ _EOC_
 
             ### the following x-forwarded-* headers is to send to upstream server
 
-            set \$var_x_forwarded_for        \$remote_addr;
             set \$var_x_forwarded_proto      \$scheme;
             set \$var_x_forwarded_host       \$host;
             set \$var_x_forwarded_port       \$server_port;
 
-            if (\$http_x_forwarded_for != "") {
-                set \$var_x_forwarded_for "\${http_x_forwarded_for}, \${realip_remote_addr}";
-            }
-
-            proxy_set_header   X-Forwarded-For      \$var_x_forwarded_for;
+            proxy_set_header   X-Forwarded-For      \$proxy_add_x_forwarded_for;
             proxy_set_header   X-Forwarded-Proto    \$var_x_forwarded_proto;
             proxy_set_header   X-Forwarded-Host     \$var_x_forwarded_host;
             proxy_set_header   X-Forwarded-Port     \$var_x_forwarded_port;
diff --git a/t/plugin/ip-restriction.t b/t/plugin/ip-restriction.t
index d3f4f23b7..11bcb52e5 100644
--- a/t/plugin/ip-restriction.t
+++ b/t/plugin/ip-restriction.t
@@ -625,7 +625,7 @@ GET /hello
 
 === TEST 29: set whitelist and user-defined message
 --- config
-    location /t {
+location /t {
         content_by_lua_block {
             local t = require("lib.test_admin").test
             local code, body = t('/apisix/admin/routes/1',
diff --git a/t/plugin/proxy-rewrite3.t b/t/plugin/proxy-rewrite3.t
index 45bcd6f5c..33d751bfd 100644
--- a/t/plugin/proxy-rewrite3.t
+++ b/t/plugin/proxy-rewrite3.t
@@ -771,3 +771,99 @@ passed
 GET /test/plugin/proxy/rewrite HTTP/1.1
 --- response_headers
 X-Request-ID: test1///test2
+
+
+
+=== TEST 33: set route (test if X-Forwarded-Port can be set before proxy)
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/routes/1',
+                 ngx.HTTP_PUT,
+                 [[{
+                        "methods": ["GET"],
+                        "plugins": {
+                            "proxy-rewrite": {
+                                "headers": {
+                                    "X-Forwarded-Port": "9882"
+                                }
+                            }
+                        },
+                        "upstream": {
+                            "nodes": {
+                                "127.0.0.1:1980": 1
+                            },
+                            "type": "roundrobin"
+                        },
+                        "uri": "/echo"
+                }]]
+                )
+            if code >= 300 then
+                ngx.status = code
+            end
+            ngx.say(body)
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed
+
+
+
+=== TEST 34: test if X-Forwarded-Port can be set before proxy
+--- request
+GET /echo HTTP/1.1
+--- more_headers
+X-Forwarded-Port: 9881
+--- response_headers
+X-Forwarded-Port: 9882
+
+
+
+=== TEST 35: set route (test if X-Forwarded-For can be set before proxy)
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/routes/1',
+                 ngx.HTTP_PUT,
+                 [[{
+                        "methods": ["GET"],
+                        "plugins": {
+                            "proxy-rewrite": {
+                                "headers": {
+                                    "X-Forwarded-For": "22.22.22.22"
+                                }
+                            }
+                        },
+                        "upstream": {
+                            "nodes": {
+                                "127.0.0.1:1980": 1
+                            },
+                            "type": "roundrobin"
+                        },
+                        "uri": "/echo"
+                }]]
+                )
+            if code >= 300 then
+                ngx.status = code
+            end
+            ngx.say(body)
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed
+
+
+
+=== TEST 36: test if X-Forwarded-For can be set before proxy
+--- request
+GET /echo HTTP/1.1
+--- more_headers
+X-Forwarded-For: 11.11.11.11
+--- response_headers
+X-Forwarded-For: 22.22.22.22, 127.0.0.1