【利用AI让知识体系化】万字深入浅出Nginx

在这里插入图片描述

思维导图

在这里插入图片描述

文章目录

    • 思维导图
  • 第一部分:入门篇
    • 1.1 起步
      • 下载和安装Nginx
      • 启动Nginx
      • Nginx配置文件
      • Nginx命令行
      • 总结
    • 1.2 Nginx的基本架构
    • 1.3 安装和配置Nginx
    • 1.4 Nginx的基本操作
  • 第二部分:核心篇
    • 2.1 Nginx的请求处理
    • 2.2 Nginx的缓存机制
    • 2.3 Nginx的负载均衡机制
    • 2.4 Nginx的反向代理
  • 第三部分:进阶篇
    • 3.1 Nginx的高级应用
    • 3.2 Nginx的权限控制
    • 3.3 Nginx的SSL配置
    • 3.4 Nginx的日志管理
    • 3.5 Nginx的调优
  • 第四部分:实践篇
    • 4.1 高可用Nginx配置
    • 4.2 Nginx的DNS解析配置
    • 4.3 Nginx的CDN加速配置
    • 4.4 Nginx的动静分离配置
  • 第五部分:扩展篇
    • 5.1 模块开发和扩展

第一部分:入门篇

1.1 起步

Nginx是一个轻量级高性能的开源Web服务器和反向代理服务器,由俄罗斯的程序设计师Igor Sysoev创建并维护。Nginx能够更好地处理高并发的网络流量,因此非常适用于处理大型的网站、高并发的API和网页应用

下载和安装Nginx

Nginx的官方网站提供了针对各种操作系统的完整安装说明,您可以从官方网站下载和安装Nginx:https://nginx.org/en/download.html

或者,可以通过包管理器来安装Nginx,如:

  • 在Ubuntu系统中,可以使用apt-get来安装:sudo apt-get install nginx
  • 在CentOS/RHEL系统中,可以使用yum来安装:sudo yum install nginx

启动Nginx

在安装Nginx之后,您可以使用以下命令来启动Nginx:

sudo systemctl start nginx

Nginx配置文件

Nginx的配置文件位于/etc/nginx目录下(系统和安装方式的不同可能会导致目录位置不同)。配置文件默认名字为nginx.conf,它是关于httpserverlocation和其它信息的主要配置文件。

在默认的配置文件中,Nginx监听的端口为80。如果您需要将Nginx的监听端口改为8080端口,可以使用以下配置:

server {
  listen 8080;
  server_name localhost;
  location / {
    root /var/www/html;
    index index.html;
  }
}

在上述配置中,我们使用listen来指定Nginx监听端口为8080,并使用location来指定Nginx将请求映射到的文件路径。

Nginx命令行

在使用Nginx时,有时需要使用命令行工具来进行管理和配置。以下是一些常用的Nginx命令:

  • 启动Nginx:sudo systemctl start nginx
  • 停止Nginx:sudo systemctl stop nginx
  • 重新启动Nginx:sudo systemctl restart nginx
  • 检查Nginx配置的正确性:sudo nginx -t
  • 重新加载Nginx配置:sudo systemctl reload nginx

总结

在这个起步入门部分中,我们回顾了Nginx的概述和核心思想,介绍了如何下载和安装Nginx,以及如何启动和配置Nginx。在接下来的学习中,我们将探究Nginx更多的高级特性,掌握更多的操作和配置技巧。

1.2 Nginx的基本架构

Nginx是一个高性能的Web服务器和反向代理服务器,它的基本架构如下:

  1. Master进程:运行在主控制台上,负责读取配置文件,创建Worker进程和实现其他功能。

  2. Worker进程:实际处理客户端请求的核心进程。每个Worker进程可以处理多个客户端的连接。Worker进程可以通过fork()创建子进程来实现高并发处理。

  3. Event模块:负责管理和监控socket文件描述符,提供网络事件驱动机制。实现高性能、低延迟的网络I/O模型。

  4. HTTP模块:基于HTTP协议实现的Web服务器模块。支持静态文件和动态内容的处理,同时也提供了反向代理能力。

  5. Cache模块:用于缓存静态文件和反向代理的响应结果,提高性能。

  6. Load Balancer模块:支持负载均衡的反向代理模块,支持多种负载均衡算法。

