一、Nginx 简介
-
什么是 Nginx?
- Nginx(读作 “engine x”)是一个高性能的 HTTP 和反向代理服务器,同时也支持 IMAP/POP3/SMTP 代理功能。
- 特点:内存占用少、并发处理能力强、配置灵活、高可扩展性。广泛用于 Web 服务器、反向代理、负载均衡、API 网关等场景。
-
Nginx 的常见应用场景
- HTTP 服务器:处理静态文件或作为 Web 应用的前端服务器。
- 反向代理:为后端服务器提供负载均衡、缓存等功能。
- 负载均衡:通过算法将请求分发到多个后端服务器,提升服务能力。
- 缓存:利用代理缓存加速访问。
- HTTPS / SSL 终止:在 Nginx 端卸载 SSL,后端使用 HTTP 提高效率。
二、在 Ubuntu 中安装 Nginx
系统要求:建议使用 Ubuntu 20.04 LTS 或 22.04 LTS(当前支持的长期支持版本)。
-
更新软件源
sudo apt update
-
安装 Nginx
sudo apt install nginx
-
验证安装是否成功
- 查看版本:
nginx -v
- 启动服务:
sudo systemctl start nginx
- 检查状态:
sudo systemctl status nginx
- 在浏览器访问
http://localhost
或http://服务器IP/
,确认是否显示默认的 Nginx 欢迎页面。
- 查看版本:
三、Nginx 服务管理常用命令(Ubuntu)
以下是在 Ubuntu 系统下管理 Nginx 的常用命令:
# 启动 Nginx
sudo systemctl start nginx
# 停止 Nginx
sudo systemctl stop nginx
# 重启 Nginx
sudo systemctl restart nginx
# 重新加载配置(不中断服务)
sudo systemctl reload nginx
# 查看 Nginx 运行状态
sudo systemctl status nginx
# 设置开机自启动
sudo systemctl enable nginx
# 取消开机自启动
sudo systemctl disable nginx
四、Nginx 文件结构与主要配置
Ubuntu 默认安装的 Nginx 配置文件目录结构如下:
/etc/nginx/
├── nginx.conf # 主配置文件(全局入口)
├── sites-available/ # 可用的站点配置文件存放目录
├── sites-enabled/ # 已启用的站点配置文件(通常为软链接)
├── conf.d/ # 额外的配置文件目录
├── modules-available/
├── modules-enabled/
└── ...
1. nginx.conf
主配置文件
- http 块:配置 HTTP 协议相关参数,如日志格式、默认 MIME 类型等。
- events 块:设置网络连接处理参数,如
worker_connections
(工作连接数)。 - worker_processes:定义工作进程数量,通常根据 CPU 核心数设置。
- 站点配置通常放在
sites-available
中,并通过软链接到sites-enabled
被主配置文件引用。
2. sites-available
与 sites-enabled
sites-available
:存储所有可用的站点配置文件。sites-enabled
:存储实际启用的站点配置文件,通常从sites-available
创建软链接。- 主配置文件
nginx.conf
的http
块中通常包含:
以加载所有启用站点的配置。include /etc/nginx/sites-enabled/*;
3. 基本站点配置示例
以下是一个简单的静态网站配置示例(文件路径:/etc/nginx/sites-available/my_site.conf
):
server {
listen 80;
server_name example.com www.example.com; # 替换为你的域名或 IP
root /var/www/my_site; # 网站根目录
index index.html index.htm;
# 日志路径可自定义
access_log /var/log/nginx/my_site_access.log;
error_log /var/log/nginx/my_site_error.log;
location / {
try_files $uri $uri/ =404;
}
}
配置生效步骤:
# 创建并编辑配置文件
sudo nano /etc/nginx/sites-available/my_site.conf
# 测试配置文件语法
sudo nginx -t
# 创建软链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/my_site.conf /etc/nginx/sites-enabled/
# 重新加载 Nginx
sudo systemctl reload nginx
五、常见功能与配置
1. 反向代理与负载均衡
(1)反向代理示例
将请求转发到后端应用(如运行在 localhost:8080
的服务):
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080; # 后端服务地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
(2)负载均衡示例
使用 upstream
定义后端服务器池:
upstream backend_servers {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
# 可选负载均衡策略:least_conn; 或 ip_hash; # 默认轮询(round-robin)
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}
2. HTTPS/SSL 配置
假设已获取证书文件 server.crt
和私钥 server.key
(可通过 Let’s Encrypt 获取),存放于 /etc/nginx/ssl/
:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
# 安全配置建议
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3; # 使用现代 TLS 版本
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
root /var/www/my_site;
index index.html index.htm;
}
HTTP 自动跳转到 HTTPS:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
3. 日志与调试
- 访问日志:默认路径
/var/log/nginx/access.log
。 - 错误日志:默认路径
/var/log/nginx/error.log
。 - 自定义日志示例:
access_log /var/log/nginx/my_site_access.log main; error_log /var/log/nginx/my_site_error.log warn;
4. 缓存与静态文件处理
为静态文件设置缓存策略,减少服务器压力:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d; # 缓存 7 天
access_log off;
}
5. 防盗链与访问限制
防止图片被其他网站盗用:
location ~* \.(png|jpg|gif)$ {
valid_referers none blocked server_names *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
六、Nginx 配置测试与排错
-
测试配置文件
sudo nginx -t
成功输出示例:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
-
查看错误日志
tail -f /var/log/nginx/error.log
-
重载配置
sudo systemctl reload nginx
-
常见问题解决
- 80 端口占用:
sudo lsof -i :80
- 权限问题:检查文件和目录权限(如
ls -l /var/www/
)。 - 防火墙:确保允许 80/443 端口:
sudo ufw allow 'Nginx HTTP' sudo ufw allow 'Nginx HTTPS'
- 80 端口占用:
七、进阶与优化方向
-
性能优化
- 设置
worker_processes auto;
自动匹配 CPU 核心数。 - 调整
worker_connections
和keepalive_timeout
。 - 启用 HTTP/2:
listen 443 ssl http2;
。
- 设置
-
安全优化
- 强制 HTTPS,禁用弱加密协议。
- 添加安全 HTTP 头:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff;
-
模块与插件
- 使用 Nginx 自带模块(如 Gzip、Rewrite)或第三方模块(如 Lua)。
-
监控与日志分析
- 使用 Prometheus + Grafana 监控 Nginx 性能。
- 将日志接入 Elastic Stack 或 Splunk 进行分析。
八、总结
- Nginx 是 Web 服务领域的核心工具,掌握其基本功能(如 HTTP 服务器、反向代理、负载均衡、HTTPS)至关重要。
- 通过学习安装、配置、调试,可根据业务需求灵活应用。
- 建议参考 Nginx 官方文档 并结合实践加深理解。
- 在生产环境中,注重安全和高可用性,并进行充分测试和监控。
推荐学习步骤
- 熟悉基础命令:安装、启动、停止、重启,测试配置文件。
- 理解配置结构:掌握
nginx.conf
和sites-*
目录的作用。 - 实现基本站点:搭建静态网站,配置日志和静态文件处理。
- 进阶功能:配置反向代理、负载均衡、HTTPS、防盗链等。
- 优化与监控:提升性能、增强安全、实现日志分析。
希望这份笔记对你学习 Nginx 有所帮助!祝你学习顺利,早日掌握 Nginx 的强大功能!