nginx 搭建 IPv6 -> IPv4 反向代理服务器

ops/2025/2/28 12:37:16/

背景

在实际生产过程中,由于各种原因,我们的在线服务搭建在火山云服务器上,使用火山云包括 ECS、CLB、PLB 等组件进行网络通信,并且通过专线接受来自某公司内部流量。但是在大概 22~23 年,某公司要把所有网络流量变为 IPv6 往下发,火山云的 CLB 和 PLB 还不支持 IPv6,那我们就面临着断流的风险。经调研和学习,了解到可以通过 nginx 来搭建一个反向代理服务里,把 IPv6 的流量转成 IPv4 往下发,这样就解决了我们的问题。本篇文章也是记录一下当时的搭建过程和步骤,以及踩过的坑。

搭建步骤

  1. nginx 官网下载稳定版本的 nginx 包。https://nginx.org/en/download.html
  2. 解压。
sudo tar -zxvf nginx-1.18.0.tar.gz
  1. 进入 nginx 目录并进行安装。
cd nginx-1.18.0
apt-get update
sudo apt-get install libpcre3-dev
./configure --prefix=/usr/local/nginx --with-stream
make # 编译
make install # 安装
  1. 修改 nginx 配置信息。
cd ../conf
cp nginx.conf nginx.conf.bak
vim nginx.conf
# 设置 nginx 运行的用户(通常为 nobody 或 www-data)
# user  nobody;# 指定 nginx 的工作进程数量,auto 表示自动根据 CPU 核心数调整
worker_processes  auto;# 设定错误日志路径及日志级别(默认是 error,可选 notice、info 等)
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;# 指定 nginx 运行时的 PID 文件存放路径
# pid        logs/nginx.pid;events {# 每个 worker 进程允许的最大并发连接数worker_connections  65535;
}http {# 引入 MIME 类型配置文件,确保 nginx 识别各种文件类型include       mime.types;# 设置默认的 MIME 类型,避免未识别的文件变成纯文本default_type  application/octet-stream;# 定义日志格式($remote_addr:客户端 IP,$request:请求内容,$status:状态码等)# 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  logs/access.log  main;# 启用 sendfile 以优化文件传输性能sendfile        on;# 结合 sendfile 使用,减少 TCP 发送延迟(但可能影响小数据包传输)# tcp_nopush     on;# 设定连接的 Keep-Alive 超时时间(0 代表关闭 keep-alive)# keepalive_timeout  0;keepalive_timeout  120s;# 设定一个连接内最大请求数,避免长连接占用过多资源keepalive_requests 100000;# 启用 gzip 压缩,提高传输效率(默认关闭)# gzip  on;server {# 监听 IPv4 80 端口(默认情况下,这行被注释)# listen 80;# 监听 IPv4 443 端口(用于 HTTPS,默认情况下被注释)# listen 443;# 监听 IPv6 80 端口(默认启用)listen [::]:80;# 服务器的域名(需要修改为你的实际域名)server_name aaa.bbb.ccc;# 访问日志存储路径access_log  /www/wwwlogs/aaa.bbb.ccc.log;# 错误日志存储路径error_log  /www/wwwlogs/aaa.bbb.ccc.error.log;location / {# 代理请求使用 HTTP/1.1(避免 HTTP/1.0 造成的连接复用问题)proxy_http_version 1.1;# 代理请求时设置 Host 头,防止后端服务因 Host 变更异常proxy_set_header Host aaa.bbb.ccc:80; # 传递客户端真实 IPproxy_set_header X-Real-IP $remote_addr;# 清空 Connection 头,防止 nginx 误处理长连接proxy_set_header Connection "";# 传递客户端远程地址(用于后端日志分析)proxy_set_header REMOTE-HOST $remote_addr;# 传递 X-Forwarded-For,记录代理链中的所有 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 代理请求转发到 upstream 定义的 backend 服务器proxy_pass http://backend;}}upstream backend {# 配置上游服务器(负载均衡后端)# 这里的 IP 为 nginx 下发流量的后端服务器 IP(可以添加多个)server 192.0.0.1:80 weight=10 max_fails=5;# keepalive 连接池大小,减少 TCP 连接建立的开销keepalive 100000;}
}
  1. 启动 nginx