总体来说,Nginx的基本架构设计简洁灵活,模块化程度高,可以通过添加或删除不同模块,来满足不同的需求。

1.3 安装和配置Nginx

安装Nginx:

在Linux系统中,安装Nginx可以通过包管理工具来安装,如在Ubuntu系统中可以通过以下命令来安装:

sudo apt-get update
sudo apt-get install nginx

在CentOS系统中可以通过以下命令来安装:

sudo yum install epel-release
sudo yum install nginx

配置Nginx:

Nginx的配置文件位于/etc/nginx/nginx.conf文件中。可以通过编辑该文件来进行配置。

  1. 修改工作进程数

在默认情况下,Nginx会启动一个Master进程和多个Worker进程,可以通过以下配置来修改Worker进程数:

worker_processes 2;
  1. 配置虚拟主机

Nginx可以通过虚拟主机的方式来支持多个域名或IP地址,每个虚拟主机可以有独立的配置,可以通过如下配置创建虚拟主机:

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com/public_html;
}
  1. 配置负载均衡

Nginx提供了多种负载均衡算法,可以通过如下配置来启用负载均衡:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
}

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend;
    }
}

上述配置表示将请求通过反向代理转发到名为backend的服务器组中,并根据后端服务器的权重进行负载均衡。

  1. 配置SSL证书

Nginx支持使用SSL证书来加密和保护通信安全,可以通过如下配置来启用SSL证书:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    location / {
        proxy_pass http://backend;
    }
}

上述配置启用了HTTPS协议,并指定了SSL证书和私钥的路径。

在修改完配置文件后需要重启Nginx服务才能生效:

sudo systemctl restart nginx

1.4 Nginx的基本操作

以下是Nginx的几个基本操作:

  1. 检查Nginx状态

可以通过以下命令来检查Nginx的运行状态:

sudo systemctl status nginx

如果Nginx正在运行,则系统会返回Nginx正在运行的信息,如下:

nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-05-17 16:45:09 CST; 4h 45min ago
 Main PID: 21976 (nginx)
   CGroup: /system.slice/nginx.service
           ├─21976 nginx: master process /usr/sbin/nginx
           └─21977 nginx: worker process
  1. 停止或重启Nginx

如果需要停止或重启Nginx,可以使用以下命令:

停止Nginx:

sudo systemctl stop nginx

重启Nginx:

sudo systemctl restart nginx
  1. 测试Nginx配置文件

在修改Nginx的配置文件后,需要通过以下命令来测试配置文件是否正确:

sudo nginx -t

如果配置文件正确,则系统会返回如下信息:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 查看Nginx访问日志

Nginx的访问日志位于/var/log/nginx/access.log文件中,可以通过以下命令来实时查看访问情况:

sudo tail -f /var/log/nginx/access.log
  1. 查看Nginx错误日志

Nginx的错误日志位于/var/log/nginx/error.log文件中,可以通过以下命令来查看最近的错误信息:

sudo tail -n 50 /var/log/nginx/error.log

以上是Nginx的几个基本操作,可以通过这些命令来管理和调试Nginx服务器。

第二部分:核心篇

2.1 Nginx的请求处理

Nginx的请求处理如下:

1. 接收请求

Nginx作为Web服务器或反向代理服务器,会监听指定的端口,等待客户端发起连接请求。客户端向Nginx发起连接请求时,Nginx会接收连接请求,并记录相应的请求信息。

2. 确定服务内容

Nginx通过解析请求URL,确定要请求的服务内容。如果请求的是静态文件,Nginx会直接返回文件内容;如果请求的是动态内容(如PHP、Python等),则Nginx会将请求转发给相应的应用服务器。

3. 处理请求

Nginx通过HTTP核心模块处理请求,根据请求URL、HTTP方法、请求头等信息,进行处理。Nginx支持多种请求处理模式,如反向代理、内容分发、图片缩放、SSL加速、负载均衡等。

4. 返回响应

Nginx处理完业务逻辑后,将结果返回给客户端。如果请求的是静态文件,Nginx会直接返回文件内容,如果请求的是动态内容,Nginx会将应用服务器返回的内容进行包装后再返回给客户端。

5. 记录日志

