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

推荐订阅源

N
News and Events Feed by Topic
Malwarebytes
Malwarebytes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
F
Future of Privacy Forum
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
S
Securelist
K
Kaspersky official blog
S
Schneier on Security
T
ThreatConnect
T
Tenable Blog
Spread Privacy
Spread Privacy
T
True Tiger Recordings
AWS News Blog
AWS News Blog
F
Fox-IT International blog
量子位
T
Threatpost
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
U
Unit 42
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
小众软件
小众软件
A
About on SuperTechFans
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

博客园 - lizhigang

Docker 容器部署与运维总结报告 使用 pnpm 构建 Vue2 项目操作总结(Node 16 → Node 22) 前端项目 Docker 镜像构建完整操作总结 Windows 11 下使用 MySQL Workbench 还原多数据库备份文件操作指南 在 WSL2 + Docker Desktop 环境下构建前后端 Docker 镜像 - lizhigang 从内网私有仓库迁移镜像到阿里云 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 添加了所需的白名单规则,服务正常运行。