ngin 反向代理

企业级 Nginx 反向代理配置通常涉及多个方面,包括负载均衡、SSL/TLS 加密、缓存、日志记录等。以下是一个基本的企业级 Nginx 反向代理配置示例:

1. 基本配置

定义上游服务器
upstream backend {
	server 192.168.1.10:8080; 
	server 192.168.1.11:8080; 
	server 192.168.1.12:8080; 
}
server { listen 80; server_name example.com;
# 重定向 HTTP 到 HTTPS
return 301 https://$host$request_uri;
}
server { listen 443 ssl; server_name example.com;
# SSL 配置
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

# 日志配置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

# 反向代理配置
location / {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

# 错误页面配置
error_page 404 /404.html;
location = /404.html {
    internal;
}

# 健康检查
location = /health {
    access_log off;
    return 200 "healthy\n";
}
}

2. 解释

  • upstream:定义后端服务器组,实现负载均衡。
  • listen 80:监听 HTTP 请求,并重定向到 HTTPS。
  • listen 443 ssl:监听 HTTPS 请求。
  • ssl_certificatessl_certificate_key:指定 SSL 证书和私钥的路径。
  • ssl_protocolsssl_ciphers:配置支持的 SSL 协议和加密套件。
  • access_logerror_log:配置访问日志和错误日志的路径。
  • location /:处理所有请求,反向代理到后端服务器。
  • proxy_set_header:设置转发请求头,传递客户端信息。
  • location ~ .(jpg|jpeg|png|gif|ico|css|js)$*:配置静态文件缓存。
  • error_page:配置自定义错误页面。
  • location = /health:配置健康检查接口。

3. 高级配置

  • 会话持久性:使用 ip_hash 实现会话持久性。
upstream backend { 
	ip_hash; 
	server 192.168.1.10:8080; 
	server 192.168.1.11:8080; 
	server 192.168.1.12:8080; 
}
  • 限流:限制每个 IP 的请求速率。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
	... location / { 
		limit_req zone=one burst=5 nodelay; 
		proxy_pass http://backend; ... 
	} 
}
  • 缓存:配置更复杂的缓存策略。
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m; proxy_cache_key "$scheme$request_method$host$request_uri";
server {
	... location / { 
				proxy_cache my_cache; 
				proxy_cache_valid 200 301 302 10m; 
				proxy_cache_valid 404 1m; 
				proxy_pass http://backend; ... 
		}
}

4. 测试和部署

  • 测试配置
sudo nginx -t
  • 重新加载 Nginx
sudo systemctl reload nginx

二,nginx 负载均衡多个项目 企业级配置

在企业级环境中,Nginx 作为负载均衡器可以同时管理多个项目。以下是一个示例配置,展示了如何为多个项目配置负载均衡,包括 SSL/TLS 加密、会话持久性、健康检查等功能。

1. 基本配置

假设我们有两个项目:project1 和 project2,每个项目有多个后端服务器。

# 定义 project1 的后端服务器
upstream project1_backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

# 定义 project2 的后端服务器
upstream project2_backend {
    server 192.168.1.20:8080;
    server 192.168.1.21:8080;
    server 192.168.1.22:8080;
}

# HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name project1.example.com project2.example.com;

    return 301 https://$host$request_uri;
}

# project1 的 HTTPS 配置
server {
    listen 443 ssl;
    server_name project1.example.com;

    ssl_certificate /etc/nginx/ssl/project1.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/project1.example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    access_log /var/log/nginx/project1.access.log;
    error_log /var/log/nginx/project1.error.log;

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

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # 健康检查
    location = /health {
        access_log off;
        return 200 "healthy\n";
    }
}

# project2 的 HTTPS 配置
server {
    listen 443 ssl;
    server_name project2.example.com;

    ssl_certificate /etc/nginx/ssl/project2.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/project2.example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    access_log /var/log/nginx/project2.access.log;
    error_log /var/log/nginx/project2.error.log;

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

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # 健康检查
    location = /health {
        access_log off;
        return 200 "healthy\n";
    }
}

2. 解释

  • upstream:定义每个项目的后端服务器组,实现负载均衡。
  • listen 80:监听 HTTP 请求,并重定向到 HTTPS。
  • listen 443 ssl:监听 HTTPS 请求。
  • ssl_certificate 和 ssl_certificate_key:指定 SSL 证书和私钥的路径。
  • ssl_protocols 和 ssl_ciphers:配置支持的 SSL 协议和加密套件。
  • access_log 和 error_log:配置访问日志和错误日志的路径。
  • location /:处理所有请求,反向代理到后端服务器。
  • proxy_set_header:设置转发请求头,传递客户端信息。
  • *location ~ .(jpg|jpeg|png|gif|ico|css|js)$**:配置静态文件缓存。
  • location = /health:配置健康检查接口。

3. 高级配置

会话持久性
使用 ip_hash 实现会话持久性,确保同一个客户端的请求总是被转发到同一台后端服务器。

upstream project1_backend {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

upstream project2_backend {
    ip_hash;
    server 192.168.1.20:8080;
    server 192.168.1.21:8080;
    server 192.168.1.22:8080;
}

限流

限制每个 IP 的请求速率,防止滥用。

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    ...
    location / {
        limit_req zone=one burst=5 nodelay;
        proxy_pass http://project1_backend;
        ...
    }
}

缓存
配置更复杂的缓存策略。

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";

server {
    ...
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 301 302 10m;
        proxy_cache_valid 404 1m;
        proxy_pass http://project1_backend;
        ...
    }
}

