Nginx 入门基础
Nginx 入门基础
什么是 Nginx
Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一款 IMAP/POP3/Proxy 服务器。它以高并发、低内存消耗和模块化架构著称,广泛用于 Web 服务、负载均衡、缓存和 SSL 终端。
安装 Nginx
Ubuntu/Debian
sudo apt update
sudo apt install nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
验证安装
# 检查版本
nginx -v
# 检查状态
sudo systemctl status nginx
# 测试访问
curl http://localhost
目录结构
/etc/nginx/
├── nginx.conf # 主配置文件
├── conf.d/ # 额外配置文件
├── sites-available/ # 可用站点配置
├── sites-enabled/ # 启用的站点配置
├── mime.types # MIME 类型映射
└── fastcgi_params # FastCGI 参数
配置文件结构
# 全局配置
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
# 基本设置
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# MIME 类型
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 日志格式
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;
error_log /var/log/nginx/error.log;
# Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
# 虚拟主机配置
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
虚拟主机配置
基本站点配置
# /etc/nginx/sites-available/mysite
server {
listen 80;
listen [::]:80;
server_name mysite.example.com;
root /var/www/mysite;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
启用站点
# 创建符号链接
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重新加载
sudo systemctl reload nginx
常用命令
# 测试配置文件
nginx -t
# 重新加载配置(不中断连接)
nginx -s reload
# 停止 Nginx
nginx -s stop
# 优雅停止(处理完当前请求)
nginx -s quit
# 重新打开日志文件
nginx -s reopen
反向代理
基本反向代理
server {
listen 80;
server_name api.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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
WebSocket 代理
location /ws {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
静态文件服务
server {
listen 80;
server_name static.example.com;
# 静态文件根目录
root /var/www/static;
# 目录列表(可选)
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# 图片缓存
location ~* \.(jpg|jpeg|png|gif|ico)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
# CSS/JS 缓存
location ~* \.(css|js)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}
}
实践案例
部署静态网站
# 创建网站目录
sudo mkdir -p /var/www/mysite
# 设置权限
sudo chown -R www-data:www-data /var/www/mysite
sudo chmod -R 755 /var/www/mysite
# 部署文件
sudo cp -r * /var/www/mysite/
# /etc/nginx/sites-available/mysite
server {
listen 80;
server_name mysite.example.com;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# SPA 路由支持
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
}
配置 PHP-FPM
server {
listen 80;
server_name php.example.com;
root /var/www/php;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
性能优化
http {
# 连接超时
keepalive_timeout 65;
# 客户端请求缓冲
client_body_buffer_size 16k;
client_header_buffer_size 1k;
client_max_body_size 8m;
# 缓冲区
large_client_header_buffers 4 8k;
# Gzip 压缩
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/json;
}
常见问题
502 Bad Gateway
# 检查后端服务
sudo systemctl status php7.4-fpm
# 检查 FastCGI 配置
sudo nginx -t
# 查看错误日志
sudo tail -f /var/log/nginx/error.log
403 Forbidden
# 检查目录权限
ls -la /var/www/mysite
# 检查 nginx.conf 中的 user 配置
grep "^user" /etc/nginx/nginx.conf
最佳实践
- 每个站点使用独立的配置文件
- 使用符号链接管理站点
- 定期检查配置语法
- 配置合适的日志级别
- 使用 Gzip 压缩减少传输大小
总结
Nginx 是一个功能强大的 Web 服务器和反向代理。掌握基本配置可以帮助你搭建高性能、高可用的 Web 服务架构。