Nginx 反向代理、HTTPS、缓存优化配置教程

本文内容为网友分享,存在未知的风险性,查阅使用过程请务必认真辨别!

图片[1]-Nginx 反向代理、HTTPS、缓存优化配置教程-云村Study

Nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务、负载均衡和 API 网关等场景。

本文将详细介绍 Nginx 的常用配置,涵盖基本配置、静态资源服务、反向代理、负载均衡、HTTPS 配置、缓存优化等内容,帮助读者快速掌握 Nginx 的核心功能。

一. Nginx 基础配置

Nginx 的核心配置文件通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf,其结构主要分为:

  • 全局块(main):影响 Nginx 整体运行的配置(如 worker 进程数、日志路径等)。
  • events 块:配置网络连接相关参数(如最大并发连接数)。
  • http 块:定义 HTTP 服务器行为(如虚拟主机、反向代理等)。

全局配置示例:

user nginx;# 运行 Nginx 的用户
worker_processes auto;# 自动匹配 CPU 核心数
error_log /var/log/nginx/error.log warn;  # 错误日志路径
pid /var/run/nginx.pid;# 进程 PID 文件位置
events {
    worker_connections 1024;# 每个 worker 进程的最大连接数
    use epoll;# 使用 epoll 高效事件模型(Linux)
}

二. 静态文件服务

Nginx 常用于托管静态资源(HTML、CSS、JS、图片等),配置简单且高效。

http {
    server {
        listen 80;              # 监听 80 端口
        server_name example.com; # 域名或 IP
        location / {
            root /var/www/html;  # 静态文件根目录
            index index.html;    # 默认首页
        }
        # 单独配置图片缓存
        location ~* \.(jpg|png|gif)$ {
            root /var/www/images;
            expires 30d;
         # 客户端缓存 30 天
        }
    }}
  • root:指定静态文件根目录。
  • index:定义默认访问文件。
  • expires:设置浏览器缓存时间,减少服务器负载。

三. 反向代理配置

Nginx 可作为反向代理,将请求转发到后端服务器(如 Tomcat、Node.js、Python 应用等)。

1. 基本反向代理

server {
    listen 80;
    server_name api.example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;  # 转发到本机 8080 端口
        proxy_set_header Host $host;       # 传递原始 Host 头
        proxy_set_header X-Real-IP $remote_addr;  # 传递客户端 IP
    }}
  • proxy_pass:指定后端服务器地址。
  • proxy_set_header:设置 HTTP 请求头,确保后端获取真实客户端信息。

2. 负载均衡

Nginx 可分配请求到多个后端服务器,提高系统可用性。

http {
    upstream backend {
        server 192.168.1.100:8080 weight=3;  # 权重 3,处理更多请求
        server 192.168.1.101:8080;
        server 192.168.1.102:8080 backup;    # 备用服务器
    }
    server {
        listen 80;
        server_name app.example.com;
        location / {
            proxy_pass http://backend;  # 代理到 upstream
            proxy_next_upstream error timeout http_500;  # 故障转移策略
        }
    }}

upstream:定义后端服务器组,支持 weight(权重)、backup(备用)等参数。

proxy_next_upstream:定义何种情况下切换服务器(如超时、500 错误)。

四. HTTPS 安全配置

Nginx 支持 SSL/TLS 配置,可用于加密数据传输,提高安全性。

4.1 基本 HTTPS 配置

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    # 优化 SSL 性能
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    location / {
        root /var/www/html;
        index index.html;
    }}
# HTTP 强制跳转 
HTTPSserver {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
  • ssl_certificate 和 ssl_certificate_key:指定 SSL 证书路径。
  • ssl_protocols 和 ssl_ciphers:配置加密协议,提高安全性。
  • return 301:HTTP 请求自动跳转 HTTPS。

五. 缓存优化

Nginx 可缓存动态内容,减少后端压力,提高响应速度。

1. 代理缓存配置

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
    server {
        listen 80;
        server_name cache.example.com;
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
               # 启用缓存
            proxy_cache_valid 200 302 10m;
     # 缓存 200/302 响应 10 分钟
            proxy_cache_valid 404 1m;
           # 缓存 404 响应 1 分钟
            proxy_cache_key "$scheme$host$request_uri";  # 缓存键
        }
    }}
  • proxy_cache_path:定义缓存存储路径和大小。
  • proxy_cache_valid:设置不同 HTTP 状态码的缓存时间。

六. 日志与访问控制

Nginx 可以记录访问日志,并限制某些 IP 或请求频率。

1. 访问日志配置

http {
    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;
}

2. IP 访问限制

location /admin {
    allow 192.168.1.100;  # 允许特定 IP
    deny all;             # 拒绝其他所有 IP
}

    3. 限流(Rate Limiting)

    http {
        limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
        server {
            location /api {
                limit_req zone=req_limit burst=20 nodelay;  # 每秒 10 请求,允许突发 20
                proxy_pass http://backend;
            }
        }}

    七. 结语

    本文介绍了 Nginx 的常用配置,掌握以后可以灵活运用 Nginx 搭建高性能 Web 服务、API 网关或负载均衡系统。

    关于更多高级功能(如 Lua 脚本、动态模块),读者可自行参考 Nginx 官方文档学习。

    © 版权声明
    THE END
    喜欢就支持一下吧
    点赞14 分享