惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
Latest news
Latest news
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
AI
AI
阮一峰的网络日志
阮一峰的网络日志
量子位
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
Google Online Security Blog
Google Online Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
大猫的无限游戏
大猫的无限游戏
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Spread Privacy
Spread Privacy
C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
W
WeLiveSecurity
博客园 - Franky
Last Week in AI
Last Week in AI
博客园 - 聂微东
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
IT之家
IT之家
I
Intezer
The Cloudflare Blog
月光博客
月光博客
N
News | PayPal Newsroom
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
博客园_首页
罗磊的独立博客
NISL@THU
NISL@THU
爱范儿
爱范儿
Jina AI
Jina AI
有赞技术团队
有赞技术团队
The Hacker News
The Hacker News
A
Arctic Wolf
Scott Helme
Scott Helme
Engineering at Meta
Engineering at Meta
P
Proofpoint News Feed

博客园 - lizhigang

DBeaver 打开 utf8的sql文件 SMT 贴片机与 MES 系统集成指南 容器访问外部服务(10.100.1.90:9090)防火墙规则配置总结 Docker 容器间通信故障排查与修复操作总结 Docker 容器部署与运维总结报告 使用 pnpm 构建 Vue2 项目操作总结(Node 16 → Node 22) 前端项目 Docker 镜像构建完整操作总结 Windows 11 下使用 MySQL Workbench 还原多数据库备份文件操作指南 在 WSL2 + Docker Desktop 环境下构建前后端 Docker 镜像 从内网私有仓库迁移镜像到阿里云 ACR 完整指南 wsl网络设置允许访问ssh(端口22) 在 Windows 11 上安装 Docker Nginx配置 访问数据库报错 Windows系统运行RuoYi-Vue完整指南 RuoYi-Vue 项目结构分析 win11 报错 windows 11 如何使用 Microsoft Hyper-V VMware 替代产品 IntelliJ IDEA 社区版支持 Spring Boot 开发说明文档 imes开发部署(IDEA社区版 差异) IntelliJ IDEA 社区版默认支持 Spring Boot 吗? imes开发部署 IDEA 端口被占用 解决办法 使用MySQL Workbench进行数据库备份 ruoyi-nbcio ktg-mes、ktm-mes-ui部署 Widows下安装和配置Redis Windows下Redis安装与配置全攻略 mes开源 imes:注意 若依框架:开源
Nginx Docker 容器白名单配置操作总结
lizhigang · 2026-05-25 · via 博客园 - lizhigang

https://chat.deepseek.com/share/rwuvdw76meydyzbpmc

Nginx Docker 容器白名单配置操作总结

一、背景信息

  • 容器名称ry-mes-font-service-1.1
  • 服务:Nginx(官方镜像)
  • 配置文件容器内路径/etc/nginx/conf.d/default.conf
  • 配置文件宿主机路径/home/wangh/mes_font/default.conf
  • 挂载方式-v /home/wangh/mes_font/default.conf:/etc/nginx/conf.d/default.conf
  • 需求:在 Nginx 的 location / 块中新增 IP 白名单,允许 10.204.52.4110.66.17.1710.66.17.108 访问,其他 IP 全部拒绝。

二、完整操作流程

步骤1:查看当前配置(确认现状)

# 查看 conf.d 目录
docker exec ry-mes-font-service-1.1 ls -la /etc/nginx/conf.d/

# 查看现有 default.conf 内容
docker exec ry-mes-font-service-1.1 cat /etc/nginx/conf.d/default.conf

步骤2:修改宿主机上的配置文件

使用 vim 编辑宿主机挂载的源文件:

vim /home/wangh/mes_font/default.conf

具体编辑操作:

  • i 进入插入模式
  • 使用方向键移动光标到 deny all; 行的正上方
  • 按回车换行,依次输入以下内容(每行一条):
    allow 10.204.52.41;
    allow 10.66.17.17;
    allow 10.66.17.108;
    
  • Esc 退出插入模式
  • 输入 :wq 并回车,保存并退出 vim

步骤3:尝试热加载(未生效,作为记录)

docker exec ry-mes-font-service-1.1 nginx -s reload

终端输出提示:

2026/05/19 01:40:15 [notice] 137#137: signal process started

此时通过以下命令验证,发现新规则未出现:

docker exec ry-mes-font-service-1.1 cat /etc/nginx/conf.d/default.conf | grep -B 5 "deny  all"

步骤4:重启容器(使配置生效)

docker restart ry-mes-font-service-1.1

步骤5:验证配置已生效

docker exec ry-mes-font-service-1.1 cat /etc/nginx/conf.d/default.conf | grep -B 5 "deny  all"

成功输出示例:

         allow 10.202.16.115;
         allow 10.202.16.194;
         allow 10.204.52.41;
         allow 10.66.17.17;
         allow 10.66.17.108;
         deny  all;

至此,白名单配置成功生效。


三、问题分析与说明

1. 为什么 nginx -s reload 热加载未生效?

  • 直接原因:宿主机上使用 vim 编辑并保存文件时,vim 默认采用“删除原文件 → 创建新文件”的方式,导致文件的 inode(索引节点)发生改变。
  • 深层原因:容器内的 Nginx 进程通过挂载卷持有旧文件的 inode 句柄。执行 nginx -s reload 时,Nginx 虽重新读取配置,但仍指向已被删除的旧文件缓存,因此新规则未能加载。
  • 解决方式:重启容器(docker restart)会彻底销毁旧进程并创建新进程,新进程重新打开挂载文件,获取最新内容。

2. 其他注意事项

  • grep 验证技巧:使用 grep -B 5 "deny all" 可以查看 deny all 之前的 5 行内容,避免因搜索词不完全匹配导致的误判(例如 10.204.52 无法匹配 10.204.52.41)。
  • vim 交换文件警告:如果之前 vim 异常退出,再次打开时会提示 .swp 文件存在。处理方法:按 Q 退出警告界面,然后执行 rm /home/wangh/mes_font/.default.conf.swp 删除交换文件。

四、推荐的最佳实践(避免重启容器)

方法一:进入容器内部修改配置(最可靠)

# 1. 进入容器终端
docker exec -it ry-mes-font-service-1.1 /bin/bash

# 2. 安装 vim(官方 Nginx 镜像默认没有编辑器)
apt-get update && apt-get install -y vim -y

# 3. 编辑配置文件
vim /etc/nginx/conf.d/default.conf

# 4. 检查语法
nginx -t

# 5. 热加载
nginx -s reload

# 6. 退出容器
exit

优点:无 inode 变化问题,nginx -s reload 一定生效,无需重启容器。

方法二:宿主机修改但保持 inode 不变(使用重定向覆盖)

# 复制一份临时文件
cp /home/wangh/mes_font/default.conf /home/wangh/mes_font/default.conf.new

# 编辑临时文件
vim /home/wangh/mes_font/default.conf.new

# 用重定向覆盖原文件(inode 保持不变)
cat /home/wangh/mes_font/default.conf.new > /home/wangh/mes_font/default.conf

# 热加载
docker exec ry-mes-font-service-1.1 nginx -s reload

五、常用验证命令汇总

目的 命令
查看完整 location / docker exec ry-mes-font-service-1.1 cat /etc/nginx/conf.d/default.conf | grep -A 20 "location /"
查看白名单区域(deny all 前) docker exec ry-mes-font-service-1.1 cat /etc/nginx/conf.d/default.conf | grep -B 10 "deny all"
搜索特定 IP 或网段 docker exec ry-mes-font-service-1.1 cat /etc/nginx/conf.d/default.conf | grep "10.204.52."
检查 Nginx 语法 docker exec ry-mes-font-service-1.1 nginx -t
平滑重载配置 docker exec ry-mes-font-service-1.1 nginx -s reload

六、总结要点

  1. 修改挂载的配置文件后,如果 nginx -s reload 不生效,请重启容器docker restart <容器名>
  2. 生产环境推荐进入容器内部修改,避免 reload 失效问题。
  3. 验证配置时使用 grep -B 查看上下文,避免因搜索词不完整造成误判。
  4. vim 编辑时正常保存退出,如遇 .swp 残留,删除即可。

本次操作最终成功为 Nginx 添加了所需的白名单规则,服务正常运行。