在请求处理结束后,Nginx会记录请求和响应信息到日志中。包括请求的URL、客户端IP地址、请求方法、请求头、处理结果等详细信息。这些日志信息对于系统运维和问题排查非常重要。

总的来说,Nginx的请求处理采用模块化的设计,支持灵活的配置和高性能的处理能力,可以通过配置反向代理、负载均衡、缓存等模块来实现更加高效的请求处理。同时,Nginx提供了详细的日志记录功能,方便管理员进行监控和问题排查。

2.2 Nginx的缓存机制

Nginx的缓存机制可以通过proxy_cache模块来实现,它可以将反向代理的响应结果缓存到本地磁盘中,从而提高服务器的响应速度,减轻后端服务器的压力。

Nginx缓存的两种类型:

  1. Proxy Cache:代理缓存,缓存的是反向代理的响应内容。

  2. FastCGI Cache:FastCGI缓存,缓存的是FastCGI应用服务器的响应内容。

以下是Nginx的缓存机制工作流程:

  1. 当client发送一个请求到Nginx,Nginx会首先查找是否有缓存内容,如果有,则直接返回缓存的响应内容。

  2. 如果Nginx没有缓存该内容,会将请求发送到应用服务器。

  3. 当应用服务器返回响应后,Nginx将响应结果缓存到本地磁盘中,并根据缓存的时间来设置缓存的过期时间。

  4. 当再次有相同内容的请求到达Nginx时,会先检查缓存时间是否过期,如果还没有过期,则直接返回缓存的响应内容。

Nginx缓存的优势:

  1. 减轻后端服务负载,提高响应速度。Nginx缓存能够将响应结果缓存到本地磁盘,减轻后台服务器负载,同时也提高了响应速度。

  2. 支持按时间戳、URI和请求头缓存。Nginx缓存仅在每个请求返回时才会更新其内容,因此,每个缓存条目与它的源URI和头部信息相关联。

  3. 可以指定缓存信息的时效性。Nginx缓存支持指定缓存内容的时效性,可以通过设置过期时间来控制缓存的有效期。这有助于确保缓存内容一直是最新的。

  4. 支持指定缓存存储区和缓存清除。Nginx可以通过指定不同的缓存存储区,来缓存不同的响应内容,同时,也可以设置定期清理缓存,以确保缓存中的数据始终是最新的。

总而言之,Nginx的缓存机制可以有效提高系统的响应速度,减轻后端服务的负载,同时,它的灵活性和可配置性也使得应用场景更加广泛。

2.3 Nginx的负载均衡机制

Nginx的负载均衡机制主要可以分为以下四种:

  1. 轮询(round-robin):Nginx默认的负载均衡方式,将请求依次分配给不同的后端服务器。

  2. 最少连接(least connections):将请求分配给当前连接数最少的后端服务器。

  3. ip_hash(ip地址哈希):根据客户端的IP地址进行哈希计算,将同一个客户端的请求分配给同一个后端服务器,以保证会话的连续性。

  4. 加权轮询(weighted round-robin):按照服务器的权重来分配请求。服务器的权重越高,它被分配请求的概率就越大。可以通过调整权重来实现动态负载均衡。

Nginx的负载均衡机制可以通过配置文件进行设置和调整。同时,Nginx还支持在不同的负载均衡方式之间进行动态切换,以满足不同场景下的需求。

2.4 Nginx的反向代理

Nginx可以作为反向代理服务器,主要有以下几个作用:

  1. 负载均衡:通过反向代理,将请求分发给多个后端服务器,以实现负载均衡。

  2. 缓存加速:反向代理可以缓存一些静态内容,避免不必要的请求对后端服务器造成压力。

  3. 安全防护:通过反向代理,可以过滤一些非法请求,保护后端服务器不受到攻击。

  4. 提供HTTPS服务:反向代理可以提供HTTPS服务,以加密网站流量,提高安全性。

使用Nginx作为反向代理服务器,需要在配置文件中设置代理服务器的地址后端服务器的地址,并指定反向代理的一些参数,如缓存大小、缓存时间等。一般来说,反向代理服务器和后端服务器需要位于同一内网中,以保证网络连接的稳定性和安全性。

第三部分:进阶篇

3.1 Nginx的高级应用

