Nginx 教程

Nginx 教程 Nginx 简介 Nginx 源码架构分析 Nginx 编译安装 Nginx(Tengine) 编译安装 Nginx(OpenResty) 编译安装 Nginx 配置简述 Nginx Docker 容器化配置

Nginx 核心配置指令

Nginx 核心配置指令 Nginx 配置文件 Nginx 进程配置指令 Nginx 端口监听:listen Nginx 主机名server_name Nginx 处理HTTP请求 Nginx 路由匹配规则:localhost Nginx 重定向配置:rewrite Nginx 根目录配置:root Nginx 访问路径别名:alias Nginx 文件判断:try_files Nginx 零复制:sendfile Nginx 日志记录配置

Nginx HTTP模块

Nginx 镜像模块 Nginx 请求头控制模块 Nginx IP访问控制模块 Nginx 用户cookie模块 Nginx 并发连接数限制模块 Nginx 首页处理模块 Nginx 请求频率限制模块 Nginx 页面缓存时间配置 Nginx gzip压缩及相关配置

Nginx Web服务

Nginx 静态资源服务器搭建 Nginx 文件下载服务器搭建 Nginx 伪动态SSI服务器 Nginx HTTPS服务器搭建 Nginx FastCGI模块配置简述 Nginx PHP服务器环境搭建 Nginx 基于FastCGI负载均衡 Nginx CGI网关接口 Nginx uWSGI模块配置 Nginx Python项目部署 Nginx 伪流媒体服务器搭建 Nginx HTTP2模块配置简述 Nginx WebDAV模块配置简述

Nginx 代理服务器

Nginx HTTP代理服务器 Nginx stream模块简述 Nginx TCP/UDP代理简述 Nginx 基于SSL的TCP代理服务器 Nginx gRPC代理服务器

Nginx 缓存

Nginx Web缓存配置 Nginx 代理缓存配置 Nginx Memcached 缓存模块 Nginx 反向代理缓存服务器配置 Nginx 客户端缓存控制

Nginx 负载均衡

Nginx 负载均衡模块 Nginx 负载均衡策略 Nginx 长连接负载均衡 Nginx upstream容错机制 Nginx upstream动态更新 Nginx TCP/UDP负载均衡

Nginx 日志管理监控

Nginx 日志分析简述 Nginx 访问日志配置 Nginx 错误日志配置 Nginx 日志归档配置 Nginx 日志分析工具 ELK Nginx 监控工具 Prometheus

Nginx 集群

LVS(Linux虚拟服务器)简介 Keepalived 配置简述 Nginx 集群负载搭建 Nginx 集群配置管理规划 Nginx 配置归档工具GitLab Nginx 配置修改工具Ansible Jenkins 安装与配置简述 Nginx 集群配置管理实例

Nginx 在 k8s 的应用

Kubernetes(k8s)系统简述 Kubernetes(k8s)集群部署 Kubernetes(k8s)网络通信 Nginx Ingress 简介 Nginx Ingress 安装部署 Nginx Ingress 配置映射 Nginx Ingress 注解


OpenResty 编译安装

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。


1、OpenResty源码获取

OpenResty 当前源码版本是 1.15.8.2,集成的 Nginx 版本是 Nginx 1.15.8 版本。其源码可通过官网直接获取,获取命令如下:

mkdir -p /opt/data/source
cd /opt/data/source
wget https://openresty.org/download/openresty-1.15.8.2.tar.gz
tar zxmf openresty-1.15.8.2.tar.gz


2、编译配置参数

OpenResty 是 Nginx 的扩展版,其在编译配置参数上也进行了清晰的区分,分为 Nginx 原有编译配置参数和扩展编译配置参数两部分,扩展编译配置参数如下表所示。

