# Nginx面试常见问题(一):基础概念与架构
## 1. Nginx是什么?它的主要特点是什么?
**答案:**
– Nginx是一个高性能的HTTP和反向代理服务器,也可以用作邮件代理服务器
– 主要特点:
– 高性能:采用事件驱动架构,处理并发请求能力强
– 高可靠性:采用主从进程架构,主进程监控工作进程
– 可扩展性:模块化设计,支持第三方模块
– 低内存消耗:比Apache等服务器内存使用低
– 支持热部署:可以在不停止服务的情况下更新配置
– 支持负载均衡:内置负载均衡功能
– 支持正向代理和反向代理
## 2. Nginx的架构是什么样的?
**答案:**
– Nginx采用多进程架构:
– 主进程(Master Process):负责管理工作进程,处理配置加载和信号处理
– 工作进程(Worker Process):处理实际的客户端请求
– 缓存加载进程(Cache Loader Process):预加载缓存
– 缓存管理进程(Cache Manager Process):管理缓存
– Nginx使用事件驱动模型:
– 基于epoll(Linux)、kqueue(BSD)等高效的事件处理机制
– 每个工作进程可以处理数千个并发连接
– 非阻塞I/O操作,提高处理效率
## 3. Nginx的配置文件结构是什么样的?
**答案:**
– Nginx的配置文件采用层级结构,主要包括:
– 全局块:设置全局配置,如worker_processes、pid等
– events块:设置事件处理相关配置,如worker_connections、use等
– http块:设置HTTP相关配置,包括:
– 服务器块(server):配置虚拟主机
– 位置块(location):配置URL路径匹配规则
– 上游块(upstream):配置后端服务器集群
– 配置文件的基本语法:
– 指令以分号结尾
– 块使用大括号包围
– 支持注释(#开头)
– 支持变量
## 4. Nginx的工作原理是什么?
**答案:**
– Nginx的工作流程:
1. 主进程启动,读取配置文件,初始化环境
2. 主进程fork出多个工作进程
3. 工作进程开始监听端口,等待客户端连接
4. 当客户端请求到达时,工作进程通过事件驱动机制处理请求
5. 工作进程根据配置文件处理请求,可能是直接返回静态文件,或反向代理到后端服务器
6. 处理完成后,工作进程返回响应给客户端
– Nginx的事件处理机制:
– 使用epoll等高效的事件通知机制
– 非阻塞I/O操作
– 每个工作进程可以处理多个并发连接
## 5. Nginx的反向代理是什么?如何配置?
**答案:**
– 反向代理是指Nginx作为代理服务器,接收客户端请求,然后将请求转发给后端服务器,再将后端服务器的响应返回给客户端
– 配置示例:
“`nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
“`
– 常用的反向代理指令:
– proxy_pass:指定后端服务器地址
– proxy_set_header:设置请求头
– proxy_connect_timeout:设置连接超时时间
– proxy_read_timeout:设置读取超时时间
## 6. Nginx的负载均衡是什么?有哪些策略?
**答案:**
– 负载均衡是指Nginx将客户端请求分发到多个后端服务器,以提高系统的可用性和性能
– 负载均衡策略:
– 轮询(round-robin):默认策略,按顺序分发请求
– 权重(weight):根据权重分发请求,权重越高,处理的请求越多
– ip_hash:根据客户端IP地址哈希,相同IP的请求分发到相同的后端服务器
– least_conn:将请求分发到当前连接数最少的后端服务器
– fair:根据后端服务器的响应时间分发请求
– 配置示例:
“`nginx
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=3;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
“`
## 7. Nginx的静态文件处理是什么?如何优化?
**答案:**
– 静态文件处理是指Nginx直接返回静态文件(如HTML、CSS、JavaScript、图片等)给客户端
– 优化策略:
– 启用gzip压缩:减少传输数据量
– 配置 expires 头:设置浏览器缓存
– 使用 sendfile:提高文件传输效率
– 配置 open_file_cache:缓存文件描述符
– 配置 tcp_nopush 和 tcp_nodelay:优化TCP传输
– 配置示例:
“`nginx
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
expires 30d;
add_header Cache-Control “public, no-transform”;
gzip on;
gzip_types text/css application/javascript image/*;
}
}
“`
## 8. Nginx的URL重写是什么?如何配置?
**答案:**
– URL重写是指Nginx根据规则修改请求的URL
– 常用的重写指令:
– rewrite:根据正则表达式重写URL
– return:返回指定的状态码和URL
– break:停止处理后续的重写规则
– last:停止处理当前重写规则,开始新一轮的location匹配
– 配置示例:
“`nginx
server {
listen 80;
server_name example.com;
# 重定向HTTP到HTTPS
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
# 重写URL
location /old-path {
rewrite ^/old-path/(.*)$ /new-path/$1 permanent;
}
}
“`
## 9. Nginx的HTTPS配置是什么?
**答案:**
– HTTPS配置是指Nginx支持SSL/TLS加密传输
– 配置示例:
“`nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ‘ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384’;
ssl_prefer_server_ciphers on;
location / {
root /var/www/html;
index index.html;
}
}
“`
– 常用的HTTPS配置指令:
– ssl_certificate:指定SSL证书文件
– ssl_certificate_key:指定SSL私钥文件
– ssl_protocols:指定支持的SSL协议版本
– ssl_ciphers:指定支持的加密套件
– ssl_prefer_server_ciphers:优先使用服务器端的加密套件
## 10. Nginx与Apache的区别是什么?
**答案:**
– 架构差异:
– Nginx:事件驱动架构,非阻塞I/O
– Apache:多进程或多线程架构,阻塞I/O
– 性能差异:
– Nginx:处理并发请求能力强,内存使用低
– Apache:处理并发请求能力较弱,内存使用高
– 功能差异:
– Nginx:更适合作为反向代理和负载均衡器
– Apache:更适合作为传统的Web服务器,支持更多的模块
– 配置差异:
– Nginx:配置文件简洁,易于理解
– Apache:配置文件复杂,功能丰富
– 适用场景:
– Nginx:高并发、静态文件服务、反向代理、负载均衡
– Apache:传统Web应用、需要丰富模块支持的场景
## 总结
Nginx是一个高性能的Web服务器和反向代理服务器,在面试中经常会被问到相关的问题。掌握Nginx的基础概念、架构和核心功能对于通过Web服务器相关的技术面试非常重要。希望这些问题和答案能帮助你准备面试,祝你面试成功!