Nginx知识点汇总表格总结

发布于:2024-05-02 ⋅ 阅读:(31) ⋅ 点赞:(0)

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

目录

1、Nginx的基本概念

 2.Nginx的安装与配置

3. Nginx配置反向代理

4.Nginx的缓存配置

5.Ngiinx的日志管理

6.Nginx的安全设置

7.Nginx的性能优化

8. Nginx的邮件代理设置

9.Nginx的web服务性能监控

10.Nginx的模块系统

11.Nginx的高可用性配置

12. Nginx的SSL和TLS配置

13.Nginx的Websocket支持的配置

14.Nginx的限流和防DDos攻击

15.Nginx的URL重写和重定向

16.Nginx的地理ip定位

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

18.Nginx的限流策略

19. Nginx的监控和调试

20. 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签名机制对模块进行签名。

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

# 用户和用户组
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)
}