编译参数 参数说明
--with-debug 启用调试日志
--with-dtrace-probes 启用 DTrace USDT 探针
--without-http_echo_module 不编译可以在 Nginx 的 URL 访问中通过 echo 命令输出字符到用户的浏览器,一般用来调试输出信息,检测 Nginx 的可访问性、配置正确性
--without-http_xss_module 不编译跨站点脚本支持
--without-http_coolkit_module 不编译 Nginx 插件模块集合
--without-http_set_misc_module 不编译 rewrite 指令的扩展
--without-http_form_input_module 不编译 HTTP 请求扩展
--without-http_encrypted_session_module 不编译加密解密 Nginx 变量值的模块
--without-http_srcache_module 不编译缓存增强模块
--without-http_lua_module 不编译 Lua 脚本支持模块
--without-http_lua_upstream_module 不编译提供操作 upstream 服务器 Lua API 功能的模块
--without-http_headers_more_module 不编译 header 返回信息编辑模块
--without-http_array_var_module 不编译数组类型的 Nginx 变量模块
--without-http_memc_module 不编译 Memcache 扩展模块
--without-http_redis2_module 不编译 Redis 2.0 协议支持模块
--without-http_redis_module 不编译 Redis 缓存的模块
--without-http_rds_ison_module 不编译 DBD-Stream 格式转 JSON 格式模块
--without-http_rds_csv_module 不编译 DBD-Stream 格式转 cvs 格式模块
--without-stream_lua_module 不编译 TCP/UDP 负载 Lua 脚本支持模块
--without-ngx_devel_kit_module 不编译模块开发库
--with-http_iconv_module 编译编码字符转换模块
--without-http_ssl_module 不编译 HTTP SSL 支持模块
--without-stream_ssl_module 不编译 Stream SSL 支持模块
--with-http_drizzle_module 编译 MySQL 或 Drizzle 数据库访问模块
--with-http_postgres_module 编译 PostgreSQL 数据库访问模块
--without-lua_cjson 不编译快速解析 JSON 的一个 Lua C 模块
--without-lua_tablepool 不编译基于 LuaJIT 的 Lua 表格资源回收池支持库
--without-lua_redis_parser 不编译 Redis 数据解析为 Lua 数据结构模块
--without-lua_rds_parser 不编译 DBD-Stream 格式的数据解析为 Lua 数据结构模块
--without-lua_resty_dns 不编译 DNS(域名系统)解析器的 Lua 模块
--without-lua_resty_memcached 不编译 Memcached 客户端模块
--without-lua_resty_redis 不编译 Redis 客户端模块
--without-lua_resty_mysql 不编译 MySQL 客户端模块
--without-lua_resty_upload 不编译上传文件支持模块
--without-lua_resty_upstream_healthcheck 不编译基于 Lua 的服务器组健康监测模块
--without-lua_resty_string 不编译字符串实用程序和通用哈希函数的 Lua 库
--without-lua_resty_websocket 不编译基于 Lua 的非阻塞 WebSocket 服务/客户端
--without-lua_resty_limit_traffic 不编译 lua-resty-limit-traffic 支持库
--without-lua_resty_lock 不编译基于 Lua Nginx 模块的共享内存字典的简单非阻塞互斥锁 API
--without-lua_resty_lrucache 不编译 Lua-land LRU 缓存
--without-lua_resty_signal 不编译 lua-resty-signal 支持库,该支持库用于向 UNIX 进程发送信号
--without-lua_resty_shell 不编译 lua-resty-shell 支持库,该支持库可以实现通过 Lua 调用 shell 脚本的支持
--without-lua_resty_core 不编译使用 LuaJIT FFI 实现 Lua Nginx 模块提供的 Lua API
--with-luajit 编译 LuaJIT 2.1 解释器
--without-luajit-lua52 不编译基于 Lua 5.2 的 LuaJIT 扩展解释器

对于下表,有以下几点说明。
  • 扩展的功能模块都是被默认编译的,可以通过参数设置选择不编译;
  • DTrace 是基于系统底层的性能监控技术,可监测函数级别的内存、CPU 性能数据;
  • Nginx 原有编译配置参数参见《Nginx编译安装》一节。

3、代码编译

OpenResty 代码编译如下所示:

yum -y install gcc pcre-devel make zlib-devel openssl-devel libxml2-devel \
    libxslt-devel gd-devel GeoIP-devel libatomic_ops-devel luajit \
    luajit-devel perl-devel perl-ExtUtils-Embed

./configure \
    --with-threads \
    --with-file-aio \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_xslt_module=dynamic \
    --with-http_image_filter_module=dynamic \
    --with-http_geoip_module=dynamic \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_auth_request_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_degradation_module \
    --with-http_slice_module \
    --with-http_stub_status_module \
    --with-stream=dynamic \
    --with-stream_ssl_module \
    --with-stream_realip_module \
    --with-stream_geoip_module=dynamic \
    --with-stream_ssl_preread_module

gmake && gmake install

编译完成后,默认安装目录为 /usr/local/openresty。Nginx 安装在 /usr/local/openresty/nginx 目录下。

4、OpenResty集成的模块

在 OpenResty 中使用 Lua 是非常方便的,既可以在配置文件中通过 OpenResty 定义的指令区域直接编写 Lua 语法命令,也可以通过引用方式调用外部 Lua 脚本文件。

OpenResty 提供了很多非常实用的 Nginx 模块和 Lua 支持库,模块说明如下表所示。

