Nginx 静态文件、反向代理、负载均衡、缓存、SSL/TLS 加密、gzip 压缩 等等

Nginx 是一个高性能的开源 Web 服务器和反向代理服务器,它具有丰富的功能和灵活的配置选项。本文将介绍 Nginx 的各种作用,并提供相应的示例。
在这里插入图片描述

1. 静态文件服务器

Nginx 可以作为静态文件服务器,快速地提供静态文件的访问。以下是一个示例配置:

server {
    listen 80;
    server_name your_domain.com;

    location /static {
        root /path/to/static/files;
    }
}

server_name your_domain.com: 这设置了服务器块所响应的域名。在这个例子中,它会响应来自your_domain.com的请求。
location /static { ... }: 这是一个位置块,用于定义如何响应特定URL路径的请求。
root /path/to/static/files: 在这个位置块中,root指令指定了静态文件的位置。当请求匹配到/static路径时,Nginx将从/path/to/static/files目录中提供文件。

2. 反向代理服务器

Nginx 是一款出色的反向代理服务器,可以代理后端服务器的请求,并提供负载均衡和高可用性。以下是一个示例配置,实现不同的URL前缀访问不同的地址:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    # 配置多个代理
    location /blog1 {
        proxy_pass http://blog1_backend_address;
    }

    location /blog2 {
        proxy_pass http://blog2_backend_address;
    }

    location /blog3 {
        proxy_pass http://blog3_backend_address;
    }
}

3. 负载均衡

Nginx 的负载均衡功能可以将请求均匀地分发给多个后端服务器,提高系统的性能和可扩展性。
在nginx中配置负载均衡可以使用upstream模块,同时可以配置不同的均衡策略。以下是一些常见的负载均衡策略:

  1. 轮询(Round Robin):
     upstream backend {
         server backend1.example.com;
         server backend2.example.com;
         server backend3.example.com;
     }

     location / {
         proxy_pass http://backend;
     }

说明: 默认的均衡策略,每个请求按顺序分配到不同的后端服务器。

  1. IP哈希(IP Hash):
     upstream backend {
         ip_hash;
         server backend1.example.com;
         server backend2.example.com;
         server backend3.example.com;
     }

     location / {
         proxy_pass http://backend;
     }

说明: 使用客户端的IP地址来哈希,确保相同IP的客户端每次请求都会被分配到同一个后端服务器。

  1. 加权轮询(Weighted Round Robin):
     upstream backend {
         server backend1.example.com weight=3;
         server backend2.example.com weight=2;
         server backend3.example.com weight=1;
     }

     location / {
         proxy_pass http://backend;
     }

说明: 分配权重,权重越高的服务器接收到的请求越多。

  1. 最小连接数(Least Connections):
     upstream backend {
         least_conn;
         server backend1.example.com;
         server backend2.example.com;
         server backend3.example.com;
     }

     location / {
         proxy_pass http://backend;
     }

说明: 请求被分配到当前连接数最少的服务器。
当然,还有其他一些常见的负载均衡策略,以下是其中一些:

  1. URL哈希(Hash):
     upstream backend {
         hash $request_uri;
         server backend1.example.com;
         server backend2.example.com;
         server backend3.example.com;
     }

     location / {
         proxy_pass http://backend;
     }

说明: 使用请求的URI来哈希,确保相同URI的请求被分配到同一个后端服务器。

  1. 随机(Random):
     upstream backend {
         random;
         server backend1.example.com;
         server backend2.example.com;
         server backend3.example.com;
     }

     location / {
         proxy_pass http://backend;
     }

说明: 随机选择一个后端服务器处理请求。

  1. 最快响应时间(Least Time):
     upstream backend {
         least_time first_byte;
         server backend1.example.com;
         server backend2.example.com;
         server backend3.example.com;
     }

     location / {
         proxy_pass http://backend;
     }

说明: 请求被分配到当前响应时间最短的服务器。

这些策略提供了不同的方式来分配请求到后端服务器,可以根据具体的业务需求和系统性能选择适合的负载均衡策略。

4. 缓存

Nginx 的缓存功能可以缓存静态内容或动态页面,提高网站的响应速度和性能。
Nginx缓存配置涉及到多个参数和指令,下面是一些常见的Nginx缓存配置策略的示例:

  1. 基本缓存配置:
   proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;

   server {
       location / {
           proxy_cache my_cache;
           proxy_cache_valid 200 1h;  # 缓存200响应1小时
           proxy_cache_valid 404 1m;  # 缓存404响应1分钟
           proxy_pass http://backend;
       }
   }

说明: 这是一个基本的缓存配置,缓存路径为/path/to/cache,使用名为my_cache的缓存区域,对不同响应状态码设置不同的有效期。

  1. 忽略一些请求参数的缓存:
   proxy_cache_key "$host$request_uri $cookie_user $request_method";

