Nginx 服务模块示例

示例内容

基于 Nginx Runtime 部署运行静态页面资源。

示例资源

index.html

部署过程

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-nginxupstream_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 属性定义中声明了两个属性 serviceAddressport,值引用来自部署定义中的 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,运行效果如下:

1718871942258

运行剖析

在上面的示例已经部署运行就绪后,我们接下来通过监控工具对实际运行环境和运行机制给大家做剖析。

1. 从 应用/服务管理 进入服务的 监控 面板,在 POD 终端页进入 comp-nginx-runtime 的终端。

1718870981917

2. 用以下命令查看 nginx 的配置。

cat /etc/nginx/conf.d/modules/demo-nginx.module.conf

1718871688095

3. 用以下命令进入 /dist/comp.nginx-runtime/dist/demo-nginx 目录:

cd /dist/comp.nginx-runtime/dist/demo-nginx/

1718872135379

4. 从以上内容可以看出,容器内部的页面访问地址为 localhost:8090/demo-nginx/index.html。 1718872790419

5. 接下来我们进入 监控 面板的 网关监控 页,从左侧菜单选择进入 服务管理,查找 demo-nginx (通过 app.m 注册的网关服务名),点击进入 s可以看到网关上已经配置了服务的路由路径为 /demoginx,指向 localhost:8090/demo-nginx

1718874923322

6. 最终的访问路由过程如下:

graph TB;
//entry/service/demonginx/index.html --> entry的服务网关 -->service的代理网关 --> localhost:8090/demo-nginx/index.html

results matching ""

    No results matching ""