Nginx 面试 50 问
Nginx 面试 50 问(含答案,分模块,运维/开发高频考点)
覆盖基础架构、配置、反向代理、负载均衡、缓存、SSL、限流、高可用、排错,高频题标 ★,精简好记,适配面试与生产实操。
一、基础认知 & 架构(1-8题)
-
Q:Nginx 是什么?主要用途?
A:高性能 HTTP 和反向代理服务器,也可做邮件代理、TCP/UDP 代理。用途:静态资源服务、反向代理、负载均衡、动静分离、SSL 终端、限流、防盗链。 -
★Q:Nginx 进程模型?主进程+工作进程作用?
A:多进程模型:
- Master 主进程:管理 Worker、加载配置、收发信号、重启/停止服务、监控子进程;
- Worker 工作进程:实际处理客户端请求,默认单线程,相互独立。
-
Q:Worker 进程数量如何配置?最佳值?
A:配置worker_processes;推荐设为 CPU 核心数(多核 CPU 充分利用性能),也可设为auto自动识别。 -
Q:Nginx 事件模型?常用模型?
A:异步非阻塞 IO 模型;Linux 下默认使用 epoll,是高性能核心;其他还有 select、poll、kqueue(BSD)。 -
Q:Nginx 优势?对比 Apache?
A:Nginx:高并发、低内存、异步非阻塞、支持热部署;Apache 多进程/线程模型,并发弱、资源占用高。 -
Q:什么是热部署(平滑重启)?
A:执行nginx -s reload,Master 拉起新 Worker 进程处理新请求,旧 Worker 处理完存量请求后退出,服务不中断。 -
Q:Nginx 默认端口、默认站点目录、配置文件路径?
A:默认端口 80;默认站点目录/usr/share/nginx/html;主配置文件/etc/nginx/nginx.conf。 -
Q:Nginx 启动、停止、重载、查看版本命令?
A:
- 启动:
nginx - 停止:
nginx -s stop(快速) /nginx -s quit(优雅停止) - 重载配置:
nginx -s reload - 版本:
nginx -v
二、核心配置 & 虚拟主机(9-15题)
-
Q:Nginx 配置文件由哪几大模块组成?
A:全局块、events块、http块、server块(虚拟主机)、location块。 -
★Q:虚拟主机三种实现方式?
A: -
基于域名(最常用):同一端口,不同域名区分站点;
-
基于端口:同一IP,不同端口区分;
-
基于IP:不同网卡IP区分站点。
-
★Q:location 匹配规则?优先级顺序?
A:优先级从高到低: -
=精确匹配 -
^~前缀匹配(不解析正则) -
~/~*正则匹配(区分/不区分大小写) -
普通前缀匹配
-
/通用默认匹配 -
Q:location / 和 location / 区别?*
A:/匹配所有请求;/*仅匹配根路径下带后缀的请求,一般不用。 -
Q:root 和 alias 指令区别?
A:
root:拼接路径,root /html+ 请求/test→/html/test;alias:替换路径,alias /html+ 请求/test→/html;alias末尾目录建议加/,避免路径异常。
-
Q:index 指令作用?
A:指定默认主页,访问目录时自动读取该文件,如index index.html index.php。 -
Q:try_files 指令作用?
A:按顺序检查文件是否存在,不存在则跳转至最后一个参数,常用于前端路由、静态资源兜底。
三、反向代理 & 动静分离(16-22题)
- ★Q:什么是反向代理?和正向代理区别?
A:
- 正向代理:代理客户端,客户端访问外网,服务端不知真实访客(如FQ、代理上网);
- 反向代理:代理服务端,用户访问代理,代理转发至后端真实服务,用户无感知。
-
Q:反向代理核心指令?
A:proxy_pass(转发地址);配套常用:proxy_set_header改写请求头。 -
★Q:如何传递客户端真实 IP 到后端服务?
A:配置请求头:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
后端读取 X-Real-IP / X-Forwarded-For 获取真实IP。
- Q:proxy_pass 末尾加 / 和不加 / 的区别?
A:
- 不加
/:把location匹配路径一并转发; - 加
/:截断location匹配路径,只转发剩余部分。
-
★Q:什么是动静分离?实现思路?
A:将静态资源(图片、JS、CSS、HTML)和动态请求(PHP/Java 接口)拆分处理。
实现:Nginx 直接返回静态文件,动态请求转发给应用服务器(Tomcat/PHP-FPM)。 -
Q:Nginx 代理超时相关参数?
A:proxy_connect_timeout连接后端超时、proxy_read_timeout读取响应超时、proxy_send_timeout发送请求超时。 -
Q:如何代理 HTTPS 后端服务?
A:proxy_pass填写https://地址,开启ssl_protocols,必要时配置证书校验。
四、负载均衡(23-29题)
-
★Q:Nginx 负载均衡用哪个模块?配置块?
A:ngx_http_upstream_module,配置在http块内upstream节点组。 -
★Q:Nginx 负载均衡 5 种调度策略?
A: -
轮询(默认):请求依次分发;
-
weight 权重:权重越高接收请求越多;
-
ip_hash:按客户端IP哈希,固定访问同一后端(解决会话保持);
-
least_conn:最少连接数,分发至压力最小节点;
-
url_hash:按URL哈希,缓存场景使用。
-
Q:ip_hash 优缺点?注意事项?
A:优点:会话保持;缺点:后端节点上下线会导致哈希重分布,会话错乱;不支持节点权重动态调整。 -
Q:upstream 中 backup、down 状态作用?
A:
down:标记节点永久不可用;backup:备用节点,所有主节点故障后才启用。
-
Q:max_fails、fail_timeout 参数作用?
A:健康检查:max_fails最大失败次数,达到后标记节点故障;fail_timeout故障后暂停转发的时长。 -
Q:负载均衡四层和七层区别?
A:
- 七层(HTTP 代理):解析 HTTP 协议,支持路径、域名路由、缓存;
- 四层(stream 模块):基于 TCP/UDP 转发,不解析应用层,性能更高,适合数据库、SSH。
- Q:Nginx 四层负载如何开启?
A:编译/安装开启stream模块,在主配置下写stream块,配置upstream+server。
五、缓存 & 防盗链(30-35题)
-
★Q:Nginx 静态缓存作用?
A:缓存静态资源,减少后端请求、降低后端压力、提升访问速度。 -
Q:缓存核心指令:expires、add_header Cache-Control?
A:expires设置资源过期时间;Cache-Control控制浏览器缓存策略(public/private/no-cache)。 -
Q:Nginx 本地磁盘缓存(proxy_cache)使用场景?
A:缓存后端动态接口响应,重复请求直接读 Nginx 本地缓存。 -
★Q:防盗链实现方式?原理?
A:基于Referer请求头校验;判断请求来源域名,非信任域名则拒绝访问、返回403。 -
Q:如何处理空 Referer 的防盗链场景?
A:配置valid_referers none blocked 信任域名;放行空来源请求。 -
Q:图片/视频大文件优化配置?
A:调整client_body_buffer_size、sendfile on、tcp_nopush on,开启零拷贝传输。
六、SSL/HTTPS 配置(36-40题)
-
★Q:HTTP 与 HTTPS 区别?
A:HTTP 明文传输,端口80,不安全;HTTPS = HTTP + SSL/TLS 加密,端口443,数据加密防窃听、篡改。 -
Q:Nginx 配置 HTTPS 必备指令?
A:listen 443 ssl;、ssl_certificate证书公钥、ssl_certificate_key私钥。 -
Q:如何实现 HTTP 自动跳转 HTTPS?
A:在 80 端口server块中,用return 301 https://$host$request_uri;永久重定向。 -
Q:ssl_session_cache 作用?
A:缓存 SSL 会话,减少握手次数,提升 HTTPS 访问速度。 -
Q:HTTPS 常见性能优化点?
A:开启会话缓存、选择高效加密套件、启用 HTTP/2、调整 SSL 超时。
七、限流 & 访问控制(41-44题)
- ★Q:Nginx 限流两大模块?
A:
limit_req:基于请求速率限流(按每秒请求数);limit_conn:基于连接数限流(限制单IP并发连接)。
-
Q:limit_req 中 burst、nodelay 含义?
A:burst突发请求队列长度;nodelay队列请求不延迟,直接处理。 -
Q:简单IP黑名单如何实现?
A:使用deny IP;、allow IP;指令,顺序自上而下匹配。 -
Q:如何限制单IP最大访问频率?
A:组合limit_req_zone+limit_req配置,定义速率与队列。
八、高可用 & 排错(45-50题)
-
★Q:Nginx 高可用方案?
A:Nginx + Keepalived;两台 Nginx 主备,共用一个虚拟IP(VIP),节点故障自动漂移 VIP。 -
Q:Keepalived 核心原理?
A:VRRP 协议,节点间心跳检测,主节点故障后,备节点接管 VIP,实现故障转移。 -
Q:Nginx 常见错误码含义?
A:
- 403:权限不足、防盗链、IP 被拦截;
- 404:资源不存在、路径错误;
- 500:后端程序报错、配置语法错误、脚本异常;
- 502 Bad Gateway:后端服务挂了、端口不通;
- 503 Service Unavailable:后端过载、限流、节点全部故障;
- 504 Gateway Timeout:连接/读取后端超时。
-
★Q:Nginx 502、504 排查思路?
A: -
检查后端服务是否启动、端口监听正常;
-
网络互通、防火墙/安全组放行;
-
调整 proxy 超时时间;
-
查看后端应用日志。
-
Q:Nginx 配置语法检查命令?
A:nginx -t,校验配置是否合法。 -
Q:Nginx 日志类型?日志字段 $remote_addr、$request、$status 含义?
A:访问日志access.log、错误日志error.log;
$remote_addr:客户端IP;$request:请求方法+地址+协议;$status:HTTP 响应状态码。
背诵&面试建议
- 带 ★ 为必考高频题,优先吃透原理+配置示例;
- 面试回答结构:原理 + 配置 + 场景 + 排错;
- 实操配合:亲手搭建反向代理、负载均衡、HTTPS、限流环境加深记忆。
浙公网安备 33010602011771号