Nginx 使用教程
简介
Nginx 是一款高性能的 HTTP 和反向代理服务器,以其高并发、低内存消耗著称。广泛应用于 Web 托管、负载均衡和 API 网关。
Nginx 核心功能
- HTTP 服务器
- 反向代理 / 正向代理
- 负载均衡
- SSL/TLS 终端
- 静态文件服务
安装 Nginx
Ubuntu / Debian
sudo apt update
sudo apt install nginx
CentOS / RHEL
sudo yum install epel-release
sudo yum install nginx
启动与停止
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
安装完成后,访问 http://your_server_ip 即可看到 Nginx 欢迎页面。
基本配置
配置文件位置
/etc/nginx/nginx.conf # 主配置文件
/etc/nginx/sites-available/ # 网站配置目录
/etc/nginx/sites-enabled/ # 启用的网站
/var/www/html/ # 默认网站根目录
简单网站配置
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
常用命令
sudo nginx -t # 测试配置文件
sudo nginx -s reload # 重载配置
反向代理
反向代理允许 Nginx 将客户端请求转发到后端应用服务器(如 Node.js、Python、Django 等)。
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
}
}
常用 proxy_set_header 说明
Host- 传递原始主机名X-Real-IP- 客户端真实 IPX-Forwarded-For- 代理链 IPX-Forwarded-Proto- 原始协议
HTTPS 配置
使用 Let's Encrypt 免费证书
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
手动配置 SSL
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/your_cert.pem;
ssl_certificate_key /etc/ssl/private/your_key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/html;
index index.html;
}
负载均衡
Nginx 支持多种负载均衡策略:
轮询(默认)
upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://backend;
}
}
权重负载均衡
upstream backend {
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=1;
}
IP Hash
upstream backend {
ip_hash;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}