【Nginx 进阶】1、Nginx 高级配置

【Nginx 进阶】Nginx 高级配置


【Nginx进阶】系列文章目录

【Nginx 进阶】1、Nginx 高级配置(本文)
【Nginx 进阶】2、模块化设计
【Nginx 进阶】3、负载均衡策略
【Nginx 进阶】4、SSL/TLS 配置
【Nginx 进阶】5、Nginx 性能优化
【Nginx 进阶】6、Nginx 与第三方服务集成
【Nginx 进阶】7、安全配置
【Nginx 进阶】8、Nginx 高可用性
【Nginx 进阶】9、监控和调试


在完成了 Nginx 的入门系列后,我们已经掌握了 Nginx 的基本使用和配置方法。在本章中,我们将深入探讨 Nginx 的高级配置,帮助你更加灵活和高效地管理和优化你的 Nginx 服务器。

1. 高级配置概述

Nginx 的高级配置涉及多个方面,包括增强的负载均衡策略、高级缓存配置、自定义错误页面、动态内容处理、静态和动态内容分离等。这些配置可以帮助你更好地利用 Nginx 的强大功能,提升服务器的性能和可靠性。

2. 负载均衡策略

Nginx 提供了多种负载均衡策略,可以根据不同的需求选择合适的策略:

2.1 轮询 (Round Robin)

这是默认的负载均衡策略,Nginx 按照顺序将请求依次分配给每个后端服务器:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

2.2 最少连接 (Least Connections)

将请求分配给当前活动连接数最少的服务器:

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

2.3 IP 哈希 (IP Hash)

根据客户端 IP 地址分配请求,确保同一客户端的请求总是分配到同一台服务器:

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

2.4 健康检查

配置健康检查,确保请求只分配给健康的服务器:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;

    # 配置健康检查
    server backend1.example.com max_fails=3 fail_timeout=30s;
    server backend2.example.com max_fails=3 fail_timeout=30s;
}

3. 高级缓存配置

Nginx 的缓存功能可以显著提高网站性能,减少后端服务器的负载:

3.1 配置缓存路径

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

3.2 启用缓存

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_cache my_cache;
        proxy_pass http://backend;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

3.3 缓存清理

使用 proxy_cache_purge 指令启用缓存清理功能:

location /purge/ {
    allow 127.0.0.1;  # 只允许本地主机清理缓存
    deny all;
    proxy_cache_purge my_cache "$scheme://$host$request_uri";
}

4. 自定义错误页面

自定义错误页面可以提升用户体验:

server {
    listen 80;
    server_name example.com;

    error_page 404 /custom_404.html;
    location = /custom_404.html {
        root /usr/share/nginx/html;
        internal;
    }

    error_page 500 502 503 504 /custom_50x.html;
    location = /custom_50x.html {
        root /usr/share/nginx/html;
        internal;
    }
}

5. 动态内容处理

Nginx 通常与其他服务器(如 PHP-FPM、Node.js 等)配合处理动态内容:

5.1 PHP-FPM 配置

server {
    listen 80;
    server_name example.com;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

5.2 Node.js 配置

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

6. 静态和动态内容分离

为了优化性能,可以将静态内容和动态内容分离到不同的服务器:

server {
    listen 80;
    server_name static.example.com;

    location / {
        root /usr/share/nginx/static;
    }
}

server {
    listen 80;
    server_name dynamic.example.com;

    location / {
        proxy_pass http://backend_dynamic;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

7. 完整示例

下面是一个综合了高级配置的完整示例:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

upstream backend {
    least_conn;
    server backend1.example.com max_fails=3 fail_timeout=30s;
    server backend2.example.com max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    server_name example.com;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
        proxy_cache my_cache;
        proxy_pass http://backend;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /images/ {
        root /data;
    }

    error_page 404 /custom_404.html;
    location = /custom_404.html {
        root /usr/share/nginx/html;
        internal;
    }

    error_page 500 502 503 504 /custom_50x.html;
    location = /custom_50x.html {
        root /usr/share/nginx/html;
        internal;
    }
}

8. 总结

在本章中,我们详细介绍了 Nginx 的高级配置,包括负载均衡策略、高级缓存配置、自定义错误页面、动态内容处理以及静态和动态内容的分离。通过掌握这些高级配置,你可以更好地利用 Nginx 的强大功能,提升服务器的性能和可靠性。在接下来的教程中,我们将探讨 Nginx 的模块化设计,敬请期待!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值