Node.js 项目在 Linux 上如何配置 Nginx

周叙
周叙
发布时间:2026-08-22| 88人浏览过
原创

前言

Node.js 项目部署到 Linux 服务器后,通常不会直接把应用端口暴露给公网,而是交给 Nginx 做反向代理。这样既方便统一接入 80/443,也为后续启用 HTTPS、缓存和负载均衡留出空间。下面按实际部署顺序梳理一遍完整流程,并把最容易出错的配置项和排查点一起说明清楚。

Node.js 应用在 Linux 服务器上直接对外监听端口并不少见,但真到生产环境,通常还是要在前面加一层 Nginx 来做反向代理。这样既方便统一接入 80/443 端口,也更利于后续继续接 HTTPS、缓存策略或负载均衡。

这篇文章按实际部署顺序,把安装、配置文件写法、启用站点、语法检查和防火墙放行逐步拆开。你可以跟着命令直接操作,也能顺手核对每一步的作用,避免卡在“服务明明启动了但浏览器就是打不开”这类常见问题上。

安装 Nginx

第一步是确认服务器已经安装 Nginx。不同 Linux 发行版使用的包管理器不同,但命令差异不大。

Debian / Ubuntu 系统

sudo apt update
sudo apt install nginx

CentOS / Red Hat 系统

如果是 CentOS 这类 Red Hat 系发行版,先安装 EPEL 源,再安装 Nginx:

sudo yum install epel-release
sudo yum install nginx

启动服务并设置开机自启

安装完成后,先把 Nginx 服务启动起来,同时设置为开机自动启动。这一步是基础操作,但也经常被漏掉。

sudo systemctl start nginx
sudo systemctl enable nginx

执行完之后,Nginx 就已经在系统中作为服务运行,接下来可以开始配置反向代理。

编写 Node.js 反向代理配置

真正关键的部分,是让 Nginx 把外部请求转发到你的 Node.js 应用。默认配置文件通常位于 /etc/nginx/nginx.conf,或者使用站点目录结构时放在 /etc/nginx/sites-available/default。

Nginx 反向代理配置结构图,展示域名请求如何转发到本机 Node.js 端口,以及 server_name、listen 和 proxy_pass 的对应关系。
Nginx 反向代理配置结构把域名请求转发到 Node.js 服务时,最容易出错的就是监听端口、域名匹配和转发目标三处。

更推荐的做法,是为当前项目单独新建一个配置文件,后续维护会更清晰:

sudo nano /etc/nginx/sites-available/your-nodejs-app

写入下面这段配置,注意替换域名和端口:

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名或公网 IP

    location / {
        proxy_pass http://localhost:3000;  # 替换为你的 Node.js 应用地址和端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这段配置的重点是什么

listen 80; 表示 Nginx 监听 HTTP 默认端口,server_name 用来匹配访问时使用的域名或公网 IP。

location / 中的 proxy_pass http://localhost:3000; 则是把请求转发到本机的 Node.js 服务,前提是你的应用确实运行在 3000 端口。如果应用实际监听的是别的端口,这里必须同步修改。

后面的几行 proxy_set_header 配置,主要用于保留请求头信息,并处理升级连接等场景。对于常规 Node.js Web 项目,这一组写法很常见,通常可以直接沿用。

启用站点配置

在很多 Debian / Ubuntu 风格的 Nginx 部署方式中,真正生效的是 sites-enabled 目录下的文件。因此,创建完配置文件后,还需要把它链接到该目录中:

Nginx 站点启用与生效流程图,展示 sites-available、sites-enabled、nginx -t 和 reload 之间的关系。
站点配置生效流程单独创建站点文件后,还要链接到 sites-enabled,并在重载前先做语法检查。
sudo ln -s /etc/nginx/sites-available/your-nodejs-app /etc/nginx/sites-enabled/

这一步完成后,Nginx 才会在重新加载配置时读取你的新站点设置。

检查配置并重新加载 Nginx

不要直接重载服务,先做一次语法检查更稳妥。很多部署问题,其实都能在这一步提前发现。

sudo nginx -t

如果输出提示语法正确,再执行重载:

sudo systemctl reload nginx

这样可以在不中断服务的前提下,让新配置立即生效。

放行 HTTP/HTTPS 端口

如果前面的步骤都没问题,但浏览器仍然无法访问,另一个高频原因就是防火墙没有放行 80 和 443 端口。

使用 ufw 时,可以直接执行:

sudo ufw allow 'Nginx Full'

这条规则会同时放行 HTTP 和 HTTPS 流量,也就是 80 和 443 端口。

访问验证与常见排查项

完成以上步骤后,就可以在浏览器中输入你的域名或公网 IP 进行访问。正常情况下,页面应该会显示 Node.js 应用返回的内容。

如果访问没有成功,优先检查下面几项:

  • Node.js 服务是否已经正常运行。
  • Nginx 配置中的 proxy_pass 端口是否与实际监听端口一致。
  • server_name 中填写的域名或公网 IP 是否正确。
  • 防火墙是否已经放行 80 / 443 端口。

只要这几个关键点没有配错,大多数基础反向代理场景都能顺利跑通。

完成基础代理后还能继续做什么

到这里,Nginx 已经可以为 Node.js 项目提供基础的反向代理能力。后续如果要进一步用于生产环境,还可以继续补上 HTTPS、缓存策略、访问控制或负载均衡等配置。

换句话说,这篇文章解决的是“先把服务稳定挂起来”的第一步;当这一步跑通后,后面的优化基本都可以在现有配置上逐步叠加。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。