ToB企服应用市场:ToB评测及商务社交产业平台

标题: 从零手写实现 nginx-21-modules 模块 [打印本页]

作者: 道家人    时间: 2024-6-13 19:12
标题: 从零手写实现 nginx-21-modules 模块
前言

大家好,我是老马。很高兴遇到你。
我们为 java 开发者实现了 java 版本的 nginx
https://github.com/houbb/nginx4j
如果你想知道 servlet 如那里理的,可以参考我的另一个项目:
手写从零实现简易版 tomcat minicat
手写 nginx 系列

如果你对 nginx 原理感兴趣,可以阅读:
从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?
从零手写实现 nginx-02-nginx 的核心本领
从零手写实现 nginx-03-nginx 基于 Netty 实现
从零手写实现 nginx-04-基于 netty http 出入参优化处理
从零手写实现 nginx-05-MIME范例(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展范例)
从零手写实现 nginx-06-文件夹自动索引
从零手写实现 nginx-07-大文件下载
从零手写实现 nginx-08-范围查询
从零手写实现 nginx-09-文件压缩
从零手写实现 nginx-10-sendfile 零拷贝
从零手写实现 nginx-11-file+range 归并
从零手写实现 nginx-12-keep-alive 毗连复用
从零手写实现 nginx-13-nginx.conf 配置文件介绍
从零手写实现 nginx-14-nginx.conf 和 hocon 格式有关系吗?
从零手写实现 nginx-15-nginx.conf 如何通过 java 剖析处理?
从零手写实现 nginx-16-nginx 支持配置多个 server
从零手写实现 nginx-17-nginx 默认配置优化
从零手写实现 nginx-18-nginx 请求头+响应头操纵
从零手写实现 nginx-19-nginx cors
从零手写实现 nginx-20-nginx 占位符 placeholder
从零手写实现 nginx-21-nginx modules 模块信息概览
从零手写实现 nginx-22-nginx modules 分模块加载优化
从零手写实现 nginx-23-nginx cookie 的操纵处理
从零手写实现 nginx-24-nginx IF 指令
前言

大家好,我是老马。
这一节我们来系统的看一下 nginx 有哪些模块,为我们后续的筹划实现打下基础。
模块概览

Nginx 的配置文件通常由几个差别的模块组成,这些模块定义了服务器的差别方面。以下是一些重要的配置模块:
这些模块通过差别的指令和参数组合,允许管理员风雅地控制Nginx服务器的举动。
配置文件通常以nginx.conf为文件名,并且可以在差别的目次级别上举行分割,以便于管理和维护。
模块

1. Main (全局) 模块

全局模块配置 Nginx 的全局设置,例如工作历程数目、日记路径等。
通常,这些配置位于 Nginx 配置文件的顶部。
  1. worker_processes auto;
  2. error_log /var/log/nginx/error.log;
  3. pid /run/nginx.pid;
复制代码
指令

