Nginx知识点汇总表格总结

Nginx在web应用中非常广泛,尤其是现在前后端分离项目中,前端的项目打包之后一般都习惯部署在Nginx下,方便利用Nginx做静态资源的缓存处理,动静分离,以及做反向代理,负载均衡,以及其他安全方面的限制,Nginx功能非常强大,前后端程序员都需要掌握。

目录

1、Nginx的基本概念

2.Nginx的安装与配置

[3. Nginx配置反向代理](#3. Nginx配置反向代理)

4.Nginx的缓存配置

5.Ngiinx的日志管理

6.Nginx的安全设置

7.Nginx的性能优化

[8. Nginx的邮件代理设置](#8. Nginx的邮件代理设置)

9.Nginx的web服务性能监控

10.Nginx的模块系统

11.Nginx的高可用性配置

[12. Nginx的SSL和TLS配置](#12. Nginx的SSL和TLS配置)

13.Nginx的Websocket支持的配置

14.Nginx的限流和防DDos攻击

15.Nginx的URL重写和重定向

16.Nginx的地理ip定位

17.Nginx的缓存防篡改和验证

18.Nginx的限流策略

[19. Nginx的监控和调试](#19. Nginx的监控和调试)

[20. Nginx的高级配置和优化策略](#20. Nginx的高级配置和优化策略)

[21. Nginx的容器化部署](#21. Nginx的容器化部署)

22.Nginx的模块开发与自定义


1、Nginx的基本概念
知识点 描述 示例
Nginx 简介 Nginx是一个高性能的HTTP服务器和反向代理,也是一个IMAP/POP3/SMTP代理服务器。 Nginx通常用于负载均衡、反向代理、静态文件服务等。
特点 高并发、高稳定性、低资源消耗。 Nginx能够支持数万并发连接,而资源消耗相对较低。
配置文件 Nginx的配置文件通常分为几个部分,包括main、events、http等。 配置文件通常位于/etc/nginx/nginx.conf
2.Nginx的安装与配置
知识点 描述 示例
安装Nginx Nginx可以在多种操作系统上安装,包括Linux、macOS和Windows。 使用包管理器(如apt、yum)或从源代码编译安装。
配置文件结构 Ngginx的配置文件由指令和指令块组成,指令块可以嵌套。 server块是配置文件中用于定义服务器配置的指令块。
基本配置 包括服务器块、监听端口、服务器名称等。 server { listen 80; server_name example.com; }
默认网站配置 设置网站的默认页面,如index.html。 location / { root /usr/share/nginx/html; index index.html index.htm; }
配置SSL 为HTTPS配置SSL证书和密钥。 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;
3. Nginx配置反向代理
知识点 描述 示例
反向代理 Nginx可以作为反向代理服务器,将客户端的请求转发给后端服务器。 通过proxy_pass指令实现。
静态资源代理 用于加速静态资源的加载。 `location ~* .(jpg
上游服务器配置 定义后端服务器的地址和负载均衡策略。 upstream backend { server 192.168.1.100:8080; }
负载均衡 Nginx支持轮询、IP哈希等负载均衡方法。 upstream backend { server backend1; server backend2; }
HTTP头部转发 确保客户端的HTTP头部信息被传递给后端服务器。 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
HTTPS反向代理 配置SSL加密的反向代理。 server { listen 443 ssl; ssl_certificate cert.pem; ssl_certificate_key key.pem; proxy_pass https://backend; }
4.Nginx的缓存配置
知识点 描述 示例
缓存类型 Nginx支持多种缓存类型,包括磁盘缓存和内存缓存。 磁盘缓存使用proxy_cache_path指令,内存缓存使用共享内存区。
缓存路径配置 指定缓存文件的存储位置和索引文件。 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
缓存策略 定义哪些响应可以被缓存,以及缓存的有效期。 proxy_cache my_cache; proxy_cache_valid 200 302 10m;
缓存命中和未命中 控制缓存命中和未命中时的行为。 proxy_cache_bypass $arg_no_cache;
缓存锁定 防止同时从后端服务器获取相同的资源。 proxy_cache_lock on;
缓存清除 提供清除缓存的方法。 使用purge模块,如`location ~ /purge(/
5.Ngiinx的日志管理
知识点 描述 示例
访问日志 记录客户端请求的详细信息。 默认情况下,访问日志位于/var/log/nginx/access.log
错误日志 记录Nginx运行时的错误信息。 默认错误日志位于/var/log/nginx/error.log
自定义日志格式 定义自定义的日志格式以满足特定的需求。 log_format myformat '$http_user_agent --- $remote_addr --- $remote_user [$time_local] "$request" $status $body_bytes_sent';
日志分割 根据时间或大小自动分割日志文件。 使用logrotate工具进行日志分割。
日志权限 设置日志文件的权限,以保证安全性。 使用chownchmod命令设置日志文件权限。
日志缓冲 控制日志的写入方式,减少磁盘I/O。 access_log /var/log/nginx/access.log buffer=16k flush=1m;
6.Nginx的安全设置
知识点 描述 示例
防止目录列表 禁用目录浏览,防止敏感信息泄露。 autoindex off;
限制访问 限制特定IP或IP范围的访问。 allow 192.168.1.0/24; deny all;
HTTPS强制跳转 强制所有HTTP请求通过HTTPS。 if ($http_x_forwarded_proto != 'https') { return 301 https://$host$request_uri; }
配置SSL 使用SSL/TLS加密流量,提高安全性。 ssl on; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;
禁用SSL弱加密 禁用不安全的SSL/TLS协议和密码套件。 ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on;
配置HSTS HTTP Strict Transport Security,强制客户端始终通过HTTPS连接。 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;";
7.Nginx的性能优化
知识点 描述 示例
连接超时 设置连接超时时间,优化连接效率。 proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90;
压缩设置 启用压缩,减少传输数据量。 gzip on; gzip_types text/plain text/css text/xml application/json;
静态资源优化 缓存和压缩静态资源,提高加载速度。 `location ~* .(jpg
客户端缓冲区 控制客户端缓冲区的大小,优化响应速度。 proxy_buffer_size 4k; proxy_buffers 4 32k;
禁用不必要的日志 减少不必要的日志记录,提高性能。 access_log off;
禁用本地解析 避免DNS查询导致的延迟。 set_real_ip_from 192.168.1.0/24; real_ip_header X-Forwarded-For;
8. Nginx的邮件代理设置
知识点 描述 示例
IMAP/POP3代理 Nginx可以作为IMAP/POP3的代理服务器。 使用imappop3指令配置代理。
SMTP代理 Nginx可以作为SMTP的代理服务器,转发邮件。 使用smtp指令配置代理。
SSL邮件代理 配置SSL加密的邮件代理服务。 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;
邮件代理认证 配置邮件代理的认证机制。 使用auth_http指令实现认证。
邮件代理日志 记录邮件代理的请求和错误信息。 error_log /var/log/nginx/mail_error.log debug;
邮件代理性能 优化邮件代理的性能,如连接超时设置。 proxy_connect_timeout 5s; proxy_send_timeout 5s; proxy_read_timeout 5s;

注意,Nginx主要被用作Web服务器和反向代理,其邮件代理功能并不常用,且通常由专门的邮件服务器软件(如Postfix、Dovecot)来提供。

9.Nginx的web服务性能监控
知识点 描述 示例
启用访问日志 记录所有HTTP请求的详细信息,用于监控和分析。 默认情况下,访问日志位于/var/log/nginx/access.log
启用错误日志 记录服务器错误和潜在问题,有助于故障排查。 默认错误日志位于/var/log/nginx/error.log
使用第三方模块 利用如ngx_http_stub_status_module等第三方模块来监控性能。 http { include /path/to/status/status.conf; }
实时性能监控 通过实时监控工具(如Nginx Plus中的ngx_http_status_module)获取性能指标。 location /status { stub_status on; access_log off; }
日志分析工具 使用如GoAccess、AWStats等日志分析工具来解析和可视化访问日志。 goaccess /var/log/nginx/access.log
性能基准测试 使用工具如Apache JMeter、ab(Apache Bench)进行压力测试和性能基准测试。 使用ab -n 1000 -c 100 http://example.com/进行测试
10.Nginx的模块系统
知识点 描述 示例
模块类型 Nginx的模块分为几种类型,包括核心模块、基础模块、HTTP模块、Mail模块等。 核心模块是Nginx功能的基础,如ngx_core_module。
配置模块 通过配置文件中的指令块来配置模块的行为。 如使用http块配置HTTP模块。
加载模块 模块可以在编译Nginx时静态编译进去,也可以运行时动态加载。 使用load_module指令加载动态模块。
第三方模块 除了Nginx官方提供的模块外,还有许多第三方模块可供使用。 如使用ngx_http_gzip_module模块启用Gzip压缩。
模块开发 开发者可以编写自己的模块来扩展Nginx的功能。 需要了解Nginx的模块开发API和框架。
模块调试 调试模块时可以使用Nginx的日志功能,或者使用专门的调试工具。 使用error_log指令设置日志级别。
11.Nginx的高可用性配置
知识点 描述 示例
负载均衡 Nginx可以作为负载均衡器,将流量分发到多个后端服务器。 使用upstream指令定义服务器组,并配置负载均衡策略。
健康检查 通过健康检查确保流量只会被转发到健康的后端服务器。 使用proxy_next_upstream指令实现健康检查。
会话持久性 确保来自同一客户端的请求始终被转发到同一个后端服务器。 使用ip_hash指令实现会话持久性。
故障转移 当一个后端服务器失败时,自动将流量转移到其他服务器。 通过upstream块中的fail_timeout参数实现。
集群部署 在多个Nginx实例之间实现高可用性,通常结合使用如Keepalived等工具。 使用VRRP协议实现Nginx的高可用性。
热备份 实现无感知的故障转移,确保服务的连续性。 使用nginx -s reload进行配置的热更新。
12. Nginx的SSL和TLS配置
知识点 描述 示例
SSL证书配置 配置SSL证书和私钥,启用HTTPS。 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;
密码套件配置 设置密码套件优先级,禁用不安全的密码套件。 ssl_prefer_server_ciphers on; ssl_protocols TLSv1.2 TLSv1.3;
证书链配置 配置完整的证书链,包括中间证书。 ssl_trusted_certificate /path/to/ca-bundle.pem;
OCSP Stapling 配置在线证书状态协议(OCSP)固定,减少证书验证时间。 ssl_stapling on; ssl_stapling_verify on;
会话缓存和票据 配置SSL会话缓存和票据,提高性能。 ssl_session_cache shared:SSL:10m; ssl_session_tickets off;
TLS重握手 防止特定条件下的TLS重握手攻击。 ssl_session_timeout 1h;
13.Nginx的Websocket支持的配置
知识点 描述 示例
Websocket 支持 Nginx支持作为Websocket服务的代理。 使用proxy_http_version 1.1; 启用Websocket支持。
Websocket 代理 将Websocket请求转发到后端服务器。 location /websocket/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
Websocket 持久连接 保持Websocket连接活跃。 proxy_set_header Connection "";
Websocket 子协议 支持Websocket子协议。 proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
Websocket 性能 优化Websocket代理的性能。 调整缓冲区大小和延迟参数,例如:proxy_buffers 8 4k; proxy_buffer_size 2k;
Websocket 安全 配置SSL/TLS加密Websocket连接。 与SSL配置类似,确保使用wss://协议。
14.Nginx的限流和防DDos攻击
知识点 描述 示例
限流 限制客户端的请求频率,防止滥用。 使用limit_req模块进行请求频率限制。
防DDoS攻击 通过限制单个IP的连接数和请求频率来减轻DDoS攻击的影响。 使用limit_connlimit_req模块。
SYN Floods 保护 配置TCP参数以减轻SYN Floods攻击。 通过调整操作系统的TCP参数来实现。
IP黑名单 阻止特定IP地址的访问。 使用deny指令在配置文件中设置黑名单。
白名单 允许特定IP地址的访问,而拒绝其他所有访问。 使用allowdeny指令组合使用。
连接队列 限制等待连接队列的长度。 使用listen指令的backlog参数。
15.Nginx的URL重写和重定向
知识点 描述 示例
URL重写 用于改变请求的URI,而不改变请求方法。 使用rewrite指令实现URL重写。
重定向 将请求从一个URI重定向到另一个URI,并改变请求方法为GET。 使用return指令进行301或302重定向。
正则表达式 在URL重写和重定向中使用正则表达式匹配特定的模式。 rewrite ^oldpath/(.*)$ /newpath/$1 permanent;
重定向到HTTPS 将所有HTTP请求重定向到HTTPS。 if ($http_x_forwarded_proto != 'https') { return 301 https://$host$request_uri; }
路径别名 使用别名重写URL路径,指向不同的文件系统路径。 rewrite ^/path/(.*)$ /alias/$1 break;
重定向规则优先级 指定重定向和重写的优先级,确保正确处理请求。 使用iftry_files指令确定请求处理顺序。
16.Nginx的地理ip定位
知识点 描述 示例
地理IP模块 Nginx可以使用地理IP模块根据客户端IP地址定位其地理位置。 使用geo指令根据IP地址进行地理位置匹配。
地理位置数据库 需要一个IP地址到地理位置的映射数据库。 可以使用MaxMind的GeoLite数据库。
基于位置的路由 根据客户端的地理位置将请求路由到不同的后端服务器。 geo $location { default "international"; include /path/to/geoip.conf; }
语言定向 根据用户所在地区提供不同语言的版本。 使用ifgeo指令结合语言版本提供。
访问限制 根据地理位置限制或允许某些区域的访问。 使用allowdeny指令基于地理位置进行访问控制。
性能考虑 使用地理IP定位可能会影响性能,需要合理配置以减少延迟。 使用高效的查找算法和缓存策略
17.Nginx的缓存防篡改和验证
知识点 描述 示例
缓存验证 确保缓存内容与原始服务器内容保持一致,防止缓存数据被篡改。 使用proxy_cache_valid指令设置缓存响应的验证时机和状态码。
缓存锁定 防止在缓存数据还未完全写入磁盘时,另一个请求又从上游服务器获取相同资源。 使用proxy_cache_lock指令启用缓存锁定,以同步对缓存文件的访问。
缓存过期 控制缓存内容的生命周期,确保内容的及时更新或重新验证。 使用expires指令设置静态资源的过期时间,或者通过proxy_cache_valid指令设置缓存的有效时间。
缓存刷新 提供一种机制来刷新或清除缓存中的特定内容,以响应内容更新。 使用purge指令清除缓存,通常与第三方模块如ngx_cache_purge结合使用。
缓存重试 当后端服务不可用时,设置重试逻辑以提高获取缓存内容的成功率。 使用proxy_next_upstream指令定义重试逻辑,如proxy_next_upstream error timeout
缓存安全性 确保缓存数据的安全性,防止未授权访问或敏感数据泄露。 通过合理的权限设置、网络隔离以及使用安全的传输层协议(如TLS)增强缓存的安全性。
18.Nginx的限流策略
知识点 描述 示例
限流基本概念 限流是控制进入系统的请求数量,以保护系统不被过载。 使用limit_reqlimit_conn模块来实现限流。
请求频率限制 限制单个客户端在特定时间内可以发起的请求数量。 limit_req zone=req_limit burst=5 nodelay;
连接数限制 限制单个客户端可以同时保持的连接数。 limit_conn zone=conn_limit;
漏桶算法 一种流行的限流算法,平滑处理请求流量。 Nginx的limit_req模块使用漏桶算法。
令牌桶算法 另一种限流算法,允许一定程度的突发请求。 可以通过自定义模块或第三方模块实现。
基于IP的限流 根据客户端IP地址进行限流。 使用$binary_remote_addr作为limit_req的键。
基于用户名的限流 对特定的用户名或会话进行限流。 可以结合认证模块,使用用户标识作为限流键。
19. Nginx的监控和调试
知识点 描述 示例
日志级别 Nginx提供了不同的日志级别,用于记录不同严重性的信息。 error_log指令可以设置日志级别,如debuginfonoticewarnerrorcritalertemerg
调试日志 在开发和调试过程中,可以使用更高级别的日志记录来获取详细信息。 设置error_logdebug级别以获取详细日志。
性能监控 使用工具和模块来监控Nginx的性能指标,如请求处理时间、活跃连接数等。 利用OpenResty、ngx_http_stub_status_module等工具。
请求跟踪 跟踪单个请求的完整处理过程,以便于调试。 可以通过增加日志记录的详细程度来实现请求跟踪。
核心转储 当Nginx发生故障时,生成核心转储文件,用于后续分析。 使用操作系统工具如gdb分析核心转储文件。
性能分析 使用性能分析工具来识别瓶颈和优化点。 使用ab(Apache Bench)、 siegewrk等工具进行压力测试。
20. Nginx的高级配置和优化策略
知识点 描述 示例
优化文件描述符 调整Nginx和操作系统的文件描述符限制,以支持更多并发连接。 在Nginx配置中使用worker_rlimit_nofile指令。
优化网络参数 调整TCP缓冲区大小和连接超时设置,减少网络延迟。 sysctl配置中调整网络相关参数。
使用SSL/TLS优化 SSL/TLS可能会增加延迟,通过启用SSL会话缓存和Ticket机制来优化。 使用ssl_session_cachessl_session_tickets指令。
优化内存使用 通过调整缓冲区大小和数量,减少内存占用。 使用proxy_buffersclient_header_buffer_size指令。
优化静态资源服务 通过配置静态资源的缓存和压缩,提高响应速度。 使用expiresgzipsendfile指令。
优化数据库代理 减少数据库查询次数,使用缓存和索引优化数据库代理性能。 根据后端数据库的性能调整Nginx的代理配置。
21. Nginx的容器化部署
知识点 描述 示例
Docker部署 Nginx可以在Docker容器中运行,实现快速部署和隔离。 使用官方Nginx Docker镜像或自定义Dockerfile构建镜像。
Kubernetes部署 在Kubernetes集群中部署Nginx,实现自动扩展和自我修复。 使用Kubernetes部署和服务对象配置Nginx。
配置卷 在容器中使用卷来挂载外部配置文件和证书。 在Docker容器中使用-v参数挂载配置卷。
健康检查 实现容器化Nginx的健康检查,确保负载均衡器只转发给健康的实例。 在Kubernetes中使用Liveness和Readiness探针。
资源限制 在容器中设置资源限制,避免Nginx占用过多系统资源。 在Docker中使用--memory参数设置内存限制。
日志管理 容器化部署中需要合理管理日志,以便监控和分析。 将容器日志输出到第三方日志系统,如ELK堆栈。
22.Nginx的模块开发与自定义
知识点 描述 示例
模块开发基础 Nginx模块开发需要熟悉Nginx的API和模块框架。 学习Nginx的模块编写指南和示例代码。
配置指令 开发模块时可以定义新的配置指令,供用户在配置文件中使用。 使用ngx_command_t结构定义指令。
处理HTTP请求 编写模块以处理HTTP请求,可以介入请求的读取、处理和响应过程。 使用ngx_http_request_t结构处理请求。
阶段处理器 Nginx模块可以设置不同的阶段处理器,如访问阶段、内容阶段等。 使用ngx_http_phases定义阶段处理器。
模块依赖 模块之间可能存在依赖关系,需要在配置中声明。 使用ngx_module_t结构体中的ctxindex字段声明依赖。
编译和测试 开发完成后,需要编译并测试模块以确保其正确性。 使用Nginx的./configuremake命令编译模块。
模块签名 为了安全性,自定义模块可以进行签名,以便在Nginx中验证。 使用SSL签名机制对模块进行签名。

最后给个基本的配置文件示例作为参考吧:

bash 复制代码
# 用户和用户组
user nginx;

# 启动的worker进程数,通常设置为CPU核心数
worker_processes auto;

# 错误日志的路径和日志级别
error_log /var/log/nginx/error.log warn;

# PID文件存放的位置
pid /var/run/nginx.pid;

# 事件模块配置
events {
    worker_connections 1024;
}

# HTTP服务器配置
http {
    # 文件扩展名与文件类型映射
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # 日志格式定义
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # 访问日志的路径
    access_log  /var/log/nginx/access.log  main;

    # 开启高效文件传输模式
    sendfile       on;
    # 防止网络阻塞时,发送延迟
    tcp_nopush     on;
    # 防止网络阻塞时,发送堆叠
    tcp_nodelay    on;

    # 连接超时时间
    keepalive_timeout  65;

    # Gzip压缩设置
    gzip  on;
    gzip_disable "msie6";

    # 包含Nginx的SSL配置文件
    include /etc/nginx/ssl.conf;

    # 包含Nginx的代理设置文件
    include /etc/nginx/proxy.conf;

    # 包含Nginx的缓存配置文件
    include /etc/nginx/cache.conf;

    # 包含Nginx的额外配置文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

# 邮件服务器配置
mail {
    # (Mail server configuration is not shown)
}

# 流式配置
stream {
    # (Stream configuration is not shown)
}
相关推荐
SunTecTec17 分钟前
Linux grep -r 查找依赖包是否存在依赖类 Class
linux·运维·服务器
Javis2111 小时前
【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现
linux·运维·php
FBI HackerHarry浩1 小时前
Linux云计算训练营笔记day10(MySQL数据库)
linux·运维·数据库·笔记·mysql
掘金-我是哪吒2 小时前
分布式微服务系统架构第134集:笔记1运维服务器经验,高并发,大数据量系统
运维·笔记·分布式·微服务·系统架构
无证驾驶梁嗖嗖3 小时前
ubuntu22鼠键失灵恢复记录笔记chatgpt解决
运维
带鱼吃猫3 小时前
Linux系统:ext2文件系统的核心概念和结构
linux·运维·服务器
qwer555883 小时前
linux-----------------库制作与原理(下)
linux·运维·服务器
vortex53 小时前
Bash fork 炸弹 —— :(){ :|:& };:
运维·服务器·开发语言·网络安全·bash
ephemerals__4 小时前
【Linux】简易版Shell实现(附源码)
linux·运维·chrome
烦躁的大鼻嘎5 小时前
【Linux】ELF与动静态库的“暗黑兵法”:程序是如何跑起来的?
linux·运维·服务器·c++·vscode·ubuntu