告别IP版本困扰:Nginx Proxy Manager双栈网络配置全指南

告别IP版本困扰:Nginx Proxy Manager双栈网络配置全指南

【免费下载链接】nginx-proxy-manager 【免费下载链接】nginx-proxy-manager 项目地址: https://gitcode.com/gh_mirrors/ngi/nginx-proxy-manager

随着IPv6网络的普及,同时支持IPv4和IPv6(双栈网络)已成为现代网络服务的基本要求。Nginx Proxy Manager(以下简称NPM)通过简洁的配置即可实现双栈网络支持,本文将详细介绍配置方法及注意事项。

双栈网络配置原理

NPM通过模板文件控制Nginx的监听规则,核心配置位于backend/templates/_listen.conf。该文件使用条件判断控制IPv4/IPv6监听端口:

listen 80;
{% if ipv6 -%}
  listen [::]:80;
{% else -%}
  #listen [::]:80;
{% endif %}

ipv6变量为真时,Nginx会同时监听IPv4(0.0.0.0:80)和IPv6([::]:80)地址,实现双栈支持。默认站点配置backend/templates/default.conf也遵循相同逻辑:

listen 80 default;
{% if ipv6 -%}
  listen [::]:80 default;
{% else -%}
  #listen [::]:80 default;
{% endif %}

前置条件

在配置双栈网络前,请确保:

  1. 服务器已启用IPv6支持(可通过ip -6 addr命令验证)
  2. Docker环境支持IPv6(参考Docker IPv6文档
  3. NPM版本≥2.9.0(推荐使用最新版)

配置步骤

1. 修改Docker Compose配置

编辑项目根目录的docker-compose.yml文件,确保未禁用IPv6(默认启用)。若存在以下配置请删除或注释:

# 禁用此行
# DISABLE_IPV6: 'true'

完整配置示例参考docs/src/setup/index.md

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'     # IPv4 HTTP
      - '443:443'   # IPv4 HTTPS
      - '81:81'     # 管理界面
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

2. 验证Nginx模板配置

确认以下模板文件包含IPv6条件判断:

以Stream服务为例,backend/templates/stream.conf中包含:

listen {{ port }};
{% if ipv6 -%}
  listen [::]:{{ port }};
{% endif %}

3. 管理界面配置

  1. 登录NPM管理界面(默认端口81)
  2. 导航至设置 > Nginx配置
  3. 确保"启用IPv6"选项已勾选(若使用旧版本可能需要手动修改配置文件)
  4. 点击"应用"并重启Nginx服务

验证配置

配置完成后,可通过以下方法验证:

1. 检查Nginx配置文件

执行命令查看生成的Nginx配置:

docker exec -it nginx-proxy-manager_app_1 cat /etc/nginx/conf.d/default.conf

应同时包含IPv4和IPv6监听:

listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;

2. 网络测试

使用在线工具测试IPv6连通性:

或通过命令行测试:

# 测试IPv4
curl -4 http://yourdomain.com

# 测试IPv6
curl -6 http://yourdomain.com

常见问题解决

问题1:IPv6监听未生效

原因:可能存在DISABLE_IPV6=true环境变量

解决:检查所有配置文件,确保无禁用IPv6的设置,参考backend/templates/stream.conf中的双栈配置:

listen {{ port }};
{% if ipv6 -%}
  listen [::]:{{ port }};
{% else -%}
  #listen [::]:{{ port }};
{% endif %}

问题2:证书申请失败(Let's Encrypt)

原因:ACME验证需要IPv6网络可达

解决:确保IPv6端口443已开放,并检查Nginx ACME配置

{% if ipv6 -%}
server {
  listen [::]:80;
  server_name {{ domain }};
  location /.well-known/acme-challenge/ {
    root /data/letsencrypt-acme-challenge;
  }
}
{% endif %}

高级配置

自定义IPv6地址

如需指定特定IPv6地址监听,可修改Nginx模板文件

# 修改前
listen [::]:80;

# 修改后
listen [2001:db8::1]:80;

IPv6访问控制

通过Nginx访问控制模块限制IPv6访问,配置示例:

allow 2001:db8::/32;
deny all;

总结

通过本文配置,NPM将同时监听IPv4和IPv6地址,实现真正的双栈网络支持。核心配置文件包括:

完整功能列表可参考docs/src/guide/index.md,建议定期更新NPM以获取最新的IPv6功能支持。

【免费下载链接】nginx-proxy-manager 【免费下载链接】nginx-proxy-manager 项目地址: https://gitcode.com/gh_mirrors/ngi/nginx-proxy-manager

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值