Nginx 详细使用介绍
December 9, 2022
Nginx("engine x") 是一个高性能的 Web 服务器和反向代理服务器,同时支持邮件代理功能和负载均衡。它以高并发、高可靠性和低内存消耗而闻名,广泛应用于各类互联网服务。
一、Nginx 的安装
1. 安装 Nginx
在 Linux 上
Ubuntu/Debian 系统:
sudo apt update
sudo apt install nginx
CentOS/RHEL 系统:
sudo yum install epel-release
sudo yum install nginx
在 macOS 上
使用 Homebrew:
brew install nginx
在 Windows 上
Nginx 在 Windows 上的支持有限,建议从 官方站点 下载二进制包。
2. 验证安装
启动 Nginx 并查看版本:
nginx -v
检查服务是否运行:
curl http://localhost
二、Nginx 的基本配置
Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf
(Linux 环境),主配置文件包括以下核心部分:
1. 配置文件结构
# 主配置部分
user www-data; # 工作用户
worker_processes auto; # 工作进程数
# 全局错误日志和 PID 文件
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024; # 每个进程的最大连接数
}
http {
include /etc/nginx/mime.types; # 包含 MIME 类型文件
default_type application/octet-stream;
# 日志设置
access_log /var/log/nginx/access.log;
# 发送文件优化
sendfile on;
# Keep-alive 设置
keepalive_timeout 65;
# 配置虚拟主机
include /etc/nginx/conf.d/*.conf;
}
三、常用配置实例
1. 配置静态网站
server {
listen 80; # 监听端口
server_name example.com; # 域名
root /var/www/html; # 网站根目录
index index.html index.htm; # 默认文件
location / {
try_files $uri $uri/ =404; # 请求文件存在则返回文件,否则 404
}
}
将网站文件存放在 /var/www/html
目录即可。
2. 配置反向代理
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000; # 转发到后端服务
proxy_set_header Host $host; # 保留原始 Host 头
proxy_set_header X-Real-IP $remote_addr; # 客户端真实 IP
}
}
3. 配置负载均衡
upstream backend {
server 127.0.0.1:3000 weight=3; # 主服务
server 127.0.0.1:3001; # 次服务
}
server {
listen 80;
server_name loadbalancer.example.com;
location / {
proxy_pass http://backend;
}
}
4. 配置 HTTPS
获取证书
可以使用 Let’s Encrypt 免费获取证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
配置 HTTPS
Nginx 的 HTTPS 配置示例如下:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
root /var/www/html;
index index.html;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # 重定向到 HTTPS
}
四、高级功能配置
1. 缓存配置
配置静态资源缓存
location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg|woff|woff2|ttf|otf|eot)$ {
expires 7d; # 缓存 7 天
access_log off; # 关闭访问日志
}
2. 防盗链配置
location /images/ {
valid_referers none blocked *.example.com;
if ($invalid_referer) {
return 403; # 禁止访问
}
}
3. 限流配置
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location /api/ {
limit_req zone=one burst=5;
}
}
}
4. 动静分离
将动态请求转发到后端服务,静态文件由 Nginx 直接处理:
server {
location / {
proxy_pass http://127.0.0.1:8000; # 动态请求
}
location /static/ {
root /var/www/html; # 静态文件目录
}
}
五、管理 Nginx 服务
启动和停止 Nginx
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx # 平滑重载配置
测试配置文件
每次修改配置文件后,建议先测试:
sudo nginx -t
六、日志分析和排查问题
日志路径
- 访问日志:
/var/log/nginx/access.log
- 错误日志:
/var/log/nginx/error.log
自定义日志格式
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
}
七、Nginx 的优化
1. 增加 Worker 数
根据 CPU 核数设置:
worker_processes auto;
2. 文件传输优化
启用 sendfile
和缓存:
sendfile on;
tcp_nopush on;
tcp_nodelay on;
3. 压缩传输
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
Nginx 是一款强大而灵活的服务器软件,上述配置涵盖了最常见的使用场景。如果需要更复杂的功能,比如动态模块加载或与第三方工具结合,Nginx 也能很好地支持。