#!/usr/bin/env bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # 'make init' operates scripts and related configuration files in the current directory # The 'apisix' command is a command in the /usr/local/apisix, # and the configuration file for the operation is in the /usr/local/apisix/conf . ./t/cli/common.sh git checkout conf/config.yaml # check 'Server: APISIX' is not in nginx.conf. We already added it in Lua code. make init if grep "Server: APISIX" conf/nginx.conf > /dev/null; then echo "failed: 'Server: APISIX' should not be added twice" exit 1 fi echo "passed: 'Server: APISIX' not in nginx.conf" #make init <- no need to re-run since we don't change the config yet. # check the error_log directive uses warn level by default. if ! grep "error_log logs/error.log warn;" conf/nginx.conf > /dev/null; then echo "failed: error_log directive doesn't use warn level by default" exit 1 fi echo "passed: error_log directive uses warn level by default" # check whether the 'reuseport' is in nginx.conf . grep -E "listen 0.0.0.0:9080.*reuseport" conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: nginx.conf file is missing reuseport configuration" exit 1 fi echo "passed: nginx.conf file contains reuseport configuration" # check default ssl port echo " apisix: ssl: listen: - port: 8443 " > conf/config.yaml make init grep "listen 0.0.0.0:8443 ssl" conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: failed to update ssl port" exit 1 fi grep "listen \[::\]:8443 ssl" conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: failed to update ssl port" exit 1 fi echo "passed: change default ssl port" # check support multiple ports listen in http and https echo " apisix: node_listen: - 9080 - 9081 - 9082 ssl: enable: true listen: - port: 9443 - port: 9444 - port: 9445 " > conf/config.yaml make init count_http_ipv4=`grep -c "listen 0.0.0.0:908." conf/nginx.conf || true` if [ $count_http_ipv4 -ne 3 ]; then echo "failed: failed to support multiple ports listen in http with ipv4" exit 1 fi count_http_ipv6=`grep -c "listen \[::\]:908." conf/nginx.conf || true` if [ $count_http_ipv6 -ne 3 ]; then echo "failed: failed to support multiple ports listen in http with ipv6" exit 1 fi count_https_ipv4=`grep -c "listen 0.0.0.0:944. ssl" conf/nginx.conf || true` if [ $count_https_ipv4 -ne 3 ]; then echo "failed: failed to support multiple ports listen in https with ipv4" exit 1 fi count_https_ipv6=`grep -c "listen \[::\]:944. ssl" conf/nginx.conf || true` if [ $count_https_ipv6 -ne 3 ]; then echo "failed: failed to support multiple ports listen in https with ipv6" exit 1 fi echo "passed: support multiple ports listen in http and https" # check support specific IP listen in http and https echo " apisix: node_listen: - ip: 127.0.0.1 port: 9081 - ip: 127.0.0.2 port: 9082 ssl: listen: - ip: 127.0.0.3 port: 9444 - ip: 127.0.0.4 port: 9445 enable_http3: true enable_http2: true " > conf/config.yaml make init count_http_specific_ip=`grep -c "listen 127.0.0..:908." conf/nginx.conf || true` if [ $count_http_specific_ip -ne 2 ]; then echo "failed: failed to support specific IP listen in http" exit 1 fi count_https_specific_ip=`grep -c "listen 127.0.0..:944. ssl" conf/nginx.conf || true` if [ $count_https_specific_ip -ne 2 ]; then echo "failed: failed to support specific IP listen in https" exit 1 fi count_enable_http2=`grep -c "http2 on" conf/nginx.conf || true` if [ $count_enable_http2 -ne 1 ]; then echo "failed: failed to enable http2" exit 1 fi count_https_specific_ip_and_enable_quic=`grep -c "listen 127.0.0..:944. quic" conf/nginx.conf || true` if [ $count_https_specific_ip_and_enable_quic -ne 1 ]; then echo "failed: failed to support specific IP and enable quic listen in https" exit 1 fi count_https_specific_ip_and_enable_http3=`grep -c "http3 on" conf/nginx.conf || true` if [ $count_https_specific_ip_and_enable_http3 -ne 1 ]; then echo "failed: failed to support specific IP and enable http3 listen in https" exit 1 fi echo "passed: support specific IP listen in http and https" # check deprecated enable_http2 in node_listen echo " apisix: node_listen: - ip: 127.0.0.1 port: 9081 enable_http2: true " > conf/config.yaml out=$(make init 2>&1 || true) if ! echo "$out" | grep 'port level enable_http2 in node_listen is deprecated'; then echo "failed: failed to detect deprecated enable_http2 in node_listen" exit 1 fi echo "passed: check deprecated enable_http2 in node_listen" # check deprecated enable_http2 in ssl.listen echo " apisix: node_listen: - ip: 127.0.0.1 port: 9081 ssl: enable: true listen: - ip: 127.0.0.1 port: 9444 enable_http2: true " > conf/config.yaml out=$(make init 2>&1 || true) if ! echo "$out" | grep 'port level enable_http2 in ssl.listen is deprecated'; then echo "failed: failed to detect deprecated enable_http2 in ssl.listen" exit 1 fi echo "passed: check deprecated enable_http2 in node_listen" # check default env echo " nginx_config: envs: - TEST " > conf/config.yaml make init grep "env TEST;" conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: failed to update env" exit 1 fi echo "passed: change default env" # support environment variables echo ' nginx_config: envs: - ${{var_test}}_${{FOO}} ' > conf/config.yaml var_test=TEST FOO=bar make init if ! grep "env TEST_bar;" conf/nginx.conf > /dev/null; then echo "failed: failed to resolve variables" exit 1 fi out=$(make init 2>&1 || true) if ! echo "$out" | grep "can't find environment variable"; then echo "failed: failed to resolve variables" exit 1 fi echo "passed: resolve variables" # support reserved environment variable APISIX_DEPLOYMENT_ETCD_HOST echo ' deployment: role: traditional role_traditional: config_provider: etcd etcd: host: - "http://127.0.0.1:2333" ' > conf/config.yaml failed_msg="failed: failed to configure etcd host with reserved environment variable" out=$(APISIX_DEPLOYMENT_ETCD_HOST='["http://127.0.0.1:2379"]' make init 2>&1 || true) if echo "$out" | grep "connection refused" > /dev/null; then echo $failed_msg exit 1 fi out=$(APISIX_DEPLOYMENT_ETCD_HOST='["http://127.0.0.1:2379"]' make run 2>&1 || true) if echo "$out" | grep "connection refused" > /dev/null; then echo $failed_msg exit 1 fi if ! grep "env APISIX_DEPLOYMENT_ETCD_HOST;" conf/nginx.conf > /dev/null; then echo "failed: 'env APISIX_DEPLOYMENT_ETCD_HOST;' not in nginx.conf" echo $failed_msg exit 1 fi make stop echo "passed: configure etcd host with reserved environment variable" echo ' nginx_config: worker_rlimit_nofile: ${{nofile9}} ' > conf/config.yaml nofile9=99999 make init if ! grep "worker_rlimit_nofile 99999;" conf/nginx.conf > /dev/null; then echo "failed: failed to resolve variables as integer" exit 1 fi echo "passed: resolve variables as integer" echo ' apisix: enable_admin: ${{admin}} ' > conf/config.yaml admin=false make init if grep "location /apisix/admin" conf/nginx.conf > /dev/null; then echo "failed: failed to resolve variables as boolean" exit 1 fi echo "passed: resolve variables as boolean" echo ' nginx_config: envs: - ${{ var_test}}_${{ FOO }} ' > conf/config.yaml var_test=TEST FOO=bar make init if ! grep "env TEST_bar;" conf/nginx.conf > /dev/null; then echo "failed: failed to resolve variables wrapped with whitespace" exit 1 fi echo "passed: resolve variables wrapped with whitespace" # support environment variables in local_conf echo ' deployment: role: traditional role_traditional: config_provider: etcd etcd: host: - "http://${{ETCD_HOST}}:${{ETCD_PORT}}" ' > conf/config.yaml ETCD_HOST=127.0.0.1 ETCD_PORT=2379 make init if ! grep "env ETCD_HOST;" conf/nginx.conf > /dev/null; then echo "failed: support environment variables in local_conf" exit 1 fi # don't override user's envs configuration echo ' deployment: role: traditional role_traditional: config_provider: etcd etcd: host: - "http://${{ETCD_HOST}}:${{ETCD_PORT}}" nginx_config: envs: - ETCD_HOST ' > conf/config.yaml ETCD_HOST=127.0.0.1 ETCD_PORT=2379 make init if grep "env ETCD_HOST=.*;" conf/nginx.conf > /dev/null; then echo "failed: support environment variables in local_conf" exit 1 fi if ! grep "env ETCD_HOST;" conf/nginx.conf > /dev/null; then echo "failed: support environment variables in local_conf" exit 1 fi echo ' deployment: role: traditional role_traditional: config_provider: etcd etcd: host: - "http://${{ETCD_HOST}}:${{ETCD_PORT}}" nginx_config: envs: - ETCD_HOST=1.1.1.1 ' > conf/config.yaml ETCD_HOST=127.0.0.1 ETCD_PORT=2379 make init if grep "env ETCD_HOST;" conf/nginx.conf > /dev/null; then echo "failed: support environment variables in local_conf" exit 1 fi if ! grep "env ETCD_HOST=1.1.1.1;" conf/nginx.conf > /dev/null; then echo "failed: support environment variables in local_conf" exit 1 fi echo "pass: support environment variables in local_conf" # support default value when environment not set echo ' tests: key: ${{TEST_ENV:=1.1.1.1}} ' > conf/config.yaml make init if ! grep "env TEST_ENV;" conf/nginx.conf > /dev/null; then echo "failed: should use default value when environment not set" exit 1 fi echo ' tests: key: ${{TEST_ENV:=very-long-domain-with-many-symbols.absolutely-non-exists-123ss.com:1234/path?param1=value1}} ' > conf/config.yaml make init if ! grep "env TEST_ENV;" conf/nginx.conf > /dev/null; then echo "failed: should use default value when environment not set" exit 1 fi echo ' tests: key: ${{TEST_ENV:=192.168.1.1}} ' > conf/config.yaml TEST_ENV=127.0.0.1 make init if ! grep "env TEST_ENV;" conf/nginx.conf > /dev/null; then echo "failed: should use environment variable when environment is set" exit 1 fi echo "pass: support default value when environment not set" # support merging worker_processes echo ' nginx_config: worker_processes: 1 ' > conf/config.yaml make init if ! grep "worker_processes 1;" conf/nginx.conf > /dev/null; then echo "failed: failed to merge worker_processes" exit 1 fi echo ' nginx_config: worker_processes: ${{nproc}} ' > conf/config.yaml nproc=1 make init if ! grep "worker_processes 1;" conf/nginx.conf > /dev/null; then echo "failed: failed to merge worker_processes" exit 1 fi echo ' nginx_config: worker_processes: true ' > conf/config.yaml out=$(make init 2>&1 || true) if ! echo "$out" | grep 'path\[nginx_config->worker_processes\] expect'; then echo "failed: failed to merge worker_processes" exit 1 fi echo ' nginx_config: worker_processes: ${{nproc}} ' > conf/config.yaml out=$(nproc=false make init 2>&1 || true) if ! echo "$out" | grep 'path\[nginx_config->worker_processes\] expect'; then echo "failed: failed to merge worker_processes" exit 1 fi echo "passed: merge worker_processes" # check nameserver imported git checkout conf/config.yaml make init i=`grep -E '^nameserver[[:space:]]+(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[[:space:]]?$' /etc/resolv.conf | awk '{print $2}'` for ip in $i do echo $ip grep $ip conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: system DNS "$ip" unimported" exit 1 fi done echo "passed: system nameserver imported" # enable enable_dev_mode git checkout conf/config.yaml echo " apisix: enable_dev_mode: true " > conf/config.yaml make init count=`grep -c "worker_processes 1;" conf/nginx.conf` if [ $count -ne 1 ]; then echo "failed: worker_processes is not 1 when enable enable_dev_mode" exit 1 fi count=`grep -c "listen 0.0.0.0:9080.*reuseport" conf/nginx.conf || true` if [ $count -ne 0 ]; then echo "failed: reuseport should be disabled when enable enable_dev_mode" exit 1 fi echo "passed: enable enable_dev_mode" # check whether the 'worker_cpu_affinity' is in nginx.conf git checkout conf/config.yaml make init count=`grep -c "worker_cpu_affinity" conf/nginx.conf || true` if [ $count -ne 0 ]; then echo "failed: nginx.conf file found worker_cpu_affinity when disabling it" exit 1 fi echo "passed: nginx.conf file disables cpu affinity" # check the 'worker_shutdown_timeout' in 'nginx.conf' . make init grep -E "worker_shutdown_timeout 240s" conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: worker_shutdown_timeout in nginx.conf is required 240s" exit 1 fi echo "passed: worker_shutdown_timeout in nginx.conf is ok" # check the 'client_max_body_size' in 'nginx.conf' . git checkout conf/config.yaml echo ' nginx_config: http: client_max_body_size: 512m ' > conf/config.yaml make init if ! grep -E "client_max_body_size 512m" conf/nginx.conf > /dev/null; then echo "failed: client_max_body_size in nginx.conf doesn't change" exit 1 fi echo "passed: client_max_body_size in nginx.conf is ok" # check worker processes number is configurable. git checkout conf/config.yaml echo " nginx_config: worker_processes: 2 " > conf/config.yaml make init grep "worker_processes 2;" conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: worker_processes in nginx.conf doesn't change" exit 1 fi sed -i 's/worker_processes: 2/worker_processes: auto/' conf/config.yaml echo "passed: worker_processes number is configurable" # check disable cpu affinity git checkout conf/config.yaml echo ' nginx_config: enable_cpu_affinity: true ' > conf/config.yaml make init grep -E "worker_cpu_affinity" conf/nginx.conf > /dev/null if [ ! $? -eq 0 ]; then echo "failed: nginx.conf file is missing worker_cpu_affinity configuration" exit 1 fi echo "passed: nginx.conf file contains worker_cpu_affinity configuration" # set worker processes with env git checkout conf/config.yaml export APISIX_WORKER_PROCESSES=8 make init count=`grep -c "worker_processes 8;" conf/nginx.conf || true` if [ $count -ne 1 ]; then echo "failed: worker_processes is not 8 when using env to set worker processes" exit 1 fi echo "passed: using env to set worker processes" # set worker processes with env git checkout conf/config.yaml make init count=`grep -c "ssl_session_tickets off;" conf/nginx.conf || true ` if [ $count -eq 0 ]; then echo "failed: ssl_session_tickets is off when ssl.ssl_session_tickets is false." exit 1 fi echo ' apisix: ssl: ssl_session_tickets: true ' > conf/config.yaml make init count=`grep -c "ssl_session_tickets on;" conf/nginx.conf || true ` if [ $count -eq 0 ]; then echo "failed: ssl_session_tickets is on when ssl.ssl_session_tickets is true." exit 1 fi echo "passed: disable ssl_session_tickets by default" # support 3rd-party plugin echo ' apisix: extra_lua_path: "$prefix/example/?.lua" extra_lua_cpath: "$prefix/example/?.lua" plugins: - 3rd-party stream_plugins: - 3rd-party ' > conf/config.yaml rm logs/error.log || true make init make run sleep 0.5 make stop if grep "failed to load plugin [3rd-party]" logs/error.log > /dev/null; then echo "failed: 3rd-party plugin can not be loaded" exit 1 fi echo "passed: 3rd-party plugin can be loaded" # validate extra_lua_path echo ' apisix: extra_lua_path: ";" ' > conf/config.yaml out=$(make init 2>&1 || true) if ! echo "$out" | grep 'invalid extra_lua_path'; then echo "failed: can't detect invalid extra_lua_path" exit 1 fi echo "passed: detect invalid extra_lua_path" # support hooking into APISIX methods echo ' apisix: lua_module_hook: "example/my_hook" ' > conf/config.yaml out=$(make init 2>&1 || true) if ! echo "$out" | grep 'property "lua_module_hook" validation failed'; then echo "failed: bad lua_module_hook should be rejected" exit 1 fi echo "passed: bad lua_module_hook should be rejected" echo ' apisix: proxy_mode: http&stream extra_lua_path: "$prefix/example/?.lua" lua_module_hook: "my_hook" stream_proxy: tcp: - addr: 9100 ' > conf/config.yaml rm logs/error.log make init make run sleep 0.5 make stop if ! grep "my hook works in http" logs/error.log > /dev/null; then echo "failed: hook can take effect" exit 1 fi if ! grep "my hook works in stream" logs/error.log > /dev/null; then echo "failed: hook can take effect" exit 1 fi echo "passed: hook can take effect" # check the keepalive related parameter settings in the upstream git checkout conf/config.yaml echo ' nginx_config: http: upstream: keepalive: 32 keepalive_requests: 100 keepalive_timeout: 6s ' > conf/config.yaml make init if ! grep "keepalive 32;" conf/nginx.conf > /dev/null; then echo "failed: 'keepalive 32;' not in nginx.conf" exit 1 fi if ! grep "keepalive_requests 100;" conf/nginx.conf > /dev/null; then echo "failed: 'keepalive_requests 100;' not in nginx.conf" exit 1 fi if ! grep "keepalive_timeout 6s;" conf/nginx.conf > /dev/null; then echo "failed: 'keepalive_timeout 6s;' not in nginx.conf" exit 1 fi echo "passed: found the keepalive related parameter in nginx.conf" # check the charset setting git checkout conf/config.yaml echo ' nginx_config: http: charset: gbk ' > conf/config.yaml make init if ! grep "charset gbk;" conf/nginx.conf > /dev/null; then echo "failed: 'charset gbk;' not in nginx.conf" exit 1 fi echo "passed: found the 'charset gbk;' in nginx.conf" # check realip recursive setting git checkout conf/config.yaml echo ' nginx_config: http: real_ip_recursive: "on" ' > conf/config.yaml make init if ! grep "real_ip_recursive on;" conf/nginx.conf > /dev/null; then echo "failed: 'real_ip_recursive on;' not in nginx.conf" exit 1 fi echo "passed: found 'real_ip_recursive on' in nginx.conf" # check the variables_hash_max_size setting git checkout conf/config.yaml echo ' nginx_config: http: variables_hash_max_size: 1024 ' > conf/config.yaml make init if ! grep "variables_hash_max_size 1024;" conf/nginx.conf > /dev/null; then echo "failed: 'variables_hash_max_size 1024;' not in nginx.conf" exit 1 fi echo "passed: found the 'variables_hash_max_size 1024;' in nginx.conf" # test disk_path without quotes git checkout conf/config.yaml echo ' apisix: proxy_cache: zones: - name: disk_cache_one disk_path: /tmp/disk_cache_one disk_size: 100m memory_size: 20m cache_levels: "1:2" ' > conf/config.yaml make init if ! grep "proxy_cache_path /tmp/disk_cache_one" conf/nginx.conf > /dev/null; then echo "failed: disk_path could not work without quotes" exit 1 fi echo "passed: disk_path could work without quotes" # check the stream lua_shared_dict lrucache_lock value git checkout conf/config.yaml echo ' apisix: proxy_mode: http&stream stream_proxy: tcp: - addr: 9100 tls: true - addr: "127.0.0.1:9101" udp: - 9200 - "127.0.0.1:9201" nginx_config: stream: lua_shared_dict: lrucache-lock-stream: 20m ' > conf/config.yaml make init if ! grep "lrucache-lock-stream 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'lrucache-lock-stream 20m;' not in nginx.conf" exit 1 fi echo "passed: found the 'lrucache-lock-stream 20m;' in nginx.conf" # check the http lua_shared_dict variables value git checkout conf/config.yaml echo ' nginx_config: http: lua_shared_dict: internal-status: 20m plugin-limit-req: 20m plugin-limit-count: 20m prometheus-metrics: 20m plugin-limit-conn: 20m upstream-healthcheck: 20m worker-events: 20m lrucache-lock: 20m balancer-ewma: 20m balancer-ewma-locks: 20m balancer-ewma-last-touched-at: 20m plugin-limit-count-redis-cluster-slot-lock: 2m tracing_buffer: 20m plugin-api-breaker: 20m etcd-cluster-health-check: 20m discovery: 2m jwks: 2m introspection: 20m access-tokens: 2m ' > conf/config.yaml make init if ! grep "internal-status 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'internal-status 20m;' not in nginx.conf" exit 1 fi if ! grep "plugin-limit-req 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'plugin-limit-req 20m;' not in nginx.conf" exit 1 fi if ! grep "plugin-limit-count 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'plugin-limit-count 20m;' not in nginx.conf" exit 1 fi if ! grep "prometheus-metrics 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'prometheus-metrics 20m;' not in nginx.conf" exit 1 fi if ! grep "plugin-limit-conn 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'plugin-limit-conn 20m;' not in nginx.conf" exit 1 fi if ! grep "upstream-healthcheck 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'upstream-healthcheck 20m;' not in nginx.conf" exit 1 fi if ! grep "worker-events 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'worker-events 20m;' not in nginx.conf" exit 1 fi if ! grep "lrucache-lock 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'lrucache-lock 20m;' not in nginx.conf" exit 1 fi if ! grep "balancer-ewma 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'balancer-ewma 20m;' not in nginx.conf" exit 1 fi if ! grep "balancer-ewma-locks 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'balancer-ewma-locks 20m;' not in nginx.conf" exit 1 fi if ! grep "balancer-ewma-last-touched-at 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'balancer-ewma-last-touched-at 20m;' not in nginx.conf" exit 1 fi if ! grep "plugin-limit-count-redis-cluster-slot-lock 2m;" conf/nginx.conf > /dev/null; then echo "failed: 'plugin-limit-count-redis-cluster-slot-lock 2m;' not in nginx.conf" exit 1 fi if ! grep "plugin-api-breaker 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'plugin-api-breaker 20m;' not in nginx.conf" exit 1 fi if ! grep "etcd-cluster-health-check 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'etcd-cluster-health-check 20m;' not in nginx.conf" exit 1 fi if ! grep "discovery 2m;" conf/nginx.conf > /dev/null; then echo "failed: 'discovery 2m;' not in nginx.conf" exit 1 fi if ! grep "jwks 2m;" conf/nginx.conf > /dev/null; then echo "failed: 'jwks 2m;' not in nginx.conf" exit 1 fi if ! grep "introspection 20m;" conf/nginx.conf > /dev/null; then echo "failed: 'introspection 20m;' not in nginx.conf" exit 1 fi if ! grep "access-tokens 2m;" conf/nginx.conf > /dev/null; then echo "failed: 'access-tokens 2m;' not in nginx.conf" exit 1 fi echo "passed: found the http lua_shared_dict related parameter in nginx.conf"