ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Nginx部署基础流程

Nginx部署基础流程

Nginx部署

1. 核心概念

1.1 什么是Nginx?

Nginx是一款轻量级的Web服务器,可以理解为网站的“服务员”,主要工作:

  • 当有人在浏览器输入你的网址时,Nginx 负责接待这个请求
  • 把网站的 HTML、图片、CSS 等文件发给访客(静态网站)
  • 把请求转交给后端的程序(如 Node.js、Python、Java)处理,再把结果返回给访客(反向代理)

核心优势:快、内存占用低、高并发能力强,是目前全球使用最广泛的 Web 服务器之一。

1.2 正向代理 VS 反向代理?

正向代理:类似于“代购”
举例介绍:

  • 你(客户端)想访问国外网站,但直接访问不了
  • 你找一个代理服务器(VPN),让它帮你去访问,再把内容转给你
  • 特点:客户端知道代理的存在,服务端只知道代理的地址
  • 正向代理代理的是客户端

反向代理:类似于“前台接待”
举例介绍:

  • 顾客(访客)去一家大餐厅,只面对前台接待员(Nginx)
  • 接待员根据顾客需求,把订单转给后厨炒菜、或让吧台做饮料
  • 顾客根本不知道后面有几位厨师、几个吧台,只知道找前台就行
  • 特点:客户端以为前台就是全部,后台服务器被隐藏和保护起来
  • 反向代理代理的是服务端
    Nginx 最常用的角色就是反向代理,它挡在最前面,统一接收所有访客请求,再分发给后端应用。
1.3 什么是端口?

一台服务器可以同时运行很多服务,端口用于区分不同服务。
如果把服务器比作一栋大楼,IP 地址是楼号,端口(Port)就是房间号:

  • 80 端口:HTTP 协议的默认房间(普通网页)
  • 443 端口:HTTPS 协议的默认房间(加密网页)
  • 3000/8080 等:通常是后端应用程序运行的房间
    Nginx 默认守在 80 和 443 门口,访客不用指定房间号就能找到它。
1.4 什么是防火墙?

服务器的防火墙就像大楼的保安,默认情况下谁也不许进。你需要告诉保安:“让找 80 号和 443 号房间的人进去”,外部访客才能访问你的网站。

1.5 什么是静态网站和动态网站?
  • 静态网站:网页内容是固定的 HTML 文件,Nginx 直接读取硬盘上的文件发给访客即可。
  • 动态网站:内容需要实时计算(如查询数据库、用户登录状态),需要后端程序处理。Nginx 作为反向代理,把请求交给后端程序,再把结果返回。

2. 部署步骤

2.1 安装Nginx

sudo apt update
sudo apt install nginx
apt 是 Linux 的包管理器,它会从官方软件源下载 Nginx 并自动安装。安装过程中会自动创建:

  • 运行用户(如 www-data,一个低权限的系统用户,为了安全)
  • 默认网站目录(/var/www/html,放网页文件的地方)
  • 配置目录(/etc/nginx,放各种设置文件的地方)
  • 系统服务(让 Nginx 能被"开机启动"和"重启"管理)
2.2 启动并设置开机自启
sudo systemctl start nginx sudo systemctl enable nginx

作用: 让 Nginx 现在就开始工作,并且服务器重启后自动恢复运行。

  • systemctl 是 Linux 用来管理"服务"的工具。服务就是后台持续运行的程序。
  • start:立即启动 Nginx。启动后,Nginx 会创建一个主进程(master)和多个工作进程(worker)。主进程负责管理,worker 进程负责实际接待访客。
  • enable:把 Nginx 加入开机启动列表
    启动后,在浏览器输入服务器的 IP 地址,如果看到 “Welcome to nginx!” 页面,说明安装成功。
2.3 配置防火墙放行 HTTP/HTTPS
sudo ufw allow 'Nginx Full' # 或单独放行 sudo ufw allow 80/tcp sudo ufw allow 443/tcp

作用:让外部用户能通过网络访问你的网站。

2.4 创建网站配置文件

sudo nano /etc/nginx/sites-available/myapp

写入:

server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

作用:告诉 Nginx:“当有人访问example.com 时,你应该怎么处理”。

  • server { … }:一个"虚拟主机"块。你可以在一台服务器上托管多个网站,每个网站用一个 server 块。
  • listen 80:监听 80 端口(HTTP 默认端口)。
  • server_name example.com:域名匹配。当访客的请求是 example.com 时,Nginx 使用这个配置块处理。如果输入的是 IP 地址,Nginx 会匹配第一个 listen 80 的 server 块。
  • location / { … }:路径匹配。/ 表示所有请求。
  • proxy_pass http://127.0.0.1:3000:这就是反向代理的核心命令。Nginx 自己不处理这个请求,而是把请求转发给本机 3000 端口上运行的程序(比如你的 Node.js 或 Python 应用),等后端处理完后,再把结果传回给访客。
  • proxy_set_header:转发请求时带上原始信息(如访客的真实 IP),否则后端只能看到 Nginx 的 IP。
2.5 启用站点配置

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
作用:让 Nginx 真正加载你刚写的配置。

  • sites-available(可用站点):存放写好的所有配置文件,相当于"候选名单"。
  • sites-enabled(已启用站点):存放真正生效的配置,相当于"正式上岗名单"。
    这样设计的原因:方便管理。
    假设有10个网站的配置,但是只想开其中3个,那么可以使用软链接的方式把想开的3个挂到enabled,想关闭的时候直接删除软链接即可,非常方便。
2.6 测试并重载配置
sudo nginx -t sudo systemctl reload nginx

作用:确保配置没写错,并且不停机就生效。

  • nginx -t:Nginx 会先预检查你的配置文件。如果有语法错误(比如少了个分号、括号没配对),它会报错并拒绝生效,避免把错误的配置应用到线上导致网站崩溃。
  • reload(重载):Nginx 重新读取配置文件,启动新的 worker 进程处理新请求,同时让旧的 worker 进程处理完手头的请求后优雅退出。整个过程网站不会中断,访客几乎感知不到。
    注意:配置出错时千万不要用 restart(重启),因为重启会中断服务。先 nginx -t 确认无误,再用 reload。
2.7 部署应用文件
sudo cp -r /path/to/your/dist/* /var/www/html/ # 或自定义根目录,确保 Nginx 有读取权限

作用:把网页代码放到服务器上,让 Nginx 能读取并发送给访客。

  • Nginx 的 worker 进程以 www-data(低权限用户)身份运行,这是为了防止黑客入侵后获得太高权限。因此,网页文件必须对这个用户可读,存放文件的目录必须对该用户可进入(执行权限 x)。如果权限不对,Nginx 会返回 403 Forbidden(禁止访问)错误。
返回列表