Nginx Main(全局)模块配置指令及其示例:
指令名称说明示例worker_processes指定工作历程数目。worker_processes auto;error_log配置错误日记路径和日记级别。error_log /var/log/nginx/error.log warn;pid指定存储 Nginx 主历程 PID 的文件路径。pid /run/nginx.pid;worker_rlimit_nofile设置工作历程可打开的最大文件描述符数目。worker_rlimit_nofile 8192;worker_priority设置工作历程的优先级。worker_priority -10;daemon是否以保卫历程方式运行 Nginx。daemon on;master_process是否启用主历程模式。master_process on;user设置 Nginx 历程的用户和组。user www-data;worker_cpu_affinity绑定工作历程到特定 CPU 核心。worker_cpu_affinity auto;worker_shutdown_timeout设置工作历程关闭时的超时时间。worker_shutdown_timeout 10s;timer_resolution设置事件定时器的分辨率。timer_resolution 100ms;include包含其他配置文件。include /etc/nginx/conf.d/*.conf;load_module动态加载 Nginx 模块。load_module modules/ngx_http_geoip_module.so;env设置环境变量。env PATH;
env MY_VARIABLE=value;配置示例

以下是一个包含多个 Main 模块指令的 Nginx 配置示例:
  1. worker_processes auto;                             # 自动配置工作进程数量
  2. error_log /var/log/nginx/error.log warn;           # 错误日志路径和级别
  3. pid /run/nginx.pid;                                # PID 文件路径
  4. worker_rlimit_nofile 8192;                         # 最大文件描述符数量
  5. worker_priority -10;                               # 工作进程优先级
  6. daemon on;                                         # 以守护进程方式运行
  7. master_process on;                                 # 启用主进程模式
  8. user www-data;                                     # 进程用户和组
  9. worker_cpu_affinity auto;                          # 自动绑定工作进程到 CPU 核心
  10. worker_shutdown_timeout 10s;                       # 工作进程关闭超时时间
  11. timer_resolution 100ms;                            # 事件定时器分辨率
  12. include /etc/nginx/conf.d/*.conf;                  # 包含其他配置文件
  13. load_module modules/ngx_http_geoip_module.so;      # 动态加载模块
  14. env PATH;                                          # 设置环境变量
  15. env MY_VARIABLE=value;                             # 设置自定义环境变量
复制代码
通过合理配置这些全局指令,可以优化 Nginx 的性能和稳定性,并确保其在各种操纵系统和硬件环境下的高效运行。
2. Events 模块

Events 模块配置与毗连处理相关的参数,例如每个工作历程允许的最大毗连数。
  1. events {
  2.     worker_connections 1024;
  3.     multi_accept on;
  4.     use epoll;
  5. }
复制代码
Nginx 的 Events 模块用于配置处理事件的相关参数,例如每个工作历程允许的最大毗连数、使用的事件模型等。以下是 Nginx Events 模块的常见配置指令及其示例:
指令名称说明示例worker_connections每个工作历程允许的最大毗连数。worker_connections 1024;multi_accept设置工作历程是否同时担当多个新毗连。multi_accept on;use指定使用的事件驱动模型。use epoll;配置示例

以下是一个包含多个 Events 模块指令的 Nginx 配置示例:
  1. events {
  2.     worker_connections 1024;  # 每个工作进程允许的最大连接数
  3.     multi_accept on;          # 同时接受多个新连接
  4.     use epoll;                # 使用 epoll 事件驱动模型(适用于 Linux)
  5. }
复制代码
指令详细说明

通过合理配置 Events 模块指令,可以优化 Nginx 的事件处理性能,提升服务器在高并发环境下的响应本领。
events 模块可以配置多个吗?

在 Nginx 中,Events 模块本身只能配置一个。
这是因为 Events 模块重要用于配置与事件处理相关的参数,例如工作历程允许的最大毗连数、事件驱动模型等。
这些配置对于整个 Nginx 实例是全局性质的,因此只必要一个 Events 模块来定义这些参数即可。
在 Nginx 的配置文件中,Events 模块通常位于 nginx.conf 文件的顶层,如下所示:
  1. events {
  2.     worker_connections 1024;
  3.     multi_accept on;
  4.     use epoll;
  5. }
复制代码
上述配置示例中,events 块内的指令只能配置一次,且此中的指令影响全部工作历程和毗连处理。
如果必要更多的事件处理配置,通常环境下并不会在同一个配置文件中重复定义 events 块,而是依靠于全局配置的一致性。
因此,答案是:在 Nginx 中,Events 模块本身只能配置一个,用于定义全局的事件处理参数。
3. HTTP 模块

HTTP 模块是最常用的模块,包含 HTTP 服务器和反向署理相关的配置。
  1. http {
  2.     include       mime.types;
  3.     default_type  application/octet-stream;
  4.     log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  5.                       '$status $body_bytes_sent "$http_referer" '
  6.                       '"$http_user_agent" "$http_x_forwarded_for"';
  7.     access_log /var/log/nginx/access.log main;
  8.     sendfile on;
  9.     keepalive_timeout 65;
  10.     # Include server blocks
  11.     include /etc/nginx/conf.d/*.conf;
  12. }
复制代码
nginx http 模块可以配置多个吗?

在 Nginx 配置文件中,每个文件只能包含一个 http 块,用于定义 HTTP 服务器的全局配置。
这个 http 块包含了全部的 server 块,每个 server 块代表一个虚拟主机大概一个 HTTP 服务配置单元。
Nginx HTTP 模块配置指令及其示例:

以下是一些常见的 Nginx HTTP 模块配置指令及其说明:
指令名称说明include包含其他配置文件。default_type设置默认的 MIME 范例。log_format定义日记格式。access_log配置访问日记路径和格式。error_log配置错误日记路径和级别。gzip启用或禁用 Gzip 压缩。gzip_types配置哪些 MIME 范例的响应必要举行 Gzip 压缩。client_max_body_size设置请求体的最大大小。keepalive_timeout配置 Keep-Alive 毗连超时时间。proxy_cache_path配置反向署理的缓存路径和参数。proxy_set_header设置发送给后端服务器的 HTTP 头字段。proxy_pass设置反向署理到后端服务器。root设置请求的根目次。index设置默认的索引文件。try_files配置实验查找文件的规则。error_page配置错误页面。expires设置响应的逾期时间。add_header添加 HTTP 响应头字段。ssl_certificate配置 SSL 证书文件路径。ssl_certificate_key配置 SSL 证书私钥文件路径。ssl_protocols配置支持的 SSL 协议版本。ssl_ciphers配置支持的 SSL 加密算法。server_name配置虚拟主机的域名。listen配置监听的端口和 IP 地址。resolver配置域名剖析器地址。include包含其他配置文件。以下是一个示例 Nginx 配置文件,包含了上述提到的一些常见的 HTTP 模块配置指令:
  1. # 定义全局的 MIME 类型和默认类型
  2. http {
  3.     include       mime.types;
  4.     default_type  application/octet-stream;
  5.     # 定义日志格式
  6.     log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  7.                       '$status $body_bytes_sent "$http_referer" '
  8.                       '"$http_user_agent" "$http_x_forwarded_for"';
  9.     # 配置访问日志
  10.     access_log /var/log/nginx/access.log main;
  11.     # 配置错误日志
  12.     error_log /var/log/nginx/error.log warn;
  13.     # 第一个虚拟主机配置
  14.     server {
  15.         listen       80;
  16.         server_name  example.com www.example.com;
  17.         root /var/www/example.com;
  18.         index index.html index.htm;
  19.         # 配置请求处理规则
  20.         location / {
  21.             try_files $uri $uri/ =404;
  22.         }
  23.         # 配置反向代理
  24.         location /api/ {
  25.             proxy_pass http://backend_server;
  26.             proxy_set_header Host $host;
  27.             proxy_set_header X-Real-IP $remote_addr;
  28.         }
  29.         # 启用 Gzip 压缩
  30.         gzip on;
  31.         gzip_types text/plain application/xml;
  32.     }
  33.     # 第二个虚拟主机配置
  34.     server {
  35.         listen       80;
  36.         server_name  anotherdomain.com;
  37.         root /var/www/anotherdomain.com;
  38.         index index.html index.htm;
  39.         # 配置请求处理规则
  40.         location / {
  41.             try_files $uri $uri/ =404;
  42.         }
  43.         # 配置 SSL
  44.         ssl_certificate /etc/nginx/ssl/anotherdomain.com.crt;
  45.         ssl_certificate_key /etc/nginx/ssl/anotherdomain.com.key;
  46.         ssl_protocols TLSv1.2 TLSv1.3;
  47.         ssl_ciphers HIGH:!aNULL:!MD5;
  48.         # 添加自定义 HTTP 头字段
  49.         add_header X-Frame-Options "SAMEORIGIN";
  50.     }
  51.     # 全局配置
  52.     client_max_body_size 10M;
  53.     keepalive_timeout 65;
  54.     # 配置 HTTP 缓存
  55.     proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
  56. }
复制代码
在这个示例配置文件中:
这个示例展示了如何通过组合使用差别的 Nginx HTTP 模块配置指令,来实现一个具有多个虚拟主机、反向署理、SSL 加密、HTTP 头字段添加、Gzip 压缩和缓存控制的完整的 HTTP 服务器配置。
4. Server 模块

Server 模块配置单个虚拟主机的参数。
它通常包含在 HTTP 模块内。
  1. server {
  2.     listen 80;
  3.     server_name example.com www.example.com;
  4.     root /var/www/html;
  5.     index index.html index.htm;
  6.     location / {
  7.         try_files $uri $uri/ =404;
  8.     }
  9.     error_page 404 /404.html;
  10.     location = /404.html {
  11.         internal;
  12.     }
  13. }
复制代码
nginx server 模块常见的指令表格

以下是一些常见的 Nginx server 模块配置指令及其说明:
指令名称说明listen配置监听的端口和 IP 地址。server_name配置虚拟主机的域名。root设置请求的根目次。index设置默认的索引文件。location定义请求处理的位置块。try_files配置实验查找文件的规则。error_page配置错误页面。access_log配置访问日记路径和格式。error_log配置错误日记路径和级别。ssl_certificate配置 SSL 证书文件路径。ssl_certificate_key配置 SSL 证书私钥文件路径。ssl_protocols配置支持的 SSL 协议版本。ssl_ciphers配置支持的 SSL 加密算法。add_header添加 HTTP 响应头字段。proxy_pass设置反向署理到后端服务器。proxy_set_header设置发送给后端服务器的 HTTP 头字段。proxy_read_timeout配置从后端服务器读取响应的超时时间。proxy_connect_timeout配置与后端服务器创建毗连的超时时间。proxy_send_timeout配置向后端服务器发送请求的超时时间。proxy_buffering启用或禁用反向署理缓冲。proxy_cache启用反向署理缓存。proxy_cache_valid配置反向署理缓存的有用期。proxy_cache_key配置反向署理缓存键。proxy_cache_path配置反向署理缓存路径和参数。limit_req_zone配置请求速率限制区域。limit_conn_zone配置毗连速率限制区域。gzip启用或禁用 Gzip 压缩。gzip_types配置哪些 MIME 范例的响应必要举行 Gzip 压缩。gzip_comp_level配置 Gzip 压缩级别。gzip_min_length配置启用 Gzip 压缩的最小响应长度。gzip_buffers配置 Gzip 压缩使用的缓冲区大小。gzip_disable配置禁用 Gzip 压缩的条件。expires设置响应的逾期时间。add_header添加 HTTP 响应头字段。error_page配置错误页面。这些指令允许管理员在每个 server 块中配置特定虚拟主机的举动,从基本的请求处理到高级的署理、安全和性能调优配置。
通过合理配置这些指令,可以实现丰富的功能和机动的服务器举动定制。
nginx server 模块常见的配置例子

以下是一个简单的 Nginx server 模块的配置例子,展示了如何配置一个基本的静态文件服务器:
  1. server {
  2.     listen 80;  # 监听端口
  3.     server_name example.com www.example.com;  # 设置虚拟主机的域名
  4.     root /var/www/example.com;  # 设置根目录
  5.     index index.html index.htm;  # 设置默认的索引文件
  6.     access_log /var/log/nginx/example.access.log;  # 配置访问日志
  7.     error_log /var/log/nginx/example.error.log;    # 配置错误日志
  8.     location / {
  9.         try_files $uri $uri/ =404;  # 配置请求处理规则
  10.     }
  11.     location /images/ {
  12.         # 反向代理到另一个服务器的示例
  13.         proxy_pass http://backend_server;
  14.         proxy_set_header Host $host;
  15.         proxy_set_header X-Real-IP $remote_addr;
  16.     }
  17.     # 启用 Gzip 压缩
  18.     gzip on;
  19.     gzip_types text/plain application/xml;
  20.     # 添加自定义 HTTP 响应头
  21.     add_header X-Frame-Options "SAMEORIGIN";
  22.     # 设置 SSL 配置示例
  23.     ssl_certificate /etc/nginx/ssl/example.com.crt;
  24.     ssl_certificate_key /etc/nginx/ssl/example.com.key;
  25.     ssl_protocols TLSv1.2 TLSv1.3;
  26.     ssl_ciphers HIGH:!aNULL:!MD5;
  27. }
复制代码
在这个例子中:
这个配置示例展示了一个基本的 Nginx HTTP 服务器配置,包括静态文件服务、反向署理、Gzip 压缩、自定义响应头、SSL 配置等功能。
根据实际需求,可以进一步调整和扩展这些配置来满足特定的应用场景和安全要求。
5. Location 模块

Location 模块用于定义请求路径和处理方法。
  1. location /images/ {
  2.     root /data;
  3. }
  4. location / {
  5.     proxy_pass http://backend;
  6.     proxy_set_header Host $host;
  7.     proxy_set_header X-Real-IP $remote_addr;
  8.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. }
复制代码
nginx location 常见的指令表格

在 Nginx 的 location 块中,常见的配置指令用于定义请求的处理规则和举动。以下是一些常见的 Nginx location 块配置指令及其说明:
指令名称说明alias定义请求的路径别名。root设置请求的根目次。try_files配置实验查找文件的规则。index设置默认的索引文件。rewrite定义重写规则。return定义返回响应码和重定向。error_page配置错误页面。expires设置响应的逾期时间。limit_req配置请求速率限制。limit_conn配置毗连速率限制。proxy_pass设置反向署理到后端服务器。proxy_set_header设置发送给后端服务器的 HTTP 头字段。proxy_read_timeout配置从后端服务器读取响应的超时时间。proxy_connect_timeout配置与后端服务器创建毗连的超时时间。proxy_send_timeout配置向后端服务器发送请求的超时时间。proxy_buffering启用或禁用反向署理缓冲。proxy_cache启用反向署理缓存。proxy_cache_valid配置反向署理缓存的有用期。proxy_cache_key配置反向署理缓存键。proxy_cache_path配置反向署理缓存路径和参数。fastcgi_pass设置 FastCGI 后端服务器。fastcgi_param设置通报给 FastCGI 服务器的参数。uwsgi_pass设置 uWSGI 后端服务器。scgi_pass设置 SCGI 后端服务器。grpc_pass设置 gRPC 后端服务器。include包含其他配置文件。这些指令允许管理员在 location 块中配置特定请求路径的处理规则,包括路径重写、缓存控制、反向署理、FastCGI、uWSGI、SCGI 等 CGI 协议支持,以及各种请求速率和毗连速率的限制。配置文件中可以根据详细需求组合和使用这些指令,以实现复杂的请求路由和后端服务集成。
nginx location 常见的配置例子

以下是一些常见的 Nginx location 块配置示例,展示了差别环境下如何配置详细的请求处理规则:
静态文件服务
  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.     root /var/www/example.com;
  5.     index index.html index.htm;
  6.     location / {
  7.         try_files $uri $uri/ =404;
  8.     }
  9.     location /images/ {
  10.         alias /var/www/images/;
  11.     }
  12. }
复制代码
反向署理
  1. server {
  2.     listen 80;
  3.     server_name api.example.com;
  4.     location / {
  5.         proxy_pass http://backend_server;
  6.         proxy_set_header Host $host;
  7.         proxy_set_header X-Real-IP $remote_addr;
  8.     }
  9. }
复制代码
FastCGI 服务
  1. server {
  2.     listen 80;
  3.     server_name php.example.com;
  4.     root /var/www/php.example.com;
  5.     index index.php;
  6.     location ~ \.php$ {
  7.         include fastcgi_params;
  8.         fastcgi_pass unix:/var/run/php-fpm.sock;
  9.         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  10.     }
  11. }
复制代码
缓存控制
  1. server {
  2.     listen 80;
  3.     server_name static.example.com;
  4.     root /var/www/static.example.com;
  5.     index index.html;
  6.     location / {
  7.         expires 1d;
  8.     }
  9. }
复制代码
HTTPS 配置
  1. server {
  2.     listen 443 ssl;
  3.     server_name secure.example.com;
  4.     ssl_certificate /etc/nginx/ssl/secure.example.com.crt;
  5.     ssl_certificate_key /etc/nginx/ssl/secure.example.com.key;
  6.     location / {
  7.         # HTTPS 配置的具体内容
  8.     }
  9. }
复制代码
这些示例展示了在差别场景下如何配置 Nginx 的 location 块,以实现静态文件服务、反向署理、FastCGI、缓存控制和 HTTPS 安全设置等功能。
根据详细需求,可以进一步调整和扩展这些配置来满足特定的应用场景和安全要求。
6. Upstream 模块

Upstream 模块配置负载均衡和反向署理的后端服务器组。
  1. upstream backend {
  2.     server backend1.example.com;
  3.     server backend2.example.com;
  4. }
复制代码
nginx Upstream 模块指令表格

在 Nginx 中,Upstream 模块用于定义一组后端服务器,常用于负载均衡和反向署理配置。
以下是一些常见的 Nginx Upstream 模块配置指令及其说明:
指令名称说明upstream定义一个上游服务器组。server定义单个上游服务器。weight设置服务器的权重,用于负载均衡。max_fails设置在服务器被标记为不可用前允许的最大失败次数。fail_timeout设置在服务器被标记为不可用多长时间后实验重新启用的时间。backup指定服务器为备份服务器,只有在全部非备份服务器失败时才会使用。down标记服务器为永世不可用,不会实验与其创建毗连。keepalive设置与上游服务器的 keepalive 毗连参数。zone设置共享内存区域以跟踪上游服务器的状态。hash根据指定的键值对请求举行散列分配。ip_hash根据客户端 IP 地址举行散列分配。least_conn选择活跃毗连数最少的服务器举行请求分发。这些指令允许管理员配置上游服务器组的各种参数,包括负载均衡策略、健康检查、备份服务器、毗连保持等。
通过合理配置 Upstream 模块,可以实现高可用性、负载均衡和性能优化的反向署理服务。
nginx Upstream 模块配置例子

以下是一个简单的 Nginx Upstream 模块的配置例子,演示了如何定义一组后端服务器并举行负载均衡配置:
  1. http {
  2.     upstream backend_servers {
  3.         server backend1.example.com weight=3;
  4.         server backend2.example.com:8080 max_fails=3 fail_timeout=30s;
  5.         server 192.168.1.100:8080 backup;
  6.         server unix:/var/run/backend3.sock;
  7.         keepalive 32;
  8.     }
  9.     server {
  10.         listen 80;
  11.         server_name example.com;
  12.         location / {
  13.             proxy_pass http://backend_servers;
  14.             proxy_set_header Host $host;
  15.             proxy_set_header X-Real-IP $remote_addr;
  16.         }
  17.     }
  18. }
复制代码
在上述配置中,Nginx 将通过 proxy_pass 指令将全部来自 example.com 的请求署理到 backend_servers 组中的后端服务器。
通过合理配置权重、失败处理和备份服务器,可以实现高可用性和负载均衡,确保应用在各种条件下的稳定运行。
7. Stream 模块

Stream 模块用于配置 TCP/UDP 署理服务。
  1. stream {
  2.     upstream backend {
  3.         server backend1.example.com:12345;
  4.         server backend2.example.com:12345;
  5.     }
  6.     server {
  7.         listen 12345;
  8.         proxy_pass backend;
  9.     }
  10. }
复制代码
nginx stream 模块的指令表格

Nginx 的 Stream 模块用于处理 TCP 和 UDP 流量,例如用于署理和负载均衡非 HTTP 流量。
以下是一些常见的 Nginx Stream 模块配置指令及其说明:
指令名称说明stream定义一个 TCP 或 UDP 署理服务器。server定义一个 TCP 或 UDP 服务器块。listen配置监听的 IP 地址和端口。proxy_pass设置反向署理到后端服务器。proxy_timeout配置与后端服务器的超时时间。proxy_connect_timeout配置与后端服务器创建毗连的超时时间。proxy_send_timeout配置向后端服务器发送数据的超时时间。proxy_read_timeout配置从后端服务器读取数据的超时时间。proxy_protocol启用或禁用署理协议支持。ssl_preread启用 SSL 预读取用于 TCP 和 UDP 署理。allow定义允许毗连的 IP 地址或地址范围。deny定义拒绝毗连的 IP 地址或地址范围。limit_conn配置并发毗连数限制。limit_rate配置限制毗连速率。zone配置共享内存区域以跟踪毗连状态。resolver配置域名剖析器地址。这些指令允许管理员配置 Nginx Stream 模块用于处理 TCP 或 UDP 流量的各种举动,包括署理、超时控制、SSL 预读取、访问控制、限速等。
通过合理配置这些指令,可以实现非 HTTP 流量的反向署理、负载均衡和安全控制。
nginx stream 模块的常见配置例子

以下是一个简单的 Nginx Stream 模块的配置例子,演示了如何配置 TCP 和 UDP 署理服务器:
TCP 署理
  1. stream {
  2.     upstream backend_servers {
  3.         server backend1.example.com:12345;
  4.         server backend2.example.com:12345;
  5.     }
  6.     server {
  7.         listen 12345;
  8.         proxy_pass backend_servers;
  9.         proxy_timeout 3s;
  10.     }
  11. }
复制代码
UDP 署理
  1. stream {
  2.     server {
  3.         listen 12345 udp;
  4.         proxy_pass backend_server;
  5.         proxy_timeout 3s;
  6.         proxy_responses 1;
  7.     }
  8. }
复制代码
这些示例展示了如何配置 Nginx Stream 模块来处理 TCP 和 UDP 流量的署理功能。
通过合理配置 upstream 和 server 块,可以实现 TCP 和 UDP 请求的负载均衡、超时控制和安全性。
小结

看的出来,nginx 的模块非常强大。
我们实现的时候,还是要分清主次,依次处理。
我是老马,期待与你的下次重逢。
开源地址

为了便于大家学习,已经将 nginx 开源
https://github.com/houbb/nginx4j

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4