You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需端口号访问Ubuntu 16.04 VPS上的Node.js项目?

当然可以!这正是Nginx作为反向代理的经典用法——把默认的80端口(HTTP协议默认端口,访问时无需显式指定)的请求转发到你的Node.js项目的3000端口上,实现无端口号访问。下面是具体的操作步骤:

具体实现步骤

1. 编辑Nginx站点配置文件

首先找到你的Nginx站点配置,默认情况下在/etc/nginx/sites-available/目录下,通常默认站点的配置文件名为default。用终端编辑器打开它:

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

找到文件中的server块,替换或添加如下配置内容:

server {
    listen 80;
    server_name localhost.com; # 替换成你的实际域名或VPS公网IP

    location / {
        # 将请求转发到本地运行的Node.js服务
        proxy_pass http://localhost:3000;
        # 配置WebSocket支持(如果你的项目用到WebSocket的话)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        # 确保Node服务能正确获取请求的主机信息
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

2. 验证Nginx配置正确性

修改完配置后,一定要先检查有没有语法错误,避免重启Nginx后服务崩溃:

sudo nginx -t

如果输出显示nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置没问题;如果有错误,根据提示修改即可。

3. 重启Nginx服务让配置生效

执行以下命令重启Nginx,让新的配置生效:

sudo systemctl restart nginx

4. 调整Node.js服务的监听设置(可选但推荐)

为了安全性,建议让你的Node.js服务只监听本地地址(localhost或127.0.0.1),而不是所有地址(0.0.0.0),这样只有Nginx能访问到Node服务,外部无法直接通过3000端口访问:

// Express示例
const express = require('express');
const app = express();

// ... 你的项目代码 ...

app.listen(3000, 'localhost', () => {
    console.log('Node服务运行在 http://localhost:3000');
});

额外注意事项

  • 如果你需要用HTTPS访问(无端口号的https://localhost.com),需要在Nginx中配置443端口的server块,同样添加反向代理规则,同时配置好SSL证书
  • 确保你的VPS防火墙已经开放了80端口(如果使用UFW防火墙,可以执行sudo ufw allow 80/tcp来开放)

完成以上步骤后,你直接访问http://localhost.com就会自动转发到你的Node.js项目,和访问常规PHP项目的体验完全一致!

内容的提问来源于stack exchange,提问作者eylesa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:25:39