除了反向代理和负载均衡之外,Nginx还有一些高级应用,例如:

  1. URL重写:Nginx可以通过URL重写,将一些不规范的URL地址转换为规范的URL地址,以提高网站的SEO优化。

  2. 动态页面缓存:对于一些动态生成的页面,Nginx可以通过缓存机制,将页面的静态内容缓存到本地,提高网站的访问速度和性能。

  3. 支持Lua脚本:Nginx可以通过Lua脚本,实现一些高级的应用,例如动态路由、动态页面内容调整等。

  4. 支持Websocket:Nginx支持Websocket协议,可以以较低的资源消耗,同时支持高并发的实时应用程序。

  5. 反向代理缓存:Nginx可以通过反向代理缓存机制,将后端服务器返回的结果缓存到本地,如静态文件、API接口等,减小对后端服务器的请求量。

以上这些高级应用,都需要通过Nginx的配置文件进行设置和调整。Nginx的配置文件支持使用变量、条件语句、循环语句等,可以实现非常灵活的配置。同时,Nginx的高级应用可以在一定程度上提高网站的性能、安全性和用户体验。

3.2 Nginx的权限控制

Nginx提供了多种权限控制方式,包括基于IP地址、基于用户和密码认证等方式。

下面分别介绍这些方式。

1. 基于IP地址的权限控制

Nginx可以通过设置allowdeny指令,实现对IP地址的访问控制。可以在serverlocationif等上下文中使用这两个指令,例如:

location / {
    deny 192.168.0.1;
    allow 192.168.0.0/16;
    allow 10.0.0.0/8;
    deny all;
}

上述配置表示拒绝IP地址为192.168.0.1的访问,允许IP地址为192.168.0.0/16和10.0.0.0/8的访问,拒绝其它IP地址的访问。

2. 基于用户和密码认证的权限控制

Nginx可以通过设置HTTP Basic Authentication模块,实现基于用户名和密码的认证控制。需要在Nginx的配置文件中添加如下配置:

location /private {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/htpasswd;
}

上述配置中,auth_basic指定提示信息,auth_basic_user_file指定存储用户和密码认证信息的文件。需要通过htpasswd命令生成该文件,例如:

$ sudo htpasswd -c /etc/nginx/htpasswd username
New password: 
Re-type new password: 
Adding password for user username

该命令会在/etc/nginx/htpasswd文件中添加一个名为username的用户和对应的密码。

通过以上两种方式的配置,可以较为灵活的实现Nginx的权限控制,以达到对网站的访问控制目的。

3.3 Nginx的SSL配置

为了保证用户的数据传输安全,网站需要使用SSL证书。

Nginx可以通过HTTPS协议,实现数据传输的加密和安全

以下是Nginx的SSL配置步骤:

1. 获取SSL证书

需要从SSL证书颁发机构(CA机构)处购买SSL证书,或者使用自签名证书。SSL证书文件一般包括公钥文件和私钥文件,需要将这两个文件放到Nginx服务器上。

2. 配置Nginx的SSL

在Nginx的配置文件中,配置HTTPS监听的端口和SSL证书,例如:

server {
    listen      443 ssl;
    server_name example.com;
    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

在上述配置中,listen指令指定了监听的端口为443,并开启SSL安全访问;ssl_certificatessl_certificate_key指令指定了SSL证书和私钥的路径;ssl_protocolsssl_ciphers指令指定了SSL协议和加密算法的版本。

3. 配置HTTP重定向到HTTPS

为了保证网站访问的安全性,需要将HTTP协议的访问重定向到HTTPS协议。可以通过Nginx的配置文件进行配置,例如:

server {
    listen      80;
    server_name example.com;
    return 301  https://$server_name$request_uri;
}

在上述配置中,监听的端口为80,当用户通过HTTP协议访问example.com时,会重定向到HTTPS协议的example.com网址。

通过上述配置,用户可以安全地访问网站,并保护自己的数据传输安全。

3.4 Nginx的日志管理

Nginx可以通过日志管理记录网站的访问信息,包括访问时间、来源、访问页面、状态码等等。Nginx支持配置多种类型的日志格式,并且可以将日志保存到本地文件、syslog、甚至可以发送到远程的Elasticsearch等日志收集工具中进行分析处理。

下面是Nginx的日志管理相关的配置和操作。

1. 配置Nginx的访问日志

在Nginx的配置文件中,可以通过access_log指令,配置Nginx的访问日志,例如:

http {
    ...
    access_log  /var/log/nginx/access.log  main;
    ...
}

上述配置指定了Nginx的访问日志保存在/var/log/nginx/access.log文件中,并使用main格式进行记录。

2. 配置Nginx的错误日志

在Nginx的配置文件中,可以通过error_log指令,配置Nginx的错误日志,例如:

http {
    ...
    error_log  /var/log/nginx/error.log  error;
    ...
}

上述配置指定了Nginx的错误日志保存在/var/log/nginx/error.log文件中,并使用error格式进行记录。

3. 转储Nginx的日志文件

Nginx的日志文件可能会随着时间的推移越来越大,需要定期进行转储。可以通过logrotate工具定期压缩并清理Nginx的日志文件,例如:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        /etc/init.d/nginx reload > /dev/null
    endscript
}

