Nginx 简介
Nginx(发音为 “engine-x”)是一款高性能的开源 Web 服务器,同时也可以用作反向代理服务器、负载均衡器和 HTTP 缓存。它由俄罗斯工程师 Igor Sysoev 于 2004 年首次发布,如今已成为全球使用最广泛的 Web 服务器之一。
核心特点
- 高并发、低内存:Nginx 采用异步非阻塞的事件驱动架构,能够轻松处理数万个并发连接,内存占用极低。
- 高性能:静态文件处理速度极快,性能远超传统的 Apache。
- 反向代理:可以将客户端请求转发到后端服务(如 Node.js、Python、PHP 等),隐藏真实服务地址。
- 负载均衡:支持多种负载均衡策略(轮询、加权、IP Hash 等),将流量分发到多台服务器。
- SSL/TLS 终止:支持 HTTPS,可统一在 Nginx 层处理 SSL 证书,简化后端服务配置。
- 热更新:支持不停机重新加载配置文件,做到零宕机更新。
常见使用场景
| 场景 |
说明 |
| 静态资源服务 |
直接托管 HTML、CSS、JS、图片等静态文件 |
| 反向代理 |
将请求转发到 Node.js / Python / Java 等后端 |
| 动静分离 |
静态文件由 Nginx 直接响应,动态请求转发后端 |
| 负载均衡 |
将流量分发到多个后端实例 |
| HTTPS 证书管理 |
统一处理 SSL,后端只需 HTTP |
Nginx 配置文件的位置
标准系统安装(Linux)
通过系统包管理器(如 apt、yum)安装的 Nginx,配置文件遵循标准路径:
主配置文件(全局唯一):/etc/nginx/nginx.conf
各站点配置文件:
1 2 3 4
| /etc/nginx/sites-available/你的站点名.conf # 存放所有站点配置 /etc/nginx/sites-enabled/你的站点名.conf # 软链接,指向已启用的配置 # 或者使用另一种常见方式: /etc/nginx/conf.d/你的站点名.conf
|
主配置文件通过以下指令引入站点配置:
1 2 3
| include /etc/nginx/sites-enabled/*;
include /etc/nginx/conf.d/*.conf;
|
宝塔面板安装
通过宝塔面板安装的 Nginx 所有文件集中在 /www/ 目录下:
主配置文件(全局):/www/server/nginx/conf/nginx.conf
各站点配置文件:/www/server/panel/vhost/nginx/*.conf
宝塔会根据站点类型自动为配置文件添加前缀,例如,HTML 静态站点 的配置文件名为:html_example.com.conf
主配置文件通过 include /www/server/panel/vhost/nginx/*.conf; 指令引入所有站点配置
配置字段详解
Nginx 的配置文件分为两层:主配置文件(全局生效)和站点配置文件(单个站点生效)。一般情况下,几乎只需要改站点的配置文件,主配置文件很少动。
主配置文件(nginx.conf) 主要调整全局性能参数:
worker_processes:工作进程数(一般设为 CPU 核心数)
worker_connections:每个进程的最大连接数
gzip 压缩开关
- 日志格式定义
client_max_body_size:上传文件大小限制(这个偶尔需要改,比如你的图床如果上传大图就要在这里调)
站点配置文件(vhost/nginx/站点名.conf)
每个站点对应一个独立的配置文件,核心结构是一个或多个 server {} 块。下面以一个完整的主站配置为例,逐一讲解每个字段的含义。
server 块基础字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| server { listen 80;
server_name tianlejin.top www.tianlejin.top;
root /www/wwwroot/tianlejin.top;
index index.html index.htm;
access_log /www/wwwlogs/tianlejin.top.log;
error_log /www/wwwlogs/tianlejin.top.error.log; }
|
location 块:路径路由
location 是站点配置中最重要的部分,用于匹配请求路径并决定如何处理。
匹配规则优先级(从高到低):
| 写法 |
含义 |
location = /path |
精确匹配,优先级最高 |
location ^~ /path |
前缀匹配,匹配后不再检查正则 |
location ~ /path |
正则匹配,区分大小写 |
location ~* /path |
正则匹配,不区分大小写 |
location /path |
普通前缀匹配,优先级最低 |
常用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| location / { proxy_pass http://127.0.0.1:4000/; }
location = /favicon.ico { root /www/wwwroot/tianlejin.top; }
location /api/ { proxy_pass http://127.0.0.1:8000/api/; }
location ~* \.(jpg|jpeg|png|gif|webp)$ { expires 30d; access_log off; }
|
反向代理字段(proxy_pass)
反向代理是 Nginx 最常用的功能,将客户端请求转发到后端服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| location /api/ { proxy_pass http://127.0.0.1:8000/api/;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_connect_timeout 30;
proxy_read_timeout 60; }
|
注意 proxy_pass 末尾斜杠的区别:
proxy_pass http://127.0.0.1:8000/api/ — 请求 /api/user 转发为 /api/user
proxy_pass http://127.0.0.1:8000/ — 请求 /api/user 转发为 /user(自动去掉 location 前缀)
HTTPS 与 SSL 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| server { listen 443 ssl; server_name tianlejin.top www.tianlejin.top;
ssl_certificate /www/server/panel/vhost/cert/tianlejin.top/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/tianlejin.top/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / { proxy_pass http://127.0.0.1:4000/; } }
server { listen 80; server_name tianlejin.top www.tianlejin.top;
return 301 https://$host$request_uri; }
|
其他常用字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| server { listen 80; server_name img.tianlejin.top;
client_max_body_size 50m;
autoindex on;
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
location / { proxy_pass http://127.0.0.1:50000/;
add_header Access-Control-Allow-Origin *;
valid_referers none blocked tianlejin.top *.tianlejin.top; if ($invalid_referer) { return 403; } } }
|
完整站点配置示例
以下是主站 tianlejin.top 的完整配置,综合了以上所有常用字段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| server { listen 80; server_name tianlejin.top www.tianlejin.top; return 301 https://$host$request_uri; }
server { listen 443 ssl; server_name tianlejin.top www.tianlejin.top;
ssl_certificate /www/server/panel/vhost/cert/tianlejin.top/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/tianlejin.top/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3;
access_log /www/wwwlogs/tianlejin.top.log; error_log /www/wwwlogs/tianlejin.top.error.log;
client_max_body_size 20m;
location / { proxy_pass http://127.0.0.1:4000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location /api/ { proxy_pass http://127.0.0.1:8000/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30; proxy_read_timeout 60; }
location ~* \.(js|css|png|jpg|jpeg|gif|ico|webp|woff2)$ { proxy_pass http://127.0.0.1:4000; expires 7d; access_log off; }
error_page 404 /404.html; error_page 500 502 503 504 /50x.html; }
|