首页 > 其他分享 >ngin 反向代理

ngin 反向代理

时间:2024-11-13 14:45:09浏览次数:1  
标签:ngin 8080 log 代理 192.168 server ssl 反向 proxy

企业级 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;
    }
}

标签:ngin,8080,log,代理,192.168,server,ssl,反向,proxy
From: https://www.cnblogs.com/hefeng2014/p/18543870

相关文章

  • nginx代理minio的websocket问题,求解决!!!
    1.问题描述nginx代理minio集群,web控制台浏览buckets下的列表一直在loading...,不使用nginx代理地址,通过minio集群直接访问是没有问题的从报错来看是websocket连接失败问题,按照官方文档以及其他博主的方式都配置了,仍未解决!!!!!  2.minio镜像版本:minio/minio:RELEASE.2024-11......
  • 计算引擎engine2x的枚举获取api
    直接代码:API=>:POST'http://ip:port/api/portal/operat'Content-Type:application/x-www-form-urlencodedac=get_enum_items_by_idid=d6bf6e1bf7f34a59b9a8bca61a7ef9f9//ajaxvarsettings={"url":"http://ip:port/api/portal/ope......
  • Nginx的日志切割 logrotate 方式
    基本centos7系统已自带logrotate,其他系统并未测试新建nginx日志任务vi/etc/logrotate.d/nginx/usr/local/nginx/logs/access.log {dailyrotate7missingokdateextnocompressdelaycompressnotifemptysharedscriptspostrotate  [-e/usr/local/nginx/logs/ng......
  • 【nginx安全】Nginx日志安全分析脚本
    Nginx日志的重要性和必要性我们知道Nginx属于是程序日志的范畴,相对于系统日志来说层级要低一些了,但对于站长来说是至关重要的。因为Nginx日志里记录着站点来访的所有信息,无论是正常访客还是恶意请求都会在日志里留下痕迹,比如:被采集、恶意刷流量、暴力破解、漏洞扫描、恶意代......
  • [运维][Nginx]Nginx学习(1/5)--Nginx基础
    Nginx简介背景介绍Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一提的是伊戈尔·赛索耶夫将Nginx的源码......
  • 2025年工程管理与安全工程国际学术会议 (EMSE 2025) 2025 International Conference
    重要信息官网:https://ais.cn/u/vEbMBz......
  • 为什么需要使用代理进行SEO?
    代理有许多有用的功能,因此如果不将这些功能应用于互联网营销的主要驱动力之一——SEO,那会很可惜。在本文中,我们将探讨如何利用代理来增强营销策略,并以安全可靠的方式充分利用在线业务。一、什么是SEO?让我们快速回顾一下基础知识。搜索引擎优化(简称SEO)是增加从搜索引擎访问......
  • 使用Nginx反向代理解决http和https跨域问题
    使用Nginx作为反向代理来解决HTTP和HTTPS跨域问题,主要涉及到配置Nginx以添加CORS(跨源资源共享)相关的响应头。以下是具体的配置步骤和解释:通过上述配置,Nginx可以作为反向代理服务器,解决HTTP和HTTPS的跨域问题,同时确保通信的安全性和效率。配置CORS响应头:在Nginx的配置文件......
  • go websocket 服务 及 应用 nginx 的配置
    gowebsocket开启服务ws,wss服务5001对应的是ws,5000对应的是wssgofunc(){ iferr:=r.Run(fmt.Sprintf(":%d",c.WsPort));err!=nil{ global.Logger.Panic("启动失败ws:",err) }}()iferr:=r.RunTLS(fmt.Sprintf(":%d",c.WssPort......
  • 在Linux中使用Nginx和Docker进行项目部署
    前言随着云计算和微服务架构的发展,容器化技术如Docker变得越来越重要。本篇文章将向大家介绍如何在Linux操作系统中使用Nginx作为Web服务器,并结合Docker容器化技术来部署一个简单的Web应用。通过本文,你将学会基本的Linux命令、Nginx的安装与配置,以及如何使用Docker进行应用部......