4. 测试和部署

  • 测试配置:
 sudo nginx -t
  • 重新加载 Nginx:
sudo systemctl reload nginx

以上配置示例和解释可以帮助您构建一个基本的企业级 Nginx 负载均衡配置,管理多个项目。根据实际需求,您可以进一步调整和优化配置。

三,nginx 负载均衡怎么调比例

在 Nginx 中,可以通过配置 upstream 块中的 weight 参数来调整各个后端服务器的负载比例。weight 参数决定了每个后端服务器接收请求的权重,权重越高,该服务器接收到的请求越多。
以下是一个示例配置,展示了如何为不同的后端服务器设置不同的权重:
示例配置
假设我们有两个项目:project1 和 project2,每个项目有多个后端服务器,我们希望为这些服务器设置不同的负载比例。

# 定义 project1 的后端服务器
upstream project1_backend {
    server 192.168.1.10:8080 weight=3;  # 权重为3
    server 192.168.1.11:8080 weight=2;  # 权重为2
    server 192.168.1.12:8080 weight=1;  # 权重为1
}

# 定义 project2 的后端服务器
upstream project2_backend {
    server 192.168.1.20:8080 weight=4;  # 权重为4
    server 192.168.1.21:8080 weight=1;  # 权重为1
    server 192.168.1.22:8080 weight=1;  # 权重为1
}

# HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name project1.example.com project2.example.com;

    return 301 https://$host$request_uri;
}

# project1 的 HTTPS 配置
server {
    listen 443 ssl;
    server_name project1.example.com;

    ssl_certificate /etc/nginx/ssl/project1.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/project1.example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    access_log /var/log/nginx/project1.access.log;
    error_log /var/log/nginx/project1.error.log;

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

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # 健康检查
    location = /health {
        access_log off;
        return 200 "healthy\n";
    }
}

# project2 的 HTTPS 配置
server {
    listen 443 ssl;
    server_name project2.example.com;

    ssl_certificate /etc/nginx/ssl/project2.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/project2.example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    access_log /var/log/nginx/project2.access.log;
    error_log /var/log/nginx/project2.error.log;

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

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # 健康检查
    location = /health {
        access_log off;
        return 200 "healthy\n";
    }
}

解释

  • upstream:定义每个项目的后端服务器组。
  • weight:设置每个后端服务器的权重。权重值越高,该服务器接收到的请求越多。
    • server 192.168.1.10:8080 weight=3; 表示 192.168.1.10:8080 的权重为 3。
    • server 192.168.1.11:8080 weight=2; 表示 192.168.1.11:8080 的权重为 2。
    • server 192.168.1.12:8080 weight=1; 表示 192.168.1.12:8080 的权重为 1。
  • 其他配置选项
    • max_fails:设置在失败后标记服务器为不可用之前的最大失败次数。
    • fail_timeout:设置在标记服务器为不可用之后的超时时间。
    • backup:将某个服务器标记为备用服务器,只有在其他服务器都不可用时才会使用。
      例如:
upstream project1_backend {
    server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 weight=2 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:8080 weight=1 backup;
}

测试和部署

  • 测试配置:
 sudo nginx -t
  • 重新加载 Nginx:
 sudo systemctl reload nginx

通过上述配置,您可以根据实际需求调整各个后端服务器的负载比例,确保资源的合理分配。

在 Nginx 的负载均衡配置中,weight 参数用于设置后端服务器的权重。权重决定了该服务器接收请求的概率。具体来说,权重越高,该服务器接收到的请求越多。
weight 参数的含义

  • 默认值:如果未指定 weight,默认值为 1。
  • 权重值:权重值是一个正整数,表示该服务器相对于其他服务器的重要性或处理能力。
    示例解释
    假设我们有以下 upstream 配置:
upstream backend {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 weight=1;
}

在这个配置中:

  • 192.168.1.10:8080 的权重为 3。
  • 192.168.1.11:8080 的权重为 2。
  • 192.168.1.12:8080 的权重为 1。
    负载分配计算
    Nginx 会根据权重值的比例来分配请求。具体计算方法如下:
  1. 总权重:所有服务器的权重之和。
    • 总权重 = 3 + 2 + 1 = 6
  2. 每个服务器的权重比例:
    • 192.168.1.10:8080 的权重比例 = 3 / 6 = 0.5 (50%)
    • 192.168.1.11:8080 的权重比例 = 2 / 6 ≈ 0.333 (33.33%)
    • 192.168.1.12:8080 的权重比例 = 1 / 6 ≈ 0.167 (16.67%)
  3. 请求分配:
    • 大约 50% 的请求会被分配给 192.168.1.10:8080。
    • 大约 33.33% 的请求会被分配给 192.168.1.11:8080。
    • 大约 16.67% 的请求会被分配给 192.168.1.12:8080。
  4. 使用场景
    • 性能差异:如果某些服务器的性能更强,可以为其设置更高的权重,使其承担更多的请求。
    • 资源分配:根据服务器的资源情况(如 CPU、内存、带宽等)调整权重,确保资源的合理利用。
    • 测试和调试:在新服务器上线时,可以先设置较低的权重,逐步增加,观察其性能表现。
  5. 示例配置
upstream project1_backend {
    server 192.168.1.10:8080 weight=3;  # 权重为3
    server 192.168.1.11:8080 weight=2;  # 权重为2
    server 192.168.1.12:8080 weight=1;  # 权重为1
}

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

    location / {
        proxy_pass http://project1_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
posted @ 2024-11-13 14:40  Lafite-1820  阅读(11)  评论(0编辑  收藏  举报