Sign inSign up

kervin521/nginx-plus

By kervin521

•Updated 6 months ago

为了解决Nginx与容器环境(Swarm、K8S)前后端代理兼容性问题实现自动化代理

Image
0

70

kervin521/nginx-plus repository overview

⁠基于容器化的Nginx代理技术

为了解决Nginx与容器环境(Swarm、K8S)前后端代理兼容性问题实现自动化代理,增强并支持代理方式:正向代理、反向代理、动态代理、首页代理、重定向代理、跳转代理

⁠1. 容器集群服务配置

⁠1.1 Swarm服务
version: '3.7'
services:
   aa-web:
      image: nginx-plus:1.29.5-alpine
      environment:
      - NETWORK_NAME=eth0
      - SCHEDULE_RELOAD_TIMES=2
      - STACK_NAME=cps
      - NGINX_PORT=1880
      - NGINX_PROXY=true
      - NGINX_CORS=true
      - NGINX_PROCESSES=2
      - NGINX_STYLE=0
      - NGINX_CLIENT_ID=aa-web
      - NP_CLUSTER_ADDRS=172.21.32.180:2375,172.21.32.181:2375,172.21.32.182:2375
      - NP_INDEX_SVC=http://hollysys-node-red-20062:1880/
      - NP_DYNAMIC_SVC_REG=^modeler-svc-*:8680
      - NP_DYNAMIC_SVC_PREFIX=modeler-svc-:8680
      - NP_FORWARD_SVC_0=platform/websocket/rtdata@http://platform-manager-svc:8720/rtdata
      - NP_FORWARD_SVC_1=sf-authority-service:8560
      - NP_FORWARD_SVC_2=sf-system-service:8580
      - NP_FORWARD_SVC_3=realtime-svc:8720
      - NP_FORWARD_SVC_4=socket/m7/echo@http://information-svc:8810/m7/echo
      - NP_STATIC_SVC_0=hmi-editor-svc
      - NP_FIXED_SVC_0=platform-manager-svc:8720
      - NP_FIXED_SVC_2=socket.io@http://hmi-editor-svc:28700/socket.io
      - NP_REDIRECT_WEB_0=test@static/project
      - NP_FORWARD_WEB_0=auth@http://172.21.44.180:8800/
      volumes:
      - /etc/localtime:/etc/localtime
      - /etc/timezone:/etc/timezone
      ports:
      - 65520:1880
⁠1.2 K8S服务

⁠2. 常规参数说明

  • NETWORK_NAME:容器网卡名称,传入后端服务中使用
  • NGINX_PORT: 容器Nginx端口,写入或修改/etc/nginx/nginx.conf对应的listen 80
  • NGINX_PROXY: 是否启动自动化代理(true: 启动[默认],false: 禁用),禁用后恢复Nginx默认方式如果需要配置代理则需要映射文件nginx.conf
  • NGINX_PROCESSES: Nginx的进程数量,写入或修改/etc/nginx/nginx.conf对应的worker_processes参数
  • NGINX_GZIP_LEVEL: Nginx的进程数量,写入或修改/etc/nginx/nginx.conf对应的gzip_comp_level参数
  • STACK_NAME: Swarm的栈名,调用swarm接口使用
  • NP_CLUSTER_ADDRS: 集群接口地址(K8S集群&Swarm集群),如:NP_CLUSTER_ADDRS=172.21.32.180:2375,172.21.32.181:2375,172.21.32.182:2375
  • SCHEDULE_RELOAD_TIMES: 自动代理延迟时间,当前值为次数n,合计时间为:n*10s
  • NGINX_DOMAIN: 请求替换请求头域名配置,写入或修改/etc/nginx/nginx.conf对应的add_header Domain 'm7it.hollysys.com';
  • APP_VERSION:APP版本,写入或修改/etc/nginx/nginx.conf对应健康检查接口/docket/health
  • SYSTEM_UID:多租户标识ID,写入或修改/usr/share/nginx/html/static/identify.js中对应window.uid=
  • DEBUG_VERBOSE:是否开启Debug模式,写入或修改/usr/share/nginx/html/static/identify.js中对应window.DEBUG_VERBOSE=true|false
  • NGINX_CLIENT_ID:单点登录ClientID,写入或修改/usr/share/nginx/html/static/identify.js中对应window.clientId=
  • NGINX_STYLE:前端模式,写入或修改/usr/share/nginx/html/static/identify.js中对应window.style=
  • SYSTEM_ENABLED_: 前端控制开关(""使用具体开关编号),写入或修改/usr/share/nginx/html/static/identify.js中对应window.SYSTEM_ENABLED_*=true|false

⁠3. 代理参数说明

⁠3.1 正向代理
  • 代理描述:前端访问后端,实现正向代理后端服务
  • 代理前缀:NP_FORWARD_SVC_,""为具备数字
  • 代理值样例:
sf-authority-service:8560 ->如:前端访问url为http://172.21.44.180:8080/sf-authority-service/findAll,后端代理地址为http://sf-authority-service:8560/findAll
socket/m7/echo@http://information-svc:8810/m7/echo ->如:前端访问url为http://172.21.44.180:8080/socket/m7/echo,后端代理地址为http://information-svc:8810/m7/echo
realtime@realtime-svc:8720 ->如:前端访问url为http://172.21.44.180:8080/realtime/findAll,后端代理地址为http://realtime-svc:8720/findAll
⁠3.2 反向代理
  • 代理描述:前端访问后端,实现反向代理后端服务
  • 代理前缀:NP_FIXED_SVC*,"*"为具备数字
  • 代理值样例:
sf-authority-service:8560 ->如:前端访问url为http://172.21.44.180:8080/sf-authority-service/findAll,后端代理地址为http://sf-authority-service:8560/findAll
socket/m7/echo@http://information-svc:8810/m7/echo ->如:前端访问url为http://172.21.44.180:8080/socket/m7/echo,后端代理地址为http://information-svc:8810/m7/echo
realtime@realtime-svc:8720 ->如:前端访问url为http://172.21.44.180:8080/realtime/findAll,后端代理地址为http://realtime-svc:8720/findAll
⁠3.3 动态代理
  • 代理描述:前端访问后端,通过查询集群服务名称实现动态反向代理后端服务
  • 代理前缀:NP_DYNAMIC_SVC_PREFIX,由"动态服务前缀+':'+端口"组成,如modeler-svc-:8680(modeler-svc-为动态服务前缀,8680为动态服务内部容器端口)
  • 代理正则:NP_DYNAMIC_SVC_REG,由"'^'+动态服务前缀+':'+端口"组成,如^modeler-svc-*:8680(modeler-svc-为动态服务前缀,8680为动态服务内部容器端口)
  • 注意事项:推荐使用NP_DYNAMIC_SVC_PREFIX并且带有端口模式
  • 代理值样例:
modeler-svc-:8680 ->如:前端访问url为http://172.21.44.180:8080/modeler-svc-aaa/findAll,后端代理地址为http://modeler-svc-aaa:8680/findAll
modeler-svc- ->如:前端访问url为http://172.21.44.180:8080/modeler-svc-aaa/findAll,后端代理地址为http://modeler-svc-aaa:8680/findAll
^modeler-svc-*:8680 ->如:前端访问url为http://172.21.44.180:8080/modeler-svc-aaa/findAll,后端代理地址为http://modeler-svc-aaa:8680/findAll
⁠3.4 首页代理
  • 代理描述:前端访问Nginx首页代理其内部服务或其他服务首页
  • 代理前缀:NP_INDEX_SVC,如从Nginx代理Node-Red服务:http://hollysys-node-red-20062:1880/⁠
  • 代理前缀:NP_INDEX_REDIRECT,如从Nginx代理目录:/opt/deploy/html
  • 代理前缀:NP_INDEX_PROXY,如从Nginx代理Docker Hub仓库:https://docker.aeko.cn/⁠
  • 代理值样例:
http://hollysys-node-red-20062:1880/ ->如:前端访问Nginx服务地址为http://172.21.44.180:8080,则直接跳转到Node-Red首页http://hollysys-node-red-20062:1880/ 
http://172.21.44.180:8800/ ->如:前端访问Nginx服务地址为http://172.21.44.180:8080,则直接跳转到平台单点登录首页http://172.21.44.180:8800/
/opt/deploy/html ->如:前端访问Nginx服务地址为http://172.21.44.180:8080,默认:/usr/share/nginx/html,则直接跳转到/opt/deploy/html
⁠3.5 重定向代理(内部跳转)
  • 代理描述:前端内部目录的重定向跳转,实现所有前端独立开发但打包到一起进行部署,从而实现内部代理重定向
  • 代理前缀:NP_REDIRECT_WEB_,""为具备数字,如Nginx根下是单点登录(包含index.html、js目录、css目录),Nginx根下auth目录下为权限前端(包含index.html、js目录、css目录)
  • 代理值样例:
auth->如:前端访问url为http://172.21.44.180:8800/auth,前端代理地址为http://172.21.44.180:8800/auth/index.html
sys@auth->如:前端访问url为http://172.21.44.180:8800/sys,前端代理地址为http://172.21.44.180:8800/auth/index.html
⁠3.6 跳转代理(外部跳转)
  • 代理描述:前端跳转访问前端,实现跳转代理其他前端服务
  • 代理前缀:NP_FORWARD_WEB_,""为具备数字
  • 代理值样例:
sso@http://172.21.44.180:8800 ->如:前端访问url为http://172.21.44.180:8080/sso则代理跳转地址为http://172.21.44.180:8800/

⁠4. 版本说明

⁠- v1.29.5
- [升级]nginx升级到1.29.5
- [增强]增强首页代理支持第三方托管代理
- [增加]NGINX_STATUS=true开启stub_status开关进行nginx监控
- [修复]修复一些其他已知问题
⁠- v1.27.4
- [升级]nginx升级到1.27.4
- [增强]增强WebSocket代理并修复工具socket.html页面获取浏览器地址
- [修复]修复一些其他已知问题
⁠- v1.27.1
- [升级]nginx升级到1.27.1
- [增加]NGINX_CORS=true开启跨域请求开关,否则按后端是否支持跨域为准
- [增强]identify.js生成window.sys_license_remark配置
- [修复]修复一些其他已知问题
⁠- v1.27.0
- [升级]nginx升级到1.27.0
- [修复]修复正向代理(NP_FORWARD_SVC)、反向代理(NP_FIXED_SVC)代理地址健康检查地址切割错误问题
- [修复]修复一些其他已知问题
⁠- v1.25.4
- [升级]nginx升级到1.25.4
- [增加]配置授权接口路径LICENSE_URL(如http://172.21.44.32:8080/)将在identify.js生成授权信息配置window.sys_license_*
- [修复]修复一些其他已知问题
⁠- v1.25.3
- [升级]nginx升级到1.25.3
- [增强]增加gzip_comp_level动态数据压缩配置GZIP_LEVEL
- [增强]增加gzip_types支持类型
- [修复]修复一些其他已知问题

Tag summary

Content type

Image

Digest

sha256:b4d70368c…

Size

37.2 MB

Last updated

6 months ago

docker pull kervin521/nginx-plus:1.29.5-alpine