上述配置将/var/log/nginx目录下的所有.log文件进行日常切割,保留52个日志备份。同时根据需要创建新的空日志文件。在每次转储时,Nginx会进行重载,以确保日志文件正确记录。

通过上述操作,可以有效地管理Nginx的日志,防止日志文件过大对服务器造成负担,并及时发现和解决Nginx的故障问题。

3.5 Nginx的调优

Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,可以用于处理大量的 HTTP 请求,同时拥有极好的可扩展性和可定制性。

下面是一些 Nginx 的调优技巧:

  1. 调整 Worker Process 数量:Nginx 是多进程模型,可以通过调整 worker process 的数量来利用 CPU 和内存资源。

  2. 启用 TCP_NODELAYTCP_NOPUSH: TCP_NODELAY 选项可以禁用 Linux 内核上的 Nagle 算法,从而减少延迟。TCP_NOPUSH 可以缩短自适应线性时间尽可能多的写入数据量,最大量无法被写入缓冲区后导致等待,这可以显著提高性能。

  3. 调整 Keepalive 超时时间: Nginx 使用 Keepalive 连接来复用客户端连接,可以通过调整 keepalive 超时时间来平衡连接复用和连接成本。

  4. 缓存常用的文件和页面: 将包含动态内容的页面缓存到内存中,减少请求次数并减轻服务器负担。

  5. 启用 Gzip 和缓存压缩: 压缩响应内容可以减少响应时间和网络流量,从而提高性能。

  6. 调整 Nginx 缓冲区大小: 可以通过调整 Nginx 的反向代理缓冲区大小来平衡内存使用和性能。

  7. 避免频繁地读写磁盘: 频繁地读写磁盘会影响性能,可以将一些静态文件放到 CDN 上,从而减轻服务器负担。

  8. 启用 TCP Fast Open: 在 Linux 上启用 TCP Fast Open 选项可以从握手过程中减少一次往返时间,从而降低延迟。

第四部分:实践篇

4.1 高可用Nginx配置

要实现 Nginx 的高可用,可以采用以下几个步骤:

  1. 部署多个 Nginx 实例:可以在不同的服务器或容器上部署多个 Nginx 实例,同时使用相同的配置文件和静态文件。

  2. 设置负载均衡:使用 Nginx 实现负载均衡的话,可以确保请求会被分配到多个 Nginx 实例上,从而提高可用性。

  3. 启用健康检查:可以使用第三方模块或自定义脚本启用健康检查,检测 Nginx 实例是否存活,从而减少无响应请求。

  4. 配置反向代理:可以使用反向代理将请求分发到不同的应用程序实例或服务器上,从而分散负载,提高可用性。

  5. 使用高可用数据库:对于具有持久性状态的应用程序,使用高可用数据库可以确保数据的连续性和可用性。

  6. 启用自动化应急响应机制:在出现故障或中断时,自动化应急响应机制可以帮助快速切换到备份 Nginx 实例。

  7. 配置日志记录和监控:日志记录和监控可以帮助及时发现故障和性能问题,从而加快故障恢复。

一个简单的高可用 Nginx 配置例子如下:

upstream backend {
    server backend1.example.com:8080 weight=5 max_fails=3 fail_timeout=300s;
    server backend2.example.com:8080 weight=5 max_fails=3 fail_timeout=300s;
}

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