模块文件夹名 模块说明
array-var-nginx-module 一个 Nginx 模块,向 Nginx 配置文件添加对数组类型变量的支持
drizzle-nginx-module 实现与 MySQL 或 Drizzle 数据库的代理连接支持
echo-nginx-module 该模块封装了大量 Nginx 内部 API,用于流式输入和输出、并行/顺序子请求、定时器和休眠,以及各种元数据访问
encrypted-session-nginx-module 该模块为基于 Mac 系统的 AES-256,为 Nginx 变量提供加密和解密支持
form-input-nginx-module 该模块读取编码为 application/x-www-form-urlencoded 的 HTTP POST 和 PUT 请求体,并将请求体中的参数解析为 Nginx 变量
headers-more-nginx-module 该模块允许用户添加、设置或清除指定响应或请求头
iconv-nginx-module 该模块使用 libiconv 转换不同编码的字符,它既可以处理 Nginx 变量,也可以作为输出过滤器处理响应体
lua-cjson 可为 Lua 提供快速的 JSON 解析和编码支持
lua-rds-parser 该 Lua 库可以用于将由 Drizzle Nginx 模块和 Postgres Nginx 模块生成的 Resty-DBD-Stream 流格式的数据解析为 Lua 数据结构
lua-redis-parser 该 Lua 库实现了一个精简而快速的将 Redis Raw 格式解析为 Lua 数据结构的解析器,同时还构造了一个 Redis Raw 格式请求函数
lua-resty-core 使用 LuaJIT FFI 实现的 Lua Nginx 模块 Lua API
lua-resty-dns 基于 Lua Nginx 模块 cosocket API 的非阻塞域名解析支持库
lua-resty-limit-traffic 用于限制和控制流量的 Lua 支持库
lua-resty-lock 该 Lua 库基于 Lua Nginx 模块的共享内存字典实现了一个简单的非阻塞互斥锁 API,主要用于消除 dog-pile effects
lua-resty-lrucache Lua-land LRU 缓存支持库
lua-resty-memcached 基于 Lua Nginx 模块 cosocket API 的 Lua Memcached 客户端驱动支持库
lua-resty-mysql 基于 Lua Nginx 模块 cosocket API 的 Lua MySQL 客户端驱动支持库
lua-resty-redis 基于 Lua Nginx 模块 cosocket API 的 Lua Redis 客户端驱动支持库
lua-resty-shell 该支持库可以实现通过 Lua 调用 shell 脚本的支持
lua-resty-signal 该支持库用于向 UNIX 进程发送信号
lua-resty-string 为 Lua Nginx 模块提供字符串实用程序和公共哈希函数的 Lua 库
lua-resty-upload 基于 Lua Nginx 模块 cosocket API 的 HTTP 文件上传流式阅读器和解析器支持库
lua-resty-upstream-healthcheck Nginx 上游服务器运行状况的主动检查支持库
lua-resty-websocket 基于 Lua Nginx 模块 cosocket API 的非阻塞 WebSocket 服务器和非阻塞 WebSocket 客户端支持库
lua-tablepool 基于 LuaJIT 的 Lua 表格资源回收池支持库
memc-nginx-module 该模块扩展了标准的 Memcached 模块,几乎支持全部 Memcached ASCII 协议,它允许用户为 Memcached 服务器定义一个 Rest 接口,
通过子请求或独立的伪请求在 Nginx 服务器中以非常高效的方式访问 Memcached 服务器
ngx_coolkit 该模块是一些小的、有用的 Nginx 附加组件集合
ngx_devel_kit 该模块旨在以其为基础为其他模块提供扩展 Nginx Web 服务器的核心功能支持
ngx_lua_upstream 该模块向 Lua Nginx 模块公开了一个 Lua API,用于 Nginx 上游服务器的操作
ngx_stream_lua Nginx Stream 代理的 Lua 脚本支持模块
opm OpenResty 的包管理工具
rds-csv-nginx-module 该 Lua 库可以用于将由 Drizzle Nginx 模块和 Postgres Nginx 模块生成的 Resty-DBD-Stream 流格式的数据解析为 CSV 数据结构
rds-json-nginx-module 该 Lua 库可以用于将由 Drizzle Nginx 模块生成的 Resty-DBD-Stream 流格式的数据解析为 JSON 数据结构
redis2-nginx-module 该模块使 Nginx 以非阻塞的方式与 Redis 2.x 服务器通信,已经完整地实现 Redis 2.0 协议支持,包括 Redis pipelining 支持
redis-nginx-module 该模块使 Nginx 以非阻塞的方式与 Redis 2.x 服务器通信,且与标准的 ngx_memcached 模块有相似的接口,但是只支持 Redis 的 GET 和 SELECT 命令
resty-cli OpenResty 的命令行实用程序的集合
set-misc-nginx-module 该模块是 Nginx 的 rewrite 模块的功能增强模块,提供了更多的指令
srcache-nginx-module 该模块为 Nginx 提供了一个透明的缓存层,可以用在 Nginx 的任意位置
xss-nginx-module 该模块提供了跨站点 AJAX 支持,目前只支持跨站点的 GET 方法

各模块的详细功能和使用方法请参见官方网站的相关介绍。