mkdir -p /www/wwwlogs
/usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx -s stop/usr/local/nginx/sbin/nginx -s reloadps -ef | grep nginx # 查看服务进程
  1. 增加定时任务配置,定期清理 nginx 日志
写个定时任务把 nginx 的日志清一清  /etc/crontab
*  *    * * *   root    echo 1 > /www/wwwlogs/dimc.byted.org.log
*  *    * * *   root    echo 1 > /www/wwwlogs/dimc.byted.org.error.log

nginx__158">nginx 配置中最关键的参数

  1. listen [::]:80; # 这里表示你要监听所有 IPv6 的 80 端口流量。
    
  2. nginx 使用长连接,防止高并发场景下因连接数消耗完导致的性能瓶颈。

    参考文档:https://blog.51cto.com/lookingdream/2487955

# 设定连接的 Keep-Alive 超时时间(0 代表关闭 keep-alive)
# keepalive_timeout  0;
keepalive_timeout  120s;# 设定一个连接内最大请求数,避免长连接占用过多资源
keepalive_requests 100000;proxy_http_version 1.1; # 在 http 1.1 版本之后才支持长连接,所以这一点非常重要
proxy_set_header Connection ""; # 设置 Connection 为长连接,默认为 no

http://www.ppmy.cn/ops/161962.html

相关文章

C#与AI的交互(以DeepSeek为例)

C#与ai的交互 与AI的交互使用的Http请求的方式,通过发送请求,服务器响应ai生成的文本 下面是完整的代码,我这里使用的是Ollama本地部署的deepseek,在联网调用api时,则url会有不同 public class OllamaRequester {[Se…

十一、大数据治理平台总体功能架构

大数据治理平台的功能架构图中心主题:数据治理 核心重点是建立健全大数据资产管理框架,确保数据质量、安全性、可访问性和合规性。 大数据治理平台总体功能架构图 关键功能领域 1.数据资产平台(左侧) 此部分主要关注数据资产本身…

Stale file handle

Stale file handle 错误通常表示文件句柄已失效,这往往在多种场景下出现,下面为你详细分析可能的原因及对应的解决办法。 可能的原因 NFS(网络文件系统)挂载问题 当 NFS 服务器端的文件系统结构发生改变,例如文件被移…

Windows 11【1001问】安装Windows 11的六种方法

随着科技的进步和用户需求的变化,操作系统作为连接硬件与软件的关键桥梁,其安装方式也日益多样化。对于最新的Windows 11操作系统而言,微软提供了多种灵活且高效的安装方案,以满足不同用户群体的需求。无论是个人用户还是企业管理…

AE 安装包 绿色版(Win,Mac)(2018-2025)合集

下载链接:https://pan.baidu.com/s/1LLv1tSXJxUcv6iOlcAHJEg?pwd1234 导语:Adobe After Effects以98%的影视特效覆盖率和跨平台协作能力,稳居全球视觉设计工具榜首。本教程涵盖环境配置、核心功能、插件生态、影视实战、性能优化五大模块&a…

在线抽奖系统——管理员登录

目录 获取验证码 时序图 集成阿里云短信服务 SMSUtil 验证码生成 约定前后端交互接口 controller 层接口设计 Service 层接口设计 Redis sendVerificationCode getVerificationCode 接口测试 JWT JWTUtil 定义拦截器 配置拦截路径 用户登录 时序图 验证码登…

50周学习go语言:第五周 复合类型与词频统计

以下是第五周复合类型(数组、切片与映射)的详细学习内容,按照第四周的深度要求设计: 第五周:复合类型与词频统计 一、复合类型详解 1. 数组(Array) // 声明与初始化 var arr1 [3]int …

GoLand 安装包 绿色版 Win,Mac,Linux 包含IntelliJ全家桶 专为Go语言设计的集成开发环境(IDE)

下载链接: https://pan.baidu.com/s/1cfkJf6Zgxc1XfYrVpwtHkA?pwd1234 导语:JetBrains旗下GoLand以智能代码补全率98%、深度Go模块支持和跨平台调试工具,成为2025年Gopher首选IDE。本文涵盖环境配置、效率革命、框架集成、性能调优、团队协…