这个 Nginx 配置将请求分发到多个名为 backend1 和 backend2 的服务器上,并在服务器出现故障时自动切换到备份服务器。通过配置反向代理,可以确保请求被正确地处理并分发到其他 Nginx 实例上。

4.2 Nginx的DNS解析配置

在 Nginx 中,可以使用 DNS 解析来提高灵活性和可伸缩性,允许您使用域名而不是 IP 地址定义上游服务器。

下面是一些配置 DNS 解析的方法:

1. 在 upstream 模块中使用 DNS 解析:

http {
    upstream myapp {
        server app1.example.com;
        server app2.example.com;
    }

    server {
        listen 80;
        server_name myserver.com;
        location / {
            proxy_pass http://myapp;
        }
    }
}

这里可以使用 upstream 模块定义一个名为 myapp 的上游服务器池,并将多个主机名指定为它的服务器。在此示例中,Nginx 将在 myapp 池中启动一个 DNS 解析,以查找 app1.example.com 和 app2.example.com 的 IP 地址,并选择其中一个作为目标服务器。

2. 使用 resolver 模块配置 DNS 解析:

除了在 upstream 模块中进行 DNS 解析外,还可以使用 Nginx 的 resolver 模块手动进行 DNS 解析。以下是示例配置:

http {
    resolver 8.8.8.8;
    server {
        listen 80;
        server_name myserver.com;
        location / {
            set $backend "app1.example.com";
            resolver 8.8.8.8;
            proxy_pass http://$backend;
        }
    }
}

上面的配置中,resolver 指令指定了要使用的 DNS 服务器,如果没有指定此选项,则使用系统默认的 DNS 服务器。这里也可以使用 resolver 指令手动指定要解析的主机名,而不需要在 upstream 模块中使用。

需要注意的是,进行 DNS 解析会影响 Nginx 的性能,因此建议使用本地 DNS 缓存或使用高性能的 DNS 服务器来优化性能。

4.3 Nginx的CDN加速配置

Nginx 可以作为加速节点实现 CDN (Content Delivery Network)。通过配置 Nginx 作为反向代理和缓存服务器,可以大大提高网站的性能,减少响应时间。

下面是一个简单的 CDN 加速配置:

http {
    # 定义缓存路径和缓存时间
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
    # 定义 upstream 服务器和负载均衡方式
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }
    # 定义 CDN 基本配置
    server {
        listen 80;
        server_name cdn.mydomain.com;
        # 设置缓存和缓存过期时间
        proxy_cache my_cache;
        proxy_cache_valid 200 60m;
        # 定义 CDN 的代理服务器
        location / {
            proxy_pass http://backend;
            # 设置 CDN 代理服务器的一些头信息
            proxy_set_header Accept-Encoding "";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_hide_header Set-Cookie;
        }
        # 预加载本地缓存
        location /_purge {
            proxy_cache_purge my_cache "$scheme$request_method$host$uri?$args";
        }
    }
}

上面是一个针对 CDN 加速的基本配置。这里定义了反向代理服务器 backend,并对其进行负载均衡。在 server 块中,定义了 CDN 的基本配置。

此外,还定义了缓存路径和缓存时间。在 location 块中,使用 proxy_pass 指令将请求分配到反向代理服务器上,并设置一些请求头信息以确保反向代理服务器可以识别 CDN 的请求。需要注意的是,由于缓存的存在,请确保服务器上的内容已更新和清除缓存的情况下再使用 CDN 加速。

4.4 Nginx的动静分离配置

Nginx 的动静分离是提高网站性能的一种重要技术,可以将静态资源和动态资源分别由不同的服务器或不同的路径处理,从而提高网站的整体效率。

下面是一个简单的配置示例:

http {
    # 配置负载均衡
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }
    # 静态资源访问路径
    location /static/ {
        root /path/to/static/files;
        try_files $uri =404;
    }
    # 动态资源访问路径
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

在这个示例中,我们定义了一个名为 backend 的负载均衡池,并将多个具有动态内容的后端服务器添加到其中。然后,为静态资源(比如图片、CSS、JS 文件等)定义了一个 /static/ 路径,并使用 try_files 指令确认请求的静态资源是否真的存在。对于这些静态资源,Nginx 直接从根目录下的 /path/to/static/files 目录中提供文件。

