From 62c24d131a41ee0271a35be3f26d83ed3aa4452d Mon Sep 17 00:00:00 2001
From: cheliequan <liequanche@126.com>
Date: 星期六, 10 六月 2023 12:09:12 +0800
Subject: [PATCH] 更新openresty 安装配置文件

---
 install/aps.conf     |   71 ++++++++++
 install/aps-etcd.lua |  103 ++++++++++++++
 install/nginx.conf   |  143 ++++++++++++++++++++
 install/aps.lua      |   52 +++++++
 4 files changed, 369 insertions(+), 0 deletions(-)

diff --git a/install/aps-etcd.lua b/install/aps-etcd.lua
new file mode 100644
index 0000000..97ff169
--- /dev/null
+++ b/install/aps-etcd.lua
@@ -0,0 +1,103 @@
+--use coroutine,watch realtime
+local _M = {}
+
+local json = require "cjson"
+local shell = require "resty.shell"
+
+local function print_map_keys()
+	local storage = _M.conf.storage
+
+	local keys = storage:get_keys(1024)
+	if #keys > 0 then
+		ngx.log(ngx.ERR, table.concat(storage:get_keys(1024),","))
+	else 
+		ngx.log(ngx.ERR, "storage empty")
+	end
+end
+
+local function clean_keys(keys, storage)
+	for k, v in pairs(keys) do
+		if not v then
+			ngx.log(ngx.ERR, "delete:" .. k)
+			storage:delete(k)
+		end
+	end
+end
+
+local function get_nodes(key, storage)
+	local key_map = {}
+	local stor_keys = storage:get_keys(1024)
+	for k, v in pairs(stor_keys) do
+		key_map[v] = false
+	end
+
+    local status, stdout, err, reason, status = shell.run("docker exec etcd etcdctl get --prefix " .. key .. " -w=json")
+    --ngx.log(ngx.ERR, stdout)
+	
+	local resp = json.decode(stdout)
+
+	if not resp then
+		ngx.log(ngx.ERR, "cli:get resp is nil")
+		return
+	end
+
+	local kvs = resp.kvs or {}
+	if not kvs or #kvs == 0 then
+		ngx.log(ngx.ERR, "resp.body.kvs is nil")
+		return
+	end
+	
+	for i = 1, #kvs do
+		local kv = kvs[i]
+		if kv.value then
+			local node_key = ngx.decode_base64(kv.key)
+			local node_value = ngx.decode_base64(kv.value)
+			
+			storage:set(node_key, node_value)
+			if key_map[node_key] ~= nil then
+				key_map[node_key] = true
+			end
+		end
+	end
+
+	clean_keys(key_map, storage)
+
+	-- 鎵撳嵃娴嬭瘯
+	print_map_keys()
+end
+
+local function watch(premature, tkey, storage)	
+	get_nodes(tkey, storage)
+
+	local ok, err = ngx.timer.at(5, watch, tkey, storage)
+	if not ok then
+		ngx.log(ngx.ERR, "Restart watch err:"..err)
+	end
+end
+
+-- 鍦╪ginx.conf涓缃竴涓叏灞�鐨刟ps_nodes_map
+-- 閫氳繃杩炴帴etcd, 骞剁洃鍚�/aps/nodes/ 鍓嶇紑鐨刱ey, 灏嗘敞鍐屽埌etcd鐨刟psServer鑺傜偣娣诲姞鍒癮ps_nodes_map涓�
+function _M.init(conf)
+	-- Only one worker start the syncer, here will use worker_id == 0
+	if ngx.worker.id() ~= 0 then
+		return
+	end
+
+	_M.conf = conf
+
+	local storage = _M.conf.storage
+	local data = storage:get("init")
+	if data then
+		ngx.log(ngx.ERR, "watch etcd already started")
+		return
+	else 
+		storage:set("init", true)
+	end
+
+	local ok, err = ngx.timer.at(0, watch, conf.key_node, storage)
+	if not ok then
+		ngx.log(ngx.ERR, "Error start api watch:"..err)
+	end
+end
+
+return _M
diff --git a/install/aps.conf b/install/aps.conf
new file mode 100644
index 0000000..ab65adc
--- /dev/null
+++ b/install/aps.conf
@@ -0,0 +1,71 @@
+upstream aps_server {
+    server 127.0.0.1:80;
+}
+
+upstream aps_user_server {
+    server 127.0.0.1:8001;
+}
+
+server {
+    listen 80;
+    listen 9080;
+    server_name www.fai365.com;
+    
+location / {
+        root /data/web/;
+        try_files $uri $uri/ /index.html last;
+        autoindex on;
+        index index.html index.htm;
+        error_page 405 =200 http://$host$request_uri;
+    }
+    
+#   location ^~/api-s/ {
+#        proxy_pass  http://aps_server;
+#	#rewrite "^/api/(.*)$" $1 break;
+#        proxy_set_header  X-Forwarded-Host   $host;
+#        proxy_set_header  X-Forwarded-Server $host;
+#        proxy_set_header  X-Real-IP        $remote_addr;
+#        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
+#        proxy_http_version 1.1;
+#   }
+    location ^~/api-s/ {
+	lua_code_cache off;
+	set $proxy_aps_server '';
+	access_by_lua '
+		local aps = require "resty.aps"
+		aps.proxy("/aps/apsServer/node/")
+	';
+	proxy_pass $proxy_aps_server;
+	proxy_set_header  X-Forwarded-Host   $host;
+	proxy_set_header  X-Forwarded-Server $host;
+	proxy_set_header  X-Real-IP        $remote_addr;
+	proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
+	proxy_http_version 1.1;
+    }
+
+    location ^~/api/user/ {
+        proxy_pass  http://aps_user_server;
+        proxy_set_header  X-Forwarded-Host   $host;
+        proxy_set_header  X-Forwarded-Server $host;
+        proxy_set_header  X-Real-IP        $remote_addr;
+        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
+        proxy_http_version 1.1;
+    }
+    location ^~/api/base/ {
+        proxy_pass  http://aps_user_server;
+        proxy_set_header  X-Forwarded-Host   $host;
+        proxy_set_header  X-Forwarded-Server $host;
+        proxy_set_header  X-Real-IP        $remote_addr;
+        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
+        proxy_http_version 1.1;
+    }
+    location ^~/api/menu/ {
+        proxy_pass  http://aps_user_server;
+        proxy_set_header  X-Forwarded-Host   $host;
+        proxy_set_header  X-Forwarded-Server $host;
+        proxy_set_header  X-Real-IP        $remote_addr;
+        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
+        proxy_http_version 1.1;
+    }
+    error_page 404 /index.html;
+}
diff --git a/install/aps.lua b/install/aps.lua
new file mode 100644
index 0000000..ead40b2
--- /dev/null
+++ b/install/aps.lua
@@ -0,0 +1,52 @@
+local jwt = require "resty.jwt"
+local secret = "327a9457-899a-481e-8b30-58cc97e5b808"
+
+local M = {}
+
+function logPrint(msg)
+	ngx.log(ngx.ERR, msg)
+end
+
+function M.proxy(key_prefix)
+	local aps_nodes = ngx.shared.aps_nodes_map
+
+	-- 璇诲彇header
+	local auth_header = ngx.var.http_Authorization
+	if auth_header == nil then
+		ngx.exit(ngx.HTTP_UNAUTHORIZED)
+	end
+
+	if auth_header .. "" == "" then
+		ngx.exit(ngx.HTTP_UNAUTHORIZED)
+	end
+
+	-- 鑾峰彇jwt token
+	local _, _, token = string.find(auth_header, "Bearer%s+(.+)")
+	if token .. "" == "" then
+		ngx.exit(ngx.HTTP_UNAUTHORIZED)
+	end
+
+	-- 楠岃瘉token
+	local jwt_obj = jwt:verify(secret, token)
+	if jwt_obj.verified == false then
+		ngx.exit(ngx.HTTP_UNAUTHORIZED)
+	end
+
+	local parent_id = jwt_obj["payload"]["ParentId"]
+	if parent_id == nil then
+		logPrint("ParentId in token is nil")
+		ngx.exit(ngx.HTTP_UNAUTHORIZED)
+	end
+ 
+	
+	--search real ip and port to redirect to by parent_id
+	local node_addr = aps_nodes:get(key_prefix .. parent_id)
+	if not node_addr then
+		ngx.exit(ngx.HTTP_BAD_GATEWAY)
+	end
+
+	logPrint("aps current parentid is "..parent_id.." key_prefix:"..key_prefix.. " node_addr:"..node_addr)
+	ngx.var.proxy_aps_server = "http://" .. node_addr
+end
+
+return M
diff --git a/install/nginx.conf b/install/nginx.conf
new file mode 100644
index 0000000..1fc4124
--- /dev/null
+++ b/install/nginx.conf
@@ -0,0 +1,143 @@
+
+user  root;
+worker_processes  1;
+
+#error_log  logs/error.log;
+#error_log  logs/error.log  notice;
+#error_log  logs/error.log  info;
+
+#pid        logs/nginx.pid;
+
+
+events {
+    worker_connections  1024;
+}
+
+
+http {
+    server_names_hash_bucket_size 128;
+    client_header_buffer_size 64k;
+    large_client_header_buffers 8 64k;
+    client_max_body_size 300m;
+    include       mime.types;
+    default_type  application/octet-stream;
+    
+    lua_socket_log_errors off;
+    lua_package_path "/usr/local/lib/lua/?.lua;/usr/local/openresty/lualib/?.lua;"; #lua妯″潡
+    #lua_package_path "/usr/local/openresty/lualib/?.lua;;"; #lua妯″潡
+    lua_package_cpath "/usr/local/openresty/lualib/?.so;;"; #c妯″潡
+
+    lua_shared_dict aps_nodes_map 10m; #璁板綍saas鐢ㄦ埛鍜宨p:port鐨勬槧灏勫叧绯�
+    init_worker_by_lua_block {
+        local se = require "resty.aps-etcd"
+        se.init({
+            protocol = "v3",
+            http_host = "https://172.20.11.127:2379",
+            api_prefix = "/v3",
+            ssl_verify = true,
+            storage = ngx.shared.aps_nodes_map,
+            key_node = "/aps/apsServer/node",
+            timeout = 50,
+	})
+    }
+
+    include conf.d/*.conf; #鍗曠嫭lua閰嶇疆
+    lua_shared_dict server_ip 10m;
+
+    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+    #                  '$status $body_bytes_sent "$http_referer" '
+    #                  '"$http_user_agent" "$http_x_forwarded_for"';
+
+    #access_log  logs/access.log  main;
+
+    sendfile        on;
+    #tcp_nopush     on;
+
+    #keepalive_timeout  0;
+    keepalive_timeout  65;
+
+    #gzip  on;
+
+#server {
+#        listen       80;
+#        server_name  localhost;
+
+        #charset koi8-r;
+
+        #access_log  logs/host.access.log  main;
+
+#       location / {
+#            root   html;
+#            index  index.html index.htm;
+#        }
+
+        #error_page  404              /404.html;
+
+        # redirect server error pages to the static page /50x.html
+        #
+#        error_page   500 502 503 504  /50x.html;
+#        location = /50x.html {
+#            root   html;
+#        }
+
+        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+        #
+        #location ~ \.php$ {
+        #    proxy_pass   http://127.0.0.1;
+        #}
+
+        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+        #
+        #location ~ \.php$ {
+        #    root           html;
+        #    fastcgi_pass   127.0.0.1:9000;
+        #    fastcgi_index  index.php;
+        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
+        #    include        fastcgi_params;
+        #}
+
+        # deny access to .htaccess files, if Apache's document root
+        # concurs with nginx's one
+        #
+        #location ~ /\.ht {
+        #    deny  all;
+        #}
+#    }
+
+
+    # another virtual host using mix of IP-, name-, and port-based configuration
+    #
+    #server {
+    #    listen       8000;
+    #    listen       somename:8080;
+    #    server_name  somename  alias  another.alias;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+
+    # HTTPS server
+    #
+    #server {
+    #    listen       443 ssl;
+    #    server_name  localhost;
+
+    #    ssl_certificate      cert.pem;
+    #    ssl_certificate_key  cert.key;
+
+    #    ssl_session_cache    shared:SSL:1m;
+    #    ssl_session_timeout  5m;
+
+    #    ssl_ciphers  HIGH:!aNULL:!MD5;
+    #    ssl_prefer_server_ciphers  on;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+}

--
Gitblit v1.8.0