告别IP版本困扰: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 %}
前置条件
在配置双栈网络前,请确保:
- 服务器已启用IPv6支持(可通过
ip -6 addr命令验证) - Docker环境支持IPv6(参考Docker IPv6文档)
- 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条件判断:
- backend/templates/proxy_host.conf - 代理主机配置
- backend/templates/stream.conf - 流服务配置
- backend/templates/redirection_host.conf - 重定向主机配置
以Stream服务为例,backend/templates/stream.conf中包含:
listen {{ port }};
{% if ipv6 -%}
listen [::]:{{ port }};
{% endif %}
3. 管理界面配置
- 登录NPM管理界面(默认端口81)
- 导航至设置 > Nginx配置
- 确保"启用IPv6"选项已勾选(若使用旧版本可能需要手动修改配置文件)
- 点击"应用"并重启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地址,实现真正的双栈网络支持。核心配置文件包括:
- backend/templates/_listen.conf - 基础监听配置
- backend/templates/default.conf - 默认站点配置
- docker-compose.yml - 容器环境配置
完整功能列表可参考docs/src/guide/index.md,建议定期更新NPM以获取最新的IPv6功能支持。
【免费下载链接】nginx-proxy-manager 项目地址: https://gitcode.com/gh_mirrors/ngi/nginx-proxy-manager
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



