马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、基础概念题
1. Nginx 是什么?主要优势
Nginx 是开源的高性能 HTTP 服务器 + 反向代理,也常做负载均衡。优势:用极少资源扛高并发长连接、可靠性高、支持热部署、配置灵活、负载均衡与缓存能力强。
2. 静态内容和动态内容怎么处理
Nginx 天生擅长静态内容(HTML/CSS/JS/图片)直接以 HTTP 响应返回;动态请求则反向代理给后端(Tomcat、uWSGI、Node 等)处理,Nginx 只做转发。
location /static/ {
root /data/www; # 直接读文件,不走后端
expires 7d;
}
location / {
proxy_pass http://127.0.0.1:8080;
}
3. 反向代理是什么
反向代理:代理服务器接收客户端请求 → 转发给内部的一台或多台服务器 → 把后端响应返回客户端。对客户端来说它不知道后端是谁。用途:负载均衡、SSL 终结、缓存、压缩、隐藏后端拓扑。
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
用 upstream 定义服务器组,配策略分请求:
upstream backend {
least_conn; # 最少连接
# round_robin(默认轮询)
# ip_hash; # 按客户端 IP 哈希,做会话保持
server 10.0.0.1:8080 weight=2 max_fails=3 fail_timeout=30s;
server 10.0.0.2:8080 weight=1 max_fails=3 fail_timeout=30s;
server 10.0.0.3:8080 backup; # 备机,前面的都挂了才上
}
5. location 指令怎么匹配
用于按请求 URI 决定走哪套配置。匹配规则有优先级:
= 精确匹配(最优先)
- ^~ 前缀匹配,正则不再走
- 正则
~ / ~*
- 最长前缀
/
location = /login { proxy_pass http://backend; } # 精确
location ^~ /static/ { root /data; } # 前缀,跳过正则
location ~* \.php$ { fastcgi_pass unix:/run/php.sock; }
location / { proxy_pass http://backend; } # 兜底
6. 配置文件结构
主配置 nginx.conf 是树状结构:
- events 块:连接处理相关(worker_connections、use epoll)。
- http 块:HTTP 服务相关——server 列表、upstream、MIME、日志
、压缩、缓存。
- mail 块:邮件代理(可选)。
- server 块 must 嵌在 http 里,一个 server 就是一个虚拟主机。
7. 怎么启用 HTTPS
server {
listen 443 ssl;
server_name www.qidao.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
}
8. 缓存怎么配
减少后端压力:proxy_cache_path 定义缓存盘与策略,location 里 proxy_cache 启用。
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m
max_size=10g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_cache_key $scheme$request_method$host$request_uri;
proxy_cache_valid 200 304 10m;
proxy_cache_valid 404 1m;
}
}
}
9. 性能优化手段
- 调
worker_processes auto 与 worker_connections(最大并发 ≈ worker × connections)。
- 开
gzip 压缩减少传输量。
- 静态文件设
expires / Cache-Control 走浏览器缓存。
keepalive 长连接减少 TCP 握手开销。
- SSL 优化:
ssl_session_cache、会话复用。
- 开 HTTP/2(
listen 443 ssl http2)、反向代理到后端用长连接 proxy_http_version 1.1。
- 裁剪没用到的模块省内存;持续监控
定位瓶颈。
worker_processes auto;
events { worker_connections 10240; }
http {
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
}
10. Nginx 怎么处理一个请求
基于事件驱动、非阻塞。请求先由 master 进程接收(master 不处理业务,负责读配置、管 worker),再分发给 worker 进程;worker 监听端口、accept、处理、返回。一个 worker 同时处理多个连接靠的是 epoll 事件循环,不是多开线程。
11. Master-Worker 架构
- Master:读取校验配置、管理 worker(拉起/重建)、热加载靠 master 重新读配置并平滑替换 worker。
- Worker:真正处理请求,多 worker 利用多核,且彼此隔离——一个 worker 挂了不影响其他,稳定性好。
热部署命令:nginx -s reload(走 master 重新加载配置)。
12. IP 黑名单
location / {
deny 192.168.1.100;
deny 10.0.0.0/8;
allow all;
}
注意顺序敏感:匹配到就停,allow all 写在前面会放行后面的 deny。
13. 怎么看配置错在哪
nginx -t # 语法检查
nginx -t -c /path/nginx.conf
nginx -V # 看编译了哪些模块
error_log /var/log/nginx/error.log warn;
14. 怎么防 CC / DDoS
limit_req_zone 限制请求速率(漏桶)。
limit_conn_zone 限制单个 IP 并发连接数。
- 系统层防火墙(iptables/nftables)拦异常流量。
limit_req_status 429 让超限返回 429 而不是 503。
- 接 fail2ban 把反复触发的 IP 动态拉黑;有条件的上一层和 WAF / CDN。
http {
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
server {
location /api/ {
limit_req zone=req burst=20 nodelay;
limit_conn conn 20;
proxy_pass http://backend;
}
}
}
15. Nginx vs Apache
| 维度 | Nginx | Apache |
| 并发模型 | 事件驱动、异步非阻塞,内存占用低 | 每请求一线程/进程,高并发吃内存 |
| 静态资源 | 极快,原生强项 | 一般 |
| 动态内容 | 需反代给后端 | mod_php / mod_perl 内嵌,可直出 |
| .htaccess | 不支持(性能取舍) | 支持,共享主机场景方便 |
| 模块生态 | 够用,部分需编译进 | 模块极丰富,文档齐全 |
| 定位 | 反向代理 / 网关 / 静态层 | 传统托管 / 复杂 .htaccess 场景 |
结论:高并发、网关、静态层用 Nginx;需要 .htaccess、大量内置模块或传统 LAMP 托管,Apache 仍有优势。生产常见做法是Nginx 前置做静态与反代,Apache/Tomcat 在后。
二、进阶方向(面试常延伸)
- 高级调优:worker 数量、缓冲区大小(
client_body_buffer_size、proxy_buffer_size)、open_file_cache。
- 安全:TLS 配置、安全响应头(
X-Frame-Options、X-Content-Type-Options、CSP)、限定访问路径。
- 排障:看 access_log / error_log,用
stub_status 模块看活跃连接与请求数。
- 模块:第三方模块怎么编进 Nginx、
--add-module 的用法。
- 高可用:Keepalived + 虚拟 IP 做双机,或直接用云负载均衡。
- 容器与微服务:Ingress Controller、服务网格里的网关角色。
- 动态配置:Nginx Plus 的 API、或 Consul-template / nginx-proxy 之类开源方案实现不 reload 生效。
- CI/CD:配置模板化 +
nginx -t 门禁 + 灰度 reload。
- 场景题:给你一个业务(比如秒杀),现场设计一个 Nginx 配置方案(限流 + 缓存 + 超时 + 降级)。
三、面试加分的小结论
- 反向代理 ≠ 正向代理:反代客户端不知道后端;正代是客户端自己配的、替客户端去访问外网。
- worker 数一般设
auto(≈CPU 核数);worker_connections 要配合 ulimit -n,否则会撞文件描述符上限。
- reload 不断连:worker 处理完旧连接才退出,所以 reload 是平滑的——这是 Nginx 敢热更新的底气。
- 502 vs 504:502 是后端(upstream)拒绝连接,504 是后端超时没响应,看
proxy_pass 指向的目标就能判断方向。
小结
Nginx 的面试主线就三条:架构(master 管 worker、事件驱动非阻塞、热 reload)、配置(http/server/location 三层 + upstream + 缓存/限流)、对比(与 Apache 的并发模型差异)。回答时别只背定义,能顺手写一段完整的 upstream + location + limit_req 配置,比说十个概念都管用。
qidao123.com企服评测-应用市场 编辑提示 |