在 / 路径下,我们使用反向代理将请求传递给 backend 服务器池,然后使用 proxy_set_header 指令将 Host 和 X-Real-IP 头信息传递到后台服务器。因为这个路径用于动态请求,所以没有缓存,响应需要即时处理。

需要注意的是,在进行动静分离之前,需要对站点访问情况进行分析,了解哪些资源是静态的,哪些资源是动态的,这样才能够更好地进行动静分离。

第五部分:扩展篇

5.1 模块开发和扩展

Nginx 是一个高性能的 Web 服务器和反向代理服务器,它支持多个模块、插件,可以高效地处理 HTTP 请求。Nginx 的模块开发可以扩展 Nginx 的功能,满足特定需求和场景的要求。

Nginx 的模块开发分为几个步骤:

  1. 了解 Nginx 模块框架和 API:熟悉 Nginx 的模块开发框架和 API,包括配置模块、HTTP 模块、事件模块等。

  2. 编写模块代码:编写 Nginx 模块的代码和功能,包括 Nginx 配置指令、事件处理、HTTP 消息处理等。

  3. 编译模块代码:将模块代码和核心代码进行编译和链接,并生成可执行文件或库文件。

  4. 配置 Nginx:将编译后的 Nginx 模块集成到 Nginx 中,通过配置文件指定新的模块和对应的功能。

基于 Nginx 的模块开发需要掌握 C、C++、Lua 等语言之一,并且需要对 Linux 等操作系统和网络协议有深入的了解。

除了编写自己的模块,Nginx 还支持许多第三方模块和插件,可以通过编译安装、源码编译或者通过软件包管理器等方式进行安装和使用。

无论是自己编写模块还是使用第三方模块,都需要在 Nginx 的配置文件中添加模块相关的指令和配置项,例如 ngx_http_core_modulengx_http_ssl_module 等。

总之,Nginx 的模块开发和扩展可以帮助 Nginx 用户按需定制和扩展 Nginx 的功能,而且 Nginx 社区和开源社区提供了丰富的模块和插件,可以方便地使用和扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/20315.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

题解校验码—CRC循环校验码与海明校验码

码距 一个编码系统的码距是任意两个码字的最小距离。 例如个编码系统采用三位长度的二进制编码,若该系统有四种编码分别为:000,011,100,111,此编码系统中000与111的码距为3;011与000的码距为2…

Hard Patches Mining for Masked Image Modeling

摘要 蒙面图像建模(MIM)因其在学习可伸缩视觉表示方面的潜力而引起了广泛的研究关注。在典型的方法中,模型通常侧重于预测掩码补丁的特定内容,并且它们的性能与预定义的掩码策略高度相关。直观地说,这个过程可以被看作…

WiFi(Wireless Fidelity)基础(九)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…

【GAMES101】作业2学习总结

本系列博客为记录笔者在学习GAMES101课程时遇到的问题与思考。 GAMES101:课程官网GAMES101:B站视频GAMES101:相关文件下载(百度网盘) 一、基础题 本次作业的目的是为了让我们熟悉三角形栅格化的相关操作,通过Assignment2.pdf可以…

白嫖chatgpt的Edge插件,很难不爱啊

目录 🍁1.常见的Edge浏览器界面 🍁二.安装WebTab插件 🍁三.WebTab插件的各种功能 🍁1.支持免费的chatgpt,不限次数​编辑 🍁2.有几个休闲的小游戏可以玩耍,点击即玩。 🍁3.支…

618前夕,淘宝天猫大变革,探索电商天花板之上的价值

2023年淘宝天猫618商家大会,恰逢淘宝20周年,也是阿里“16N”组织架构改革,淘宝天猫“独立”经营后,管理和运营团队的首次亮相。除了淘宝天猫618的具体策略,最受关注的,还有淘宝天猫的大变革——涉及淘宝天猫…

AD9680+JESD204B接口+FPGA FMC高速率数据采集板卡

板卡概述: 【FMC_XM155】 FMC_XM155 是一款基于 VITA57.1 标准的,实现 2 路 14-bit、500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。 该模块遵循 VITA57.1 规范,可直接与 FPGA 载卡配合使用,板 卡 ADC 器件采用…

CN学术期刊《西部素质教育》简介及投稿邮箱