说明: 使用proxy_cache_key指令可以定制缓存键,这里示例中的配置将忽略$arg_变量中的请求参数。

  1. 动态刷新缓存:
   location / {
       proxy_cache my_cache;
       proxy_cache_valid 200 1h;
       proxy_cache_background_update on;
       proxy_cache_lock on;
       proxy_pass http://backend;
   }

说明: 使用proxy_cache_background_updateproxy_cache_lock可以实现后台动态刷新缓存,确保在缓存刷新时不影响正常请求。

  1. 缓存大小限制:
   proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=7d;

   server {
       location / {
           proxy_cache my_cache;
           proxy_cache_valid 200 1h;
           proxy_pass http://backend;
       }
   }

说明: 使用max_sizeinactive参数可以限制缓存的大小和清理策略,这里设置最大缓存大小为1GB,7天内未被访问的缓存将被清理。

5. SSL/TLS 加密

Nginx 可以配置 SSL/TLS 加密,确保通过 HTTPS 进行安全的通信。以下是一个示例配置:

server {
    listen 443 ssl;
    server_name your_domain.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;

    location / {
        proxy_pass http://backend_server;
    }
}

6. URL 重写

Nginx 支持 URL 重写功能,可以修改请求的 URL 地址。以下是一个示例配置:

server {
    listen 80;
    server_name your_domain.com;

    location /old-url {
        rewrite /old-url/(.*) /new-url/$1 permanent;
    }

    location / {
        proxy_pass http://backend_server;
    }
}

7. HTTP/2

Nginx 支持 HTTP/2 协议,提供更快的网站加载速度和性能。以下是一个示例配置:

server {
    listen 443 ssl http2;
    server_name your_domain.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    
	location / {
	    proxy_pass http://backend_server;
	}
}

8. WebSocket

Nginx 支持 WebSocket 协议,可以实现实时通信和双向数据传输。以下是一个示例配置:

server {
    listen 80;
    server_name your_domain.com;

    location /websocket {
        proxy_pass http://backend_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

9. 反向代理缓存

Nginx 的反向代理缓存功能可以缓存后端服务器返回的动态内容,提高响应速度和减轻后端服务器负载。以下是一个示例配置:

http {
    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            proxy_cache my_cache;
            proxy_pass http://backend_server;
        }
    }
}

proxy_cache_path /path/to/cache: 这部分指定了缓存文件的存储路径。你需要将/path/to/cache替换为你希望的实际路径。
levels=1:2: 这部分定义了缓存目录的层级结构。在这个例子中,层级结构是1:2,意味着缓存目录的第一层目录是基于请求的哈希值的第一位,第二层目录是基于第二位。
keys_zone=my_cache:10m: 这部分为缓存设置了一个区域。区域是在Nginx中动态分配的内存块,用于存储如请求头、连接状态等信息。这里,我们为缓存设置了一个名为my_cache的区域,并分配了10兆字节(10m)的内存。

10. 安全限制

Nginx 可以通过配置安全限制来保护 Web 应用程序免受恶意攻击和未经授权的访问。以下是一个示例配置:

server {
    listen 80;
    server_name your_domain.com;
	# 限制ip地址
    location / {
        allow 192.168.1.0/24;
        deny all;
        proxy_pass http://backend_server;
    }
}

allow 192.168.1.0/24: 这个指令允许来自192.168.1.0/24网络(也就是IP地址从192.168.1.1到192.168.1.254的任何地址)的请求。
deny all: 这个指令拒绝所有其他IP地址的请求。
proxy_pass http://backend_server: 这将所有匹配该位置块的请求代理到后端服务器backend_server。这意味着当用户访问your_domain.com时,他们的请求实际上会被转发到backend_server。

11. gzip 压缩

Nginx 可以启用 gzip 压缩,减小传输内容的大小,提高网站的加载速度。以下是一个示例配置:

http {
    gzip on;
    gzip_types text/plain text/css application/javascript;

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            proxy_pass http://backend_server;
        }
    }
}

gzip on:这个指令开启了对请求内容的gzip压缩。当此指令开启时,Nginx会自动压缩通过HTTP传输的内容,从而减少传输的数据量,提高传输速度。
gzip_types text/plain text/css application/javascript:这个指令定义了哪些MIME类型的内容会被gzip压缩。在这个例子中,Nginx会压缩文本/plain、文本/css和application/javascript类型的响应内容。

常见的Gzip压缩策略:

  1. 启用Gzip压缩:
   gzip on;
   gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

说明: 使用gzip on来启用Gzip压缩。gzip_types指定需要进行Gzip压缩的文件类型。

  1. 压缩级别:
   gzip_comp_level 5;

说明: 使用gzip_comp_level指定压缩级别,范围为1到9,级别越高压缩比越高,但也消耗更多的CPU资源。

  1. 最小文件大小:
   gzip_min_length 1000;

