Nginx 服务模块示例
示例内容
基于 Nginx Runtime 部署运行静态页面资源。
示例资源
部署过程
1. 在架构设计工具中,从组件市场中引用 nginx-runtime 组件,拖到架构图中, 保存后按提示重启制作台。
2. 在 /model/service 目录下创建如下的目录和文件:
|-- /model/service/demo-nginx // 服务模块根目录
|-- deploy // 服务定义目录
|-- demo-nginx.module.conf // nginx 配置文件
|-- production.def.xml // 服务部署定义文件
|-- dist // 服务资源目录
|-- index.html // 服务部署资源文件
|-- deploy.m // 服务模块标识文件
|-- app.m // 服务网关定义文件
其中:
- deploy.m 服务模块标识文件,文件内容为空。
- app.m 服务网关定义文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<!-- 网关注册服务名 -->
<name>demo-nginx</name>
<!-- 网关注册路径 -->
<request_path>/demonginx</request_path>
<!-- 是否保留主机 -->
<preserve_host>false</preserve_host>
<!-- 是否截断URL -->
<strip_request_path>true</strip_request_path>
<!-- 服务访问路径 -->
<upstream_url>http://{{.Env.DEMO_NGINX_SERVICEADDRESS}}:{{.Env.DEMO_NGINX_PORT}}/demo-nginx</upstream_url>
</service>
说明:在 app.m 服务网关定义文件中,声明当前服务的网关访问路径是 /demonginx,指向的 nginx 服务下的 /demo-nginx。upstream_url 的地址来自服务部署定义文件中的属性定义所对应的环境变量。
- production.def.xml 服务部署定义文件,文件内容如下:
<service>
<!-- 属性定义 -->
<properties>
<property name="serviceAddress" value="${appsvc.serviceAddress}">
<label label = "服务地址"/>
</property>
<property name="port" value="${appsvc.port}">
<label label = "端口(port)"/>
</property>
</properties>
<!-- 部署定义 -->
<spec platform="app-container">
<option name="name" value="appsvc" />
<option name="instance" value="nginx-runtime" />
<option name="container" value="nginx" />
</spec>
</service>
说明:在 production.def.xml 服务定义文件中,在 spec 部署定义部分声明当前模块的部署运行环境是 nginx-runtime;在 properties 属性定义中声明了两个属性 serviceAddress 和 port,值引用来自部署定义中的 nginx-runtime,这两个属性会自动生成两个环境变量 DEMO_NGINX_SERVICEADDRESS 和 *DEMO_NGINX_PORT。
- demo-nginx.module.conf nginx 配置文件,文件内容如下:
location /demo-nginx {
absolute_redirect off;
alias /dist/comp.nginx-runtime/dist/demo-nginx/;
index index.html index.htm;
}
- index.html 示例页面,文件内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>demo-nginx</title>
</head>
<body>
<h1>demo-nginx</h1>
</body>
</html>
3. 应用发布。
4. 测试运行: //{entry}/{serviceName}/demonginx/index.html,运行效果如下:
运行剖析
在上面的示例已经部署运行就绪后,我们接下来通过监控工具对实际运行环境和运行机制给大家做剖析。
1. 从 应用/服务管理 进入服务的 监控 面板,在 POD 终端页进入 comp-nginx-runtime 的终端。
2. 用以下命令查看 nginx 的配置。
cat /etc/nginx/conf.d/modules/demo-nginx.module.conf
3. 用以下命令进入 /dist/comp.nginx-runtime/dist/demo-nginx 目录:
cd /dist/comp.nginx-runtime/dist/demo-nginx/
4. 从以上内容可以看出,容器内部的页面访问地址为 localhost:8090/demo-nginx/index.html。
5. 接下来我们进入 监控 面板的 网关监控 页,从左侧菜单选择进入 服务管理,查找 demo-nginx (通过 app.m 注册的网关服务名),点击进入 s可以看到网关上已经配置了服务的路由路径为 /demoginx,指向 localhost:8090/demo-nginx。
6. 最终的访问路由过程如下:
graph TB;
//entry/service/demonginx/index.html --> entry的服务网关 -->service的代理网关 --> localhost:8090/demo-nginx/index.html