Nginx 面试题
0. 正向代理 vs 反向代理
核心区别只有一个:代理的对象不同。
- 正向代理:代理的是客户端。客户端主动配置代理服务器再去访问目标站点,目标站点看不到真实客户端。
- 反向代理:代理的是服务端。客户端直接访问代理服务器,代理再转发给后端业务服务器,客户端看不到真实后端。
一句话:代理哪一端,就隐藏哪一端。
正向代理
- 访问流程:客户端 -> 代理服务器 -> 目标服务器
- 场景:科学上网、企业统一外网出口
反向代理
- 访问流程:客户端 -> 反向代理(Nginx)-> 后端服务器集群
- 场景:负载均衡、统一入口、隐藏后端、SSL 终止
Nginx 反向代理示例:
location / {
proxy_pass http://127.0.0.1:8080;
}
通俗解释:
把 Nginx 当成商场前台。顾客只和前台打交道,前台再把事情分给不同柜台处理。
1. Nginx 负载均衡有哪些策略
常见策略:
- 轮询(默认):按顺序分发请求。
- 权重(
weight):机器性能强就给更高权重。 ip_hash:同一来源 IP 尽量落到同一台机器。least_conn:优先分配给当前连接数最少的机器。
轮询 / 权重示例
upstream backend {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=3;
}
ip_hash 示例
upstream backend {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
least_conn 示例
upstream backend {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
补充说明:
fair(按响应时间)通常是第三方模块能力,不是 Nginx 官方默认内置策略。ip_hash不是绝对“性能低”,它的主要问题是扩缩容时重映射影响会话,且对 NAT 场景不够友好;现代系统更常用无状态登录(JWT/Token)配合共享会话存储。
通俗解释:
负载均衡像餐厅分桌。轮询是按顺序排号,权重是给大桌多安排人,least_conn 是看哪桌人最少先安排。
2. Nginx 是什么,有什么特点
Nginx 是高性能 HTTP 服务器、反向代理服务器,也可做负载均衡和邮件代理。
特点:
- 内存占用小,并发能力强
- 异步非阻塞,事件驱动
- 适合做反向代理、动静分离、负载均衡
- 稳定性和扩展性高
通俗解释:
Nginx 适合做“入口网关”,让后端应用专注业务逻辑。
3. Nginx 为什么高并发、高性能
- 多进程 + 事件驱动模型(Linux 常见是 epoll)
master管理进程,worker处理请求- 每个
worker单线程也能同时处理大量连接 - 避免频繁创建线程/进程,减少系统开销
通俗解释:
它不是“一个请求一个线程”那种重模式,而是一个人同时盯很多请求,谁准备好了就先处理谁。
4. Nginx 的 master 和 worker 进程作用
master:读取配置、管理worker、接收信号(重载配置、平滑重启)worker:真正处理网络请求和响应
通俗解释:master 像调度主管,worker 像一线客服。
5. 什么是动静分离,Nginx 如何做
将静态资源(html/css/js/img)和动态接口分开处理。
- 静态资源:Nginx 直接返回
- 动态请求:Nginx 转发给 Java/SpringBoot 等后端服务
示例:
location ~ .*\.(html|css|js|jpg|png)$ {
root /static;
expires 7d;
}
location /api/ {
proxy_pass http://backend;
}
通俗解释:
图片、样式这些“现成货”前台直接给;要查数据库的“定制单”再交后厨。
6. Nginx 如何实现高可用
- 部署多台 Nginx
- 用 Keepalived 提供 VIP(虚拟 IP)
- 主节点故障时自动切换到备节点
- 下游继续用
upstream做业务负载均衡
通俗解释:
像双机热备,一个入口挂了,另一个立刻顶上。
7. Nginx 常用优化配置
worker_processes一般设为 CPU 核数worker_connections按并发需求调大- 启用
keepalive长连接 - 启用
gzip压缩 - 对静态资源设置
expires - 隐藏版本号(
server_tokens off;) - 加限流限连(如
limit_req、limit_conn)
通俗解释:
优化本质上是三件事:少建连接、少传字节、少被恶意请求拖垮。
8. Nginx location 匹配规则
常见优先级(高到低):
=精确匹配^~前缀匹配(命中后不再走正则)~区分大小写正则~*不区分大小写正则- 普通前缀匹配
通俗解释:
先看“完全一致”,再看“强前缀”,再看“正则”,最后才是普通前缀。
9. Nginx 如何实现 Rewrite 重写
使用 rewrite 指令,按正则改 URI。
常见场景:
- 旧地址跳新地址
- 伪静态
- HTTP 跳转 HTTPS
示例:
rewrite ^/old/(.*)$ /new/$1 permanent;
通俗解释:
Rewrite 就是“地址翻译器”,对外看是新地址,对内可映射到旧逻辑。
10. Nginx 和 Apache 区别
- Nginx:异步非阻塞,反向代理与高并发场景更强
- Apache:生态历史久,模块丰富,传统动态场景经验多
- 大并发静态与网关场景常优先 Nginx
通俗解释:
Nginx 像高速分发器,Apache 像功能齐全的老牌全能选手。
11. Nginx 惊群问题是什么,如何解决
惊群:多个 worker 同时被唤醒去抢同一个连接,只有一个成功,其余白忙。
常见缓解思路:
accept_mutex让连接接收更有序- 新版本和不同系统机制下,内核层面也有优化
通俗解释:
像一个电话响了,所有客服都去抢,最后只有一个接到,其他人白跑。
12. Nginx 如何配置 HTTPS
基本步骤:
- 申请 SSL 证书
- 监听
443 ssl - 配置证书和私钥
- 可选:80 强制跳转到 443
示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
}
通俗解释:
HTTPS 就是给网站通信加“防窃听的加密通道”。
13. Nginx 适用场景总结
- 静态资源服务
- 反向代理
- 负载均衡
- 动静分离
- API 网关与转发
- HTTPS 接入层
Docker 面试题
1. Docker 是什么
Docker 是开源容器平台,用来把应用和依赖打包成容器,实现跨环境一致运行。
通俗解释:
像把应用连同运行环境一起装进“标准集装箱”,搬到哪都能跑。
2. 容器 vs 虚拟机
- 虚拟机:每个实例都有完整 Guest OS,隔离强但更重
- 容器:共享宿主机内核,启动快、占用小
一句话:虚拟机是操作系统级隔离,容器是进程级隔离。
通俗解释:
虚拟机像“一人一套房”,容器像“同楼不同房间”。
3. Docker 三大核心概念
- 镜像(Image):只读模板。
- 容器(Container):镜像运行后的实例。
- 仓库(Repository/Registry):存放镜像。
通俗解释:
镜像像“菜谱”,容器像“做出来的菜”,仓库像“菜谱库”。
4. Docker 工作原理 / 架构
- Client:你输入命令的客户端
- Docker Daemon:后台服务,负责真正执行
- Registry:镜像仓库
核心流程:拉镜像 -> 启容器 -> 运行应用。
通俗解释:
你下单(Client),后厨执行(Daemon),食材库供货(Registry)。
5. Docker 为什么快
- 共享宿主机内核,不必启动完整 OS
- 容器本质是受限进程,启动秒级
- 分层文件系统提高复用率
通俗解释:
不是重装一台电脑再运行程序,而是直接拉起一个隔离进程。
6. UnionFS(联合文件系统)是什么
UnionFS 是分层文件系统思想,镜像由多层只读层组成,容器运行时再叠加一层可写层。
通俗解释:
像透明塑料片一层层叠起来,最终看到的是合成结果。
7. 镜像分层有什么好处
- 层复用,节省存储
- 只重建变化层,加快构建
- 已有层不重复下载,加快分发
通俗解释:
改了一页就只重新打印那一页,不用整本重印。
8. Docker 容器生命周期状态
createdrunningpausedexited/stoppedremoved
说明:面试中常说“deleted”,更准确的术语是 removed。
通俗解释:
容器也有“创建、运行、暂停、停止、删除”的生命周期。
9. Docker 常用命令
# 镜像操作
docker search nginx
docker pull nginx
docker images
docker rmi nginx
# 容器操作
docker run -d --name web -p 80:80 nginx
docker ps
docker ps -a
docker start web
docker stop web
docker rm web
docker logs web
docker exec -it web sh
补充:docker exec -it <容器> /bin/bash 在某些精简镜像(如 Alpine)可能没有 bash,用 sh 更通用。
10. docker run 常用参数
-d:后台运行-p:端口映射(宿主机:容器)-P:随机映射到宿主机高位端口--name:容器名-v:挂载卷--restart=always:重启策略-e:环境变量
通俗解释:docker run 就是“创建+配置+启动”一次完成。
11. Docker 数据卷(Volume)是什么
卷是独立于容器生命周期的数据存储方式,可挂载到容器目录中。
作用:
- 数据持久化
- 容器与宿主机共享数据
- 多容器共享数据
通俗解释:
容器可以删,但数据放在“外置硬盘”(Volume)里不会丢。
12. Docker 网络模式
常见模式:
bridge:默认模式,容器在独立网桥网络里host:共享宿主机网络命名空间none:不配置网络container:<name|id>:与另一容器共享网络栈
通俗解释:
就是给容器选择“怎么连网”的不同方案。
13. Dockerfile 是什么
Dockerfile 是镜像构建脚本,按指令逐层构建镜像。
通俗解释:
像自动化做菜步骤,按顺序执行,最后产出镜像。
14. Dockerfile 常用指令
FROM # 基础镜像
RUN # 构建时执行命令
CMD # 默认启动命令(可被覆盖)
ENTRYPOINT # 固定入口命令
EXPOSE # 声明端口
ENV # 环境变量
COPY # 复制文件(推荐)
ADD # 复制+自动解压等增强能力
VOLUME # 声明卷挂载点
WORKDIR # 工作目录
补充:MAINTAINER 已废弃,建议用 LABEL maintainer="xxx"。
15. CMD vs ENTRYPOINT
CMD:提供默认参数/默认命令,运行时容易被覆盖ENTRYPOINT:固定主命令,运行参数通常追加在后面
常见组合:ENTRYPOINT + CMD。
通俗解释:ENTRYPOINT 像“主程序”,CMD 像“默认参数”。
16. ADD vs COPY
COPY:纯复制,行为简单可控,推荐优先ADD:额外支持自动解压本地压缩包等能力
说明:ADD 虽然功能多,但可读性和可控性较差,面试里回答“优先 COPY,需要额外能力再 ADD”更稳。
17. Docker Compose 是什么
Compose 是多容器编排工具,用一个 YAML 文件定义多个服务并统一启动。
- 常见文件:
compose.yml(也兼容docker-compose.yml) - 常见命令:
docker compose up -d
通俗解释:
以前一个个起容器,现在一条命令“整套系统一起起”。
18. Docker 如何实现隔离
- Namespace:做资源视图隔离(进程、网络、挂载等)
- Cgroups:做资源配额和限制(CPU、内存、IO)
通俗解释:
Namespace 负责“看见什么”,Cgroups 负责“最多能用多少”。
19. Cgroups 作用
- 限制 CPU、内存、磁盘 IO
- 防止单个容器吃光机器资源
通俗解释:
给每个容器设“资源上限”,避免互相抢死。
20. Docker 镜像为什么只读
镜像做成只读分层,便于复用、分发和保证一致性;容器运行时再叠加可写层。
通俗解释:
基础模板不改,改动都写在临时层,便于回滚和复用。
21. 容器退出数据为什么会丢
默认写入容器可写层,容器被删除时可写层一起删除,所以数据会丢。
解决方式:
- 用 Volume
- 或 bind mount(
-v /host:/container)
通俗解释:
数据写在“临时沙盘”里,沙盘扔了数据就没了。
22. Docker 安全注意点
- 尽量不用 root 运行容器
- 使用可信镜像来源并定期扫描漏洞
- 镜像最小化,减少攻击面
- 加资源限制
- 及时更新 Docker 与基础镜像
通俗解释:
容器不是天然绝对安全,最关键是最小权限和持续更新。
更多推荐





所有评论(0)