Nginx全方位实战指南:从搭建网站到流量分发,一步到位!

265 阅读5分钟

“写完代码,部署怎么破?” “服务器跑起来了,外网访问不通?” “流量突然暴涨,服务怎么办?”

部署和运维其实没你想的那么难,特别是有了像 Nginx 这样强大的工具。

我自己刚开始也是摸索着用,后来发现掌握了Nginx,配合一些现代化工具,部署变得轻松又高效。

这篇文章带你一步步搞懂:

  • Nginx 是什么,为什么这么受欢迎?
  • 如何用它部署 FastAPI 应用?
  • 如何优雅实现负载均衡,分摊压力?
  • 如何通过缓存提升性能?
  • 以及如何用 ServBay 一键搞定开发环境配置!

Nginx 到底是个啥?为什么这么万能?

你可以把 Nginx 想象成一个高情商的“前台”

  • 它可以直接把内容端上来(Web 服务器);
  • 它能判断客人要找哪个业务部门(反向代理);
  • 如果人太多,它还能合理排队分流(负载均衡)。

作为一款开源、轻量、可扩展的工具,Nginx 能处理 HTTP、TCP、UDP 请求,还能代理邮件协议、做缓存、支持高并发……几乎是现代 Web 架构中不可缺的一环。

如果你不想在服务器配置上反复折腾,那就一定要学会用好它。


用 Nginx 部署一个 FastAPI 应用(实战案例)

为了方便讲解,我这里用一个 GitHub 上的 Todo 小项目来示范如何部署 FastAPI 应用。

Step 1:先把项目跑起来

git clone https://github.com/HATAKEkakshi/Todo.git
cd Todo
pip install -r requirement.txt
uvicorn main:app --host 0.0.0.0 --port 8000

这样你的后端服务已经在 8000 端口跑起来了。

本地访问 http://localhost:8000 云服务器访问 http://你的公网IP:8000

但这只是“跑通了”,还没“部署好”。


Step 2:做成后台服务,断电重启也能自动启动

编辑一个 systemd 配置文件,让 FastAPI 像正常服务一样运行:

sudo vim /etc/systemd/system/fastapi.service

写入:

[Unit]
Description=FastAPI Service
After=network.target

[Service]
User=root
WorkingDirectory=/root/Todo
ExecStart=/usr/bin/python3 -m uvicorn main:app --host 127.0.0.1 --port 8000 --reload
Restart=always

[Install]
WantedBy=multi-user.target

然后运行:

sudo systemctl daemon-reload
sudo systemctl enable fastapi
sudo systemctl start fastapi

这样,服务会在后台稳定运行,不怕重启。


Step 3:用 Nginx 暴露端口,让公网可访问

创建一个新的 Nginx 配置文件:

sudo vim /etc/nginx/sites-enabled/fastapi_nginx

配置内容如下:

server {
    listen 80;
    server_name 你的公网IP;

    access_log /var/log/nginx/fastapi.access.log;
    error_log /var/log/nginx/fastapi.error.log;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

然后检测语法是否正确并重启:

sudo nginx -t
sudo systemctl restart nginx

现在打开浏览器,输入 http://你的IP/docs,是不是已经能看到 FastAPI 的接口文档了?


那如果访问量暴涨怎么办?来,上负载均衡!

很多时候,我们不止跑一个实例,而是多个实例在不同端口(甚至不同机器)上跑同一个服务。

这时候,就该 Nginx 出手帮你分流了👇

upstream myapp {
    server 192.168.1.100:8000;
    server 192.168.1.101:8000;
    server 192.168.1.102:8000;
}

server {
    listen 80;
    server_name 你的公网IP;

    location / {
        proxy_pass http://myapp;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这样,Nginx 会采用默认轮询的方式,把请求平均分配给这三台服务器。

想查看后端响应时间、负载情况?你可以配置 log_format 把 upstream 地址、耗时记录到日志里。


提升性能的最后一招:开启缓存

如果你的 API 查询频繁但更新不多,用缓存能大幅减轻服务器压力。

你只需要在 Nginx 配置里加几行就行:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=custom_cache:10m inactive=60m;

location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_cache custom_cache;
    add_header X-Proxy-Cache $upstream_cache_status;
}

你还可以通过返回头部的 X-Proxy-Cache: HIT/MISS 来判断缓存命中情况。

简单来说就是:

  • HIT:成功从缓存里读到了结果;
  • MISS:没找到缓存,走了后端;
  • EXPIRED:缓存过期了,重新请求了;
  • BYPASS:显式跳过了缓存(比如有某些 header);

ServBay是什么?为什么值得一试?

在手动配置Nginx和后端服务的路上,环境搭建往往比较繁琐,特别是跨平台开发或者多项目切换时更麻烦。

最近我试用了ServBay,它是一个专门为本地开发打造的全能环境管理工具,支持多实例PHP、一键安装依赖、自动配置Nginx,极大简化了开发和部署流程。最棒的是,ServBay最近刚刚推出了全新Windows版本,同时升级了系统监控和Nginx配置管理功能,让跨平台使用更稳定、体验更顺畅。

无论你是用Mac还是Windows,都能通过它快速搭建起符合实际需求的本地环境,再也不用为手动写配置文件、启动服务头疼。

写在最后

很多人觉得部署是门槛,其实很多时候只是对工具不熟。

Nginx 看起来复杂,但其实你只要掌握几个关键配置,就能应对大多数应用场景:

  • 静态托管 ✔
  • API 反代 ✔
  • 多服务负载均衡 ✔
  • 缓存加速 ✔

我写这篇文章的目的不是让你背配置,而是想让你理解“每一行配置是在解决什么问题”

如果你看完动手试一下,大概率就能告别“浏览器打不开服务”的小白阶段了。

掌握 Nginx 真的能让你在部署路上少走很多弯路。

如果你觉得直接操作命令行还不够方便,或者想省事一点,推荐你试试 ServBay。我用它来快速搭建本地环境,配合 Nginx 反向代理,调试和上线都快多了。


📌 想学更多 Web 后端部署、Python 生态部署技巧、Nginx + Gunicorn + Supervisor 等组合配置,也欢迎留言,我会持续更新踩坑经验贴~

🧡 如果这篇对你有帮助,别忘了点个赞、分享给也在部署路上的朋友~