当前位置: 首页 > article >正文

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

背景

在实际生产过程中,由于各种原因,我们的在线服务搭建在火山云服务器上,使用火山云包括 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 配置中最关键的参数

  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

相关文章:

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

背景 在实际生产过程中,由于各种原因,我们的在线服务搭建在火山云服务器上,使用火山云包括 ECS、CLB、PLB 等组件进行网络通信,并且通过专线接受来自某公司内部流量。但是在大概 22~23 年,某公司要把所有网络流量变为…...

湖北中医药大学谱度众合(武汉)生命科技有限公司研究生工作站揭牌

2025年2月11日,湖北中医药大学&谱度众合(武汉)生命科技有限公司研究生工作站揭牌仪式在武汉生物技术研究院一楼101会议室举行,湖北中医药大学研究生院院长刘娅教授、基础医学院院长孔明望教授、基础医学院赵敏教授、基础医学院…...

面试基础---深入解析 AQS

深入解析 AQS:从源码到实践,剖析 ReentrantLock 和 Semaphore 的实现 引言 在 Java 并发编程中,AbstractQueuedSynchronizer(AQS)是一个核心框架,它为构建锁和其他同步器提供了基础支持。ReentrantLock 和…...

go 语言中的线程池

使用 goroutine 和 channel Go 语言中并没有直接类似 Java 线程池的内建概念,但它提供了类似的功能,主要通过goroutine和channel来实现并发处理。你可以通过结合这两者来实现一个“线程池”的功能。 在 Go 中,goroutine是轻量级的线程&…...

从 0 到 1,用 Python 构建超实用 Web 实时聊天应用

从 0 到 1,用 Python 构建超实用 Web 实时聊天应用 本文深入剖析如何运用 Python 的 Flask 框架与 SocketIO 扩展,搭建一个功能完备的 Web 实时聊天应用。从环境搭建、前后端代码实现,到最终运行展示,逐步拆解关键步骤&#xff0…...

AF3 DataPipeline类process_multiseq_fasta 方法解读

AlphaFold3 data_pipeline 模块DataPipeline类的 process_multiseq_fasta 方法用于处理多序列 FASTA 文件,生成 AlphaFold3 结构预测所需的特征,适用于多链复合物的预测。它结合了 Minkyung Baek 在 Twitter 上提出的“AlphaFold-Gap”策略,即通过在多链 MSA 中插入固定长度…...

Vue2+Element实现Excel文件上传下载预览【超详细图解】

目录 一、需求背景 二、落地实现 1.文件上传 图片示例 HTML代码 业务代码 2.文件下载 图片示例 方式一:代码 方式二:代码 3.文件预览 图片示例 方式一:代码 方式二:代码 一、需求背景 在一个愉快的年后&#xff…...

[记录贴] 火绒奇怪的进程保护

最近一次更新火绒6.0到最新版,发现processhacker的结束进程功能无法杀掉火绒的进程,弹窗提示如下: 可能是打开进程时做了权限过滤,火绒注册了两个回调函数如下: 但奇怪的是,在另外一台机器上面更新到最新版…...

【蓝桥杯】每天一题,理解逻辑(1/90)【Leetcode 移动零】

文章目录 题目解析讲解算法原理【双指针算法思路】(数组下标充当指针)如何划分和执行过程大致 代码详情 题目解析 题目链接:https://leetcode.cn/problems/move-zeroes/description/ 题目意思解析 把所有的零移动到数组的末尾保持非零元素的相对顺序 理解了这两层…...

vue js-web-screen-shot浏览器截取其他非全屏窗口界面

网页截屏 js-web-screen-shot 截取其他窗口 显示不全问题 npm 安装 js-web-screen-shot npm install js-web-screen-shot --savejs-web-screen-shot默认截屏是从左下角开始的,修改成左上角开始,然后编辑cropBoxInfo参数宽高进行截取,目前截…...

pycharm远程连接服务器运行pytorch

Linux部署pytorch 背景介绍 不同的开源代码可能需要不同的实验环境和版本,这时候的确体现出Anaconda管理环境的好处了,分别搞一个独立环境方便管理。 有的教程建议选择较旧的版本,但笔者建议在条件允许的情况下安装最新版,本次…...

服务器虚拟化是一种将物理服务器资源(如CPU、内存、存储、网络等)通过软件技术抽象、分割和整合,创建多个独立、隔离的虚拟服务器(虚拟机,VM)的技术。

服务器虚拟化是一种将物理服务器资源(如CPU、内存、存储、网络等)通过软件技术抽象、分割和整合,创建多个独立、隔离的虚拟服务器(虚拟机,VM)的技术。每个虚拟机可以运行不同的操作系统和应用程序,如同独立的物理服务器一样工作。 核心思想 资源池化:将物理服务器的硬…...

java练习(41)

ps:题目来自力扣 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 import java.util.Arrays;class Solut…...

关于CanvasRenderer.SyncTransform触发调用的机制

1)关于CanvasRenderer.SyncTransform触发调用的机制 2)小游戏Spine裁剪掉帧问题 3)Dedicated Server性能问题 4).mp4视频放入RT进行渲染的性能分析闭坑指南 这是第421篇UWA技术知识分享的推送,精选了UWA社区的热门话题…...