说明: 使用gzip_min_length指定最小文件大小,小于该大小的文件不会进行压缩。

  1. 禁用压缩的User-Agent:
   gzip_disable "MSIE [1-6]\.";

说明: 使用gzip_disable指定禁用压缩的User-Agent,这里示例中禁用了MSIE 1-6版本的浏览器。

  1. 条件性压缩:
   gzip_proxied any;

说明: 使用gzip_proxied可以指定什么情况下进行压缩,any表示所有情况都进行压缩。

  1. 启用对Precompressed文件的支持:
   gzip_static on;

说明: 使用gzip_static可以启用对预压缩文件(.gz文件)的支持,如果有对应的.gz文件,将优先使用。

这些是一些常见的Gzip压缩策略,可以根据具体的需求进行调整。启用Gzip压缩可以显著减小传输的数据量,提高页面加载速度。

12. 请求限速

Nginx 可以限制每个客户端的请求速率,以保护服务器免受过多的请求影响。以下是一个示例配置:

http {
    limit_req_zone $binary_remote_addr zone=my_zone:10m rate=1r/s;

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            limit_req zone=my_zone burst=5;
            proxy_pass http://backend_server;
        }
    }
}

$binary_remote_addr: 这是客户端的IP地址,以二进制形式存储。使用二进制形式可以更精确地计算请求速率,特别是对于使用NAT或代理的客户端。
zone=my_zone:10m: 这部分定义了一个名为my_zone的共享内存区域,大小为10兆字节(10m),用于存储客户端的请求计数和时间戳。
rate=1r/s: 这部分定义了请求速率的限制。在这个例子中,限制是每秒一个请求(1r/s)。

请求限速策略:

  1. 基于连接数的限速:
   limit_conn_zone $binary_remote_addr zone=addr:10m;
   limit_conn addr 10;

说明: 通过limit_conn_zone指定一个连接数限制区域,然后使用limit_conn设置连接数限制,确保每个客户端IP最多允许10个并发连接。

  1. 基于请求频率的限速:
   limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
   limit_req zone=one burst=5;

说明: 使用limit_req_zone创建一个请求频率限制区域,然后使用limit_req设置请求频率限制,确保每秒最多处理一个请求,同时允许短时期内的爆发(burst)。

  1. 基于缓存大小的限速:
   limit_rate 100k;

说明: 使用limit_rate设置整个连接的速率限制,确保整个连接的传输速率不超过100KB/s。

  1. 基于连接速率的限速:
   limit_rate_after 1m;
   limit_rate 500k;

说明: 使用limit_rate_after指定在前1MB数据传输之后开始限速,然后使用limit_rate设置后续传输的速率限制为500KB/s。

  1. 基于缓冲区大小的限速:
   limit_req_zone $binary_remote_addr zone=buf:10m rate=10r/s;
   limit_req zone=buf burst=20 nodelay;

说明: 使用limit_req_zone创建一个限速区域,然后使用limit_req设置限速,确保每秒最多处理10个请求,允许20个请求的短时期爆发,不延迟。

这些是一些常见的Nginx请求限速策略,可以根据实际需求选择合适的策略。限速可以有效地防止服务器过载和滥用。

13. 日志记录

Nginx 可以记录访问日志和错误日志,方便进行故障排查和性能分析。以下是一个示例配置:

http {
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            proxy_pass http://backend_server;
        }
    }
}

access_log /var/log/nginx/access.log:这个指令指定了访问日志的输出路径。访问日志记录了所有成功访问服务器的请求,包括客户端的IP地址、请求的URL、请求时间等信息;日志文件被保存在/var/log/nginx/目录下,并命名为access.log。
error_log /var/log/nginx/error.log:这个指令指定了错误日志的输出路径。错误日志记录了服务器运行过程中发生的错误、警告和其他重要信息;日志文件被保存在/var/log/nginx/目录下,并命名为error.log。

14. SSL 证书续订

Nginx 支持 SSL 证书的续订,确保持续的安全通信。以下是一个示例配置:

server {
    listen 443 ssl;
    server_name your_domain.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;

    ssl_certificate_renewal 30 days;

	location / {
	    proxy_pass http://backend_server;
	}
}

server_name your_domain.com: 指定这个服务器块应该响应的域名。在这种情况下,它是your_domain.com。
ssl_certificate /path/to/certificate.crt: 指定SSL证书的路径。当客户端尝试通过HTTPS连接时,它会验证此证书以确认服务器的身份。
ssl_certificate_key /path/to/private.key: 指定私钥的路径,该私钥与SSL证书匹配并用于加密连接。
ssl_certificate_renewal 30 days: 设置SSL证书的续订提醒。如果证书在30天内未续订,Nginx将返回一个警告给客户端。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LOVE_DDZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值