《西部素质教育》(半月刊)创刊于2015年,是由青海人民出版社有限责任公司主管/主办的教育类学术期刊,本刊恪守“追踪教育研究前沿,关注教育实践热点,探索创新教育理念,传播教育教学信息&#xff…

Linux相关问题

中英文切换 super空格切换中英文;super指键盘上的Win键; 开机自启动服务设置 可视化方式:输入setup命令进入自启动服务配置;通过上下键选中服务,通过空格选择是否自启动该服务; 开启不同的终端 CTRLALT…

audioop.rms函数解读和代码例子

该audioop模块包含对声音片段的一些有用操作。它对由8,16或32位宽的有符号整数样本组成的声音片段进行操作,并以Python字符串存储。这与al和sunaudiodev模块使用的格式相同。所有标量项都是整数,除非另有规定。 audioop.rms 即 sqrt(sum(S_i^2)/n) 这个公…

10个你从未想过的 ChatGPT 有趣用途

这篇文章向我们展示了ChatGPT的有趣用途,如创作独特的故事、写作协助、模拟对话和游戏等。这些应用展示了ChatGPT的强大功能和灵活性。通过这些有趣的例子,我们可以看到ChatGPT作为一种人工智能技术在生活中的实际应用和潜力。无论是娱乐还是实用&#x…

我和C++的故事---第一次见面.

📝个人主页:认真写博客的夏目浅石. 🏠学习社区:夏目友人帐. 文章目录 前言一、第一个C程序二、C 关键字(C98)三、命名空间1、命名空间的定义2、命名空间的使用3、命名空间的三种展开方式 四、C输入&&输出&&换行1、…

三极管的几点应用

三极管有三个工作状态:截止、放大、饱和,放大状态很有学问也很复杂,多用于集成芯片,比如运放,现在不讨论。其实,对信号的放大,我们通常用运放处理,三极管更多的是当做一个开关管来使…

蚁群算法ACS处理旅行商问题TSP【Java实现】

1. 介绍 蚁群算法是一种群体智能算法,模拟了蚂蚁寻找食物时的行为,通过蚂蚁之间的信息交流和合作,最终实现全局最优解的寻找【是否找得到和迭代次数有关】。 蚁群算法的基本思想是将搜索空间看作一个由节点组成的图,每个节点代表…

【软件开发】Memcached(理论篇)

Memcached(理论篇) 1.Memcached 简介 Memcached 是一个开源的,支持高性能,高并发的分布式内存缓存系统,由 C 语言编写,总共 2000 多行代码。从软件名称上看,前 3 个字符 Mem 就是内存的意思&am…

港科夜闻|香港科大与香港科大(广州)管理层联席会议顺利召开

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与香港科大(广州)管理层联席会议顺利召开。这是自内地和香港全面恢复通关以来,两校的高级管理团队首次举行线下的联席会议,面对面交流、讨论有关两校协同发展的重要议题。两校持续深入推进…

「——全部文章专栏汇总——」

欢迎来到我的博客 天喜Studio 在这里&#xff0c;我会分享我在 c语言、操作系统、计算机网络等方面的学习和经验&#xff0c;希望能对读者有所帮助。以下是我写的所有专栏 如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 如有疑问欢迎大家指正讨论…

SQL注入(一)联合查询 报错注入

目录 1.sql注入漏洞是什么 2.联合查询&#xff1a; 2.1注入思想 2.2 了解information_schema 数据库及表 3.可替代information_schema的表 3.1 sys库中重要的表 4. 无列名注入 利用 join-using 注列名。 4. 报错注入 4.1 常用函数&#xff1a;updatexml、extractvalue…

C/C++每日一练(20230517) 排序问题、查找小值、寻找峰值

目录 1. 排序问题 &#x1f31f; 2. 查找小值 &#x1f31f; 3. 寻找峰值 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 排序问题 输入10个数&#…

【Linux学习笔记】设备驱动模型详解——总线、设备、驱动和类

学习内容 设备驱动模型视频讲解 简介 设备驱动是计算机系统中的重要组成部分&#xff0c;它们允许操作系统与硬件交互。设备驱动模型是一种通用的抽象框架&#xff0c;用于描述操作系统如何管理硬件设备。这里我们将介绍设备驱动模型中的四个关键概念&#xff1a;总线、设备…