返回博客

17 Nginx 不是服务器,是你的项目前台接待

17 Nginx 不是服务器,是你的项目前台接待

导语:装了 Nginx 后你的网站"前台"就开张了——它接客、分流、发传单、把关卡。配置文件让 AI 帮你写,但你要知道每个"按钮"在干嘛。

你的网站跑起来了:代码在服务器上,数据库也连上了。但用户访问 http://你的域名,是谁接待的?就是 Nginx。

Nginx 在项目里的角色:前台接待(反向代理)。没有它,用户的请求会直接闯进你代码的"后厨",乱成一团。

一、Nginx 是干嘛的:前台接待

想象你的网站是一家餐厅:

  • Nginx = 前台:站在门口,接客、带位、递菜单、收快递。
  • 你的后端程序(Python/Node 等)= 后厨:专心做菜(处理业务逻辑),不管门口的事。
  • 静态文件(图片、CSS、JS)= 传单/菜单:前台直接发,不用麻烦后厨。

Nginx 具体帮你做四件事:

事 大白话 术语
接客 监听 80/443 端口,所有访问它先收 监听端口
分流 把请求转给后厨(你的后端程序) 反向代理
发传单 图片、CSS、JS 直接返回,不打扰后端 静态文件服务
把关卡 加 HTTPS、负载均衡、限流 安全 / 分流

二、四件事拆开看

1. 接客(监听端口):Nginx 站在门口(80 端口),所有用户访问先到它手里。你访问网站时,浏览器连的是 80/443 端口——那就是 Nginx 的岗位。

2. 分流(反向代理):你的后端程序跑在服务器某个内部端口(比如 8000),Nginx 把请求转发过去。用户永远不知道后厨在哪,只跟前台打交道——这就是"反向代理"。

3. 发传单(静态文件):图片、CSS、JS 这种"不用现做"的东西,Nginx 直接从磁盘拿给用户,根本不进后厨——后端程序轻松一大截,这也是 Nginx 快的秘密。

4. 把关卡(HTTPS):第 09 篇配的 SSL 证书,就是挂在 Nginx 上——它负责把明文 HTTP 升级成加密 HTTPS,用户和网站之间的通信才安全。

三、配置文件长啥样(看懂每一段)

Nginx 的配置就是一个文本文件(默认 /etc/nginx/nginx.conf 或 conf.d/ 下的站点配置),让 AI 帮你写没问题,但你要能看懂结构。核心就两个"块":

server {
    listen 80;                          # 前台岗位:站在 80 端口
    server_name 你的域名.com;            # 只接待这个域名

    location / {
        proxy_pass http://127.0.0.1:8000;  # 一般请求→转给后厨(8000 端口)
    }

    location /static/ {
        alias /var/www/你的项目/static/;   # 静态文件→直接发传单,不进后厨
    }
}

你要看懂的只有三行:

  • listen:站在哪个端口接客。
  • proxy_pass:把请求转发给谁(你的后端程序)。
  • location:按路径分流——/static/ 走静态,其它走后端。

经验:让 AI 生成配置时,把这三行问清楚:"这段配置里,请求是怎么分流的?"——你看得懂分流,就掌握了 Nginx 的命脉。

四、改完配置怎么生效

改配置最怕"改了没效果"。记住两个命令:

sudo nginx -t                    # 第一件事:检查配置有没有语法错误
sudo systemctl reload nginx      # 方式一:systemd 平滑重载(Ubuntu 等系统默认推荐)
sudo nginx -s reload             # 方式二:Nginx 自带信号重载(老牌通用,效果相同)

经验:

  • 先测再重载:nginx -t 报错就别 reload,改好了再说——这是标准流程。
  • 两种 reload 效果一样:systemctl reload nginx 是 systemd 的装法,nginx -s reload 是 Nginx 自带的信号方式,都会平滑生效不中断服务。记一个顺手用就行(Ubuntu 默认装法用 systemctl)。
  • 用 reload 不是 restart:reload 平滑生效不中断服务;restart 是重启(会闪断)。日常改配置用 reload。
  • 改配置前先备份:cp 配置 配置.bak,改坏了能还原(第 14 篇就说过)。

五、避坑清单

  • 改完没生效:八成是忘了 nginx -t + systemctl reload——改完必须走这两步。
  • 端口被占用:报 80 port already in use,说明服务器上还有别的程序占着 80(比如 Apache)——先停掉旧的,再让 Nginx 上岗。
  • 静态文件 404:alias/root 路径写错(Linux 路径不熟就 ls 确认),或者权限不对(文件 Nginx 用户读不到)。
  • 别让 Nginx 直接跑代码:Nginx 不会执行你的 Python/Node——它是前台,永远只转发,不"做菜"。做菜的是后厨(你的后端程序)。
  • HTTPS 配了还跳 HTTP:检查证书路径和 443 监听是否都配好;配好后浏览器地址栏有锁图标才算成功。

总结

  • Nginx = 前台接待(反向代理):接客(监听端口)、分流(转发后端)、发传单(静态文件)、把关卡(HTTPS)。
  • 配置文件核心就三行:listen(站哪)、proxy_pass(转发给谁)、location(按路径分流)。
  • 改配置标准动作:备份 → nginx -t 测试 → systemctl reload 生效。
  • 避坑四条:改完要 reload、端口被占先停旧的、404 先查路径和权限、Nginx 只转发不跑代码。

10 分钟小任务:SSH 登录服务器,跑 nginx -t 看看当前配置是否正常;再打开 Nginx 配置文件(/etc/nginx/nginx.conf 或站点配置),找找 listen、proxy_pass、location 三行在哪——"看懂前台的工作单"。下一篇,我们解决"在我电脑上能跑"的问题:Docker。

下一篇:Docker 不是虚拟机,是给你的项目打包个行李箱。