当前位置: 代码网 > 科技>操作系统>Windows > nginx搭建IPv6 ->IPv4反向代理服务器的实现

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

2025年05月27日 Windows 我要评论
背景在实际生产过程中,由于各种原因,我们的在线服务搭建在火山云服务器上,使用火山云包括 ecs、clb、plb 等组件进行网络通信,并且通过专线接受来自某公司内部流量。但是在大概 22~23 年,某公

背景

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

搭建步骤

sudo tar -zxvf nginx-1.18.0.tar.gz
  • 进入 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 # 安装
  • 修改 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; 

            # 传递客户端真实 ip
            proxy_set_header x-real-ip $remote_addr;

            # 清空 connection 头,防止 nginx 误处理长连接
            proxy_set_header connection "";

            # 传递客户端远程地址(用于后端日志分析)
            proxy_set_header remote-host $remote_addr;

            # 传递 x-forwarded-for,记录代理链中的所有 ip
            proxy_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;
    }
}
  • 启动 nginx
mkdir -p /www/wwwlogs
/usr/local/nginx/sbin/nginx

/usr/local/nginx/sbin/nginx -s stop

/usr/local/nginx/sbin/nginx -s reload

ps -ef | grep nginx # 查看服务进程
  • 增加定时任务配置,定期清理 nginx 日志
写个定时任务把 nginx 的日志清一清  /etc/crontab
*  *    * * *   root    echo 1 > /www/wwwlogs/dimc.byted.org.log
*  *    * * *   root    echo 1 > /www/wwwlogs/dimc.byted.org.error.log

nginx 配置中最关键的参数

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

# 设定连接的 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反向代理服务器的实现的文章就介绍到这了,更多相关nginx ipv6反向代理ipv4内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com