【计算机网络】OSI模型、TCP/IP模型、路由器、集线器、交换机

一、计算机网络分层结构 计算机网络分层结构 指将计算机网络的功能划分为多个层次,每个层次都有其特定的功能和协议,并且层次之间通过接口进行通信。 分层设计的优势: 模块化:各层独立发展(如IPv4→IPv6&#xff0c…...

PDF扫描档智能方向识别:多模型投票机制的实践测试 救活古典书籍

2025-02-22 20:10物联全栈123 尊敬的诸位!我是一名物联网工程师。关注我,持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与 AI 的无尽可能 RAG知识库搭建的过程中,扫描档pdf的支持和准确率一直是个大家都不愿主动提起的事情…...

java23种设计模式-桥接模式

桥接模式(Bridge Pattern)学习笔记 🌟 定义 桥接模式属于结构型设计模式,将抽象部分与实现部分分离,使它们可以独立变化。通过组合代替继承的方式,解决多维度的扩展问题,防止类爆炸。 &#x…...

【11】RUST使用cargo组织crate

文章目录 使用cargo组织crate重导出编译文档生成测试 cargo组织工作空间 TODOcrate.io账号 TODO暂时不看发布crate 使用cargo组织crate 重导出 在模块顶部使用pub use self::重导出,方便使用模块时候直接使用use mod_X::xxx。从而隐藏crate内部模块的结构。方便向…...

springboot 引入前端

前端 打包 npm run build vue.config.js 文件 publicPath 默认建议保持 / publicPath: ‘/’ 后端 目录 粘贴下面目录之一: src/main/resources/static/ src/main/resources/public/ 补充(用的少) server:servlet:context-path: /thirdAdm…...

ubuntu20.04 使用nmcli 连接wifi,并且设置永久连接

在 Ubuntu 20.04 中,你可以使用 nmcli 命令行工具来连接 WiFi 并设置为永久连接。以下是具体步骤: 1. 查看可用的 WiFi 网络 首先,使用以下命令查看可用的 WiFi 网络: nmcli dev wifi 这将列出所有可用的 WiFi 网络及其 SSID。…...

Android-创建mipmap-anydpi-v26的Logo

利用 Android Studio 自动创建 创建新项目:打开 Android Studio,点击 “Start a new Android Studio project” 创建新项目。在创建项目的过程中,当设置Target SDK Version为 26 或更高版本时,Android Studio 会在项目的res目录下…...

轻松搭建:使用Anaconda创建虚拟环境并在PyCharm中配置

一、使用Anaconda创建虚拟环境 1. 安装Anaconda 2..conda常用的命令 3. 创建虚拟环境-以搭建MachineVision为例 4. 激活虚拟环境 5. 安装依赖包 二、PyCharm配置环境 在进行Python项目开发时,合理的环境管理是必不可少的,特别是当你在多个项目中…...

驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线

一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…...

结构型模式 - 代理模式 (Proxy Pattern)

结构型模式 - 代理模式 (Proxy Pattern) 代理模式是一种结构型设计模式,它允许通过代理对象来控制对另一个对象(目标对象)的访问。代理对象充当目标对象的接口,客户端通过代理对象间接访问目标对象。 分为两大类 静态代理&#…...

Ubuntu 24.04 登录禁用用户列表

Ubuntu 24.04 登录禁用用户列表 得到登录用户列表状态禁用登录用户列表 得到登录用户列表状态 gsettings get org.gnome.login-screen disable-user-list禁用登录用户列表 gsettings get org.gnome.login-screen disable-user-list true...

MinIO整合SpringBoot实现文件上传、下载

文章目录 配置1. 部署MinIO服务2. 整合SpringBoot 功能实现1. 文件上传2. 文件下载 总结 配置 1. 部署MinIO服务 这里以docker为例: 安装minio命令docker run -p 9000:9000 -p 9001:9001 \ --name minio \ -v /path/to/data:/data \ -e "MINIO_ROOT_USERmin…...

【Python爬虫(90)】以Python爬虫为眼,洞察金融科技监管风云

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…...

FreeRTOS(3)列表List

在 FreeRTOS 的源码中大量地使用了列表和列表项,因此想要深入学习 FreeRTOS,列表和列表项是必备的基础知识。这里所说的列表和列表项,是 FreeRTOS 源码中 List 和 List Item 的 直译,事实上, FreeRTOS 中的列表和列表项…...

C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化

欢迎来到zhooyu的C++和OpenGL游戏专栏,专栏连载的所有精彩内容目录详见下边链接: 🔥C++和OpenGL实现3D游戏编程【总览】 1、本节实现的内容 上一节课,我们在Blend软件中导出经纬球模型时,遇到了经纬球法线导致我们在游戏中模型光照显示问题,我们在Blender软件中可以通过…...

Harmony开发笔记(未完成)

一、感想 作为一名拥有11年经验的Android开发者,我亲历了Android从高速发展到如今面临“僧多粥少”的过程。技术的世界瞬息万变,没有一种技术能够让人依赖一辈子。去年初,我自学了鸿蒙系统,并顺利通过了鸿蒙官方的初级和高级认。…...