可以基于你这篇文章设计一道中高级 Nginx 面试题,既能考察基础知识,又能考察实际项目经验。
面试题
假设你有一个 Flask 项目运行在 127.0.0.1:8080,现在需要通过 Nginx 对外提供服务,同时满足以下要求:
- 用户访问
http://example.com 时,能够访问 Flask 项目; /static/ 路径下的静态资源由 Nginx 直接处理,不经过 Flask;- 对接口请求进行限流,每个 IP 每秒最多访问 5 次;
- 当后端 Flask 服务挂掉时,用户看到友好的错误页面而不是 502。
请写出大致的 Nginx 配置,并说明各个配置项的作用。
参考答案
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;server { listen 80; server_name example.com; # HTTP跳转HTTPS return 301 https://$host$request_uri; }server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # 静态资源 location /static/ { root /var/www/html; expires 30d; } # Flask服务 location / { limit_req zone=api_limit burst=10 nodelay; proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; error_page 502 503 504 /50x.html; } location = /50x.html { root /usr/share/nginx/html; }}
面试官可能继续追问
问题1:为什么静态资源要交给 Nginx 处理?
答案:
因为 Nginx 处理静态文件效率极高:
- 避免 Flask/Gunicorn 浪费进程处理图片、CSS、JS
所以通常:
浏览器 ↓ Nginx ├── 静态资源 → 直接返回 └── 动态请求 → Flask
问题2:什么是反向代理?
答案:
客户端不知道真实后端服务器是谁。
这就是反向代理。
问题3:location 匹配优先级是什么?
标准答案:
= 精确匹配^~ 最长前缀匹配~ ~* 正则匹配普通前缀匹配
精确匹配(=)↓最长前缀(^~)↓正则匹配(~、~*)↓普通前缀匹配
并说明:
在多个普通前缀中,会先选择最长匹配的前缀。
这是很多候选人容易答错的地方。
而不是 restart?
答案:nginx -t
平滑重载:
而:
加分题(很多高级面试会问)
假设:
worker_processes 4;events { worker_connections 1024;}
理论最大并发连接数是多少?
答案:4 × 1024 = 4096
但实际还会受到:
等因素影响,因此实际并发通常低于理论值。
这道题基本覆盖了 Nginx 面试最爱考的五个核心点:
✅ 反向代理✅ 负载均衡思想✅ location 匹配规则✅ 静态资源优化✅ 限流与高并发处理