十六、OpenResty 奇门术——使用 OpenResty 开发 Web 应用

十六、OpenResty 奇门术——使用 OpenResty 开发 Web 应用

在这里插入图片描述

开发一个 Web 应用需要从项目搭建、功能开发、项目部署几个方面入手。下面我们逐步介绍如何使用 OpenResty(基于 Nginx 的 Lua 扩展)来开发一个简单的 Web 应用。

1. 项目搭建

项目目录结构如下所示:

/export/App/nginx-app
|-- bin                 (脚本)
|   |-- start.sh        (启动脚本)
|   |-- stop.sh         (停止脚本)
|-- config              (配置文件)
|   |-- nginx.conf      (Nginx 主配置文件)
|   |-- domain
|       |-- nginx_product.conf (项目配置文件)
|   |-- resources.properties   (资源配置文件)
|-- lua                 (业务代码)
|   |-- init.lua        (初始化脚本)
|   |-- product_controller.lua (控制器)
|-- template            (模板)
|   |-- product.html    (商品页面模板)
|-- lualib              (公共 Lua 库)
    |-- jd
    |   |-- product_util.lua   (产品工具类)
    |   |-- product_data.lua   (产品数据类)
    |-- resty
        |-- redis.lua   (Redis 相关库)
        |-- template.lua(模板库)

整个项目结构划分为几个部分:启停脚本、配置文件、公共组件、业务代码、模板代码等。

2. 启停脚本

启停脚本位于项目目录 /export/App/nginx-app/bin/ 下,用于启动和停止 Nginx 服务。

  • start.sh:启动和更新 Nginx 服务的脚本。

    脚本首先检查 Nginx 是否已经启动,如果没有启动则启动 Nginx;如果已经启动则重新加载配置文件。

    # 启动 Nginx,如果已经启动则重新加载配置
    sudo /export/servers/nginx/sbin/nginx -c /export/App/nginx-app/config/nginx.conf
    if [ $? -ne 0 ]; then
      echo "Nginx is already running, reloading..."
      sudo /export/servers/nginx/sbin/nginx -s reload
    else
      echo "Nginx started."
    fi
    
  • stop.sh:停止 Nginx 服务的脚本。此脚本使用 -s quit 命令来优雅地停止 Nginx 服务。

    # 停止 Nginx 服务
    echo "Stopping Nginx..."
    sudo /export/servers/nginx/sbin/nginx -s quit
    echo "Nginx stopped."
    

3. 配置文件

配置文件位于 /export/App/nginx-app/config 目录下,主要包括以下几类:

  • nginx.conf:Nginx 的主配置文件,用于配置全局参数,如工作进程数、超时时间、压缩、日志格式、反向代理等。同时,nginx.conf 文件还会引入其他的 Server 配置文件。

  • Nginx 项目配置文件(如 nginx_product.conf):位于 config/domains/ 子目录中,用于配置特定项目的 Nginx 服务参数,例如 upstream、缓存配置、模板文件位置、URL 映射等。通过这些配置,可以定义不同的服务器和处理逻辑。

  • 资源配置文件(如 resources.properties):用于配置项目的资源信息,例如开关配置、缓存服务器地址等。资源配置文件通常包含项目中用到的一些全局变量和常量配置。

这些配置文件的组合,可以灵活地配置和管理 Nginx 及其关联的 Web 应用服务。

3.1 Nginx 主配置文件(nginx.conf)

nginx.conf 文件是 Nginx 的主配置文件,包含了全局设置、事件处理和 HTTP 服务的配置。在本例中,它主要用于配置工作进程数量、事件处理、HTTP 服务和 Lua 模块依赖等。

以下是 nginx.conf 文件的示例配置:

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type text/html;

    # Lua 依赖路径
    lua_package_path "/export/App/nginx-app/lualib/?.lua;;";
    lua_package_cpath "/export/App/nginx-app/lualib/?.so;;";

    # 加载 Server 相关配置
    include /export/App/nginx-app/config/domains/*;

    # 初始化脚本
    init_by_lua_file "/export/App/nginx-app/lua/init.lua";
}

配置项说明:

  • worker_processes 1;:指定 Nginx 的工作进程数量。在多核服务器上可以设置为更大的值来提高并发处理能力。

  • events:配置 Nginx 事件模型和连接处理相关的选项。

    • worker_connections 1024;:每个 worker 进程的最大连接数。此设置影响 Nginx 的最大并发连接数。
  • http:包含 HTTP 服务的配置,通常是 Nginx 的 Web 服务器配置部分。

    • include mime.types;:引入 MIME 类型配置文件,用于定义不同文件扩展名的内容类型。

    • default_type text/html;:未指定 MIME 类型时,默认的内容类型为 text/html

    • lua_package_pathlua_package_cpath:设置 Lua 模块的查找路径,这里指定了 Lua 脚本和库文件所在的目录路径。

    • include /export/App/nginx-app/config/domains/*;:加载 domains 目录下的所有配置文件(如 nginx_product.conf),用于配置不同的虚拟主机(server 块)。

    • init_by_lua_file "/export/App/nginx-app/lua/init.lua";:指定 Lua 初始化脚本文件,在 Nginx 启动时执行,用于进行全局变量初始化、加载模块等操作。

3.2 Nginx 项目配置文件(nginx_product.conf)

nginx_product.conf 文件是 Nginx 用于特定 Web 应用的 Server 配置文件,主要包括上游服务器的配置、缓存设置、模板路径、URL 映射规则等。

以下是配置文件的详细内容和解释:

# upstream 后端服务配置
upstream item_http_upstream {
    server 192.168.1.1 max_fails=2 fail_timeout=30s weight=5;
    server 192.168.1.2 max_fails=2 fail_timeout=30s weight=5;
}

# 缓存配置
lua_shared_dict item_local_shop_cache 600m;

server {
    listen 80;
    server_name item.jd.com item.jd.hk;

    # 模板路径
    set $template_root "/export/App/nginx-app/template";

    # URL 映射规则
    location ~* /product/(\d+)\.html$ {
        rewrite /product/(.*) http://item.jd.com/$1 permanent;
    }

    location ~* /(\d{6,12})\.html$ {
        default_type text/html;
        charset gbk;
        lua_code_cache on;
        content_by_lua_file "/export/App/nginx-app/lua/product_controller.lua";
    }
}

关键配置说明:

  • upstream item_http_upstream:定义了后端服务的负载均衡配置。max_fails=2 表示在 fail_timeout(30 秒)时间内如果有两次失败请求则不再将请求转发给该服务。weight=5 指定了服务器的权重,用于控制请求分发的比例。

  • lua_shared_dict item_local_shop_cache 600m:定义了一个大小为 600 MB 的共享字典(缓存)用于存储临时数据,提高性能。此缓存可以用于存储 API 响应、用户会话等。

  • server<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌宝儿姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值