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

如何隐藏Node.js API请求中的端口号?(Apache、React环境)

解决React调用Node.js API时端口号暴露的问题

要隐藏API请求里的端口号,核心是通过Apache反向代理,让前端请求直接指向你的域名(不带端口),再由Apache转发到Node.js服务。以下是具体实现步骤,同时帮你排查之前虚拟主机未生效的可能原因:

1. 启用Apache反向代理模块

首先确保Apache开启了必要的代理模块,执行以下命令:

a2enmod proxy proxy_http
# 重启Apache使模块生效
systemctl restart apache2  # Ubuntu/Debian环境
# 或
service httpd restart      # CentOS/RHEL环境

2. 配置虚拟主机反向代理

修改你的Apache虚拟主机配置文件(通常在/etc/apache2/sites-available/yourdomain.conf),添加反向代理规则,同时处理React SPA的路由 fallback:

<VirtualHost *:80>
    ServerName yourdomain.com  # 替换成你的实际域名
    DocumentRoot /path/to/your/react/build  # React构建文件的存放目录

    # 将所有/api开头的请求转发到Node.js服务(假设Node监听3000端口)
    ProxyPass /api http://localhost:3000/api
    ProxyPassReverse /api http://localhost:3000/api

    # 处理React单页应用的路由(避免刷新页面出现404)
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.html [L]
</VirtualHost>

配置完成后,启用这个虚拟主机并重启Apache:

a2ensite yourdomain.conf
systemctl restart apache2

3. 调整React前端的API请求路径

前端代码里不要再写带端口的API地址(比如http://localhost:3000/api/xxx),改成相对路径/api/xxx。如果用环境变量管理,在React的.env文件里设置:

REACT_APP_API_URL=/api

然后在代码中通过process.env.REACT_APP_API_URL + '/your-endpoint'拼接请求地址,这样请求会自动走当前域名,不会暴露Node的端口。

4. 排查之前虚拟主机未生效的原因

  • 检查代理模块是否加载成功:执行apache2ctl -M(或httpd -M),确认输出里有proxy_module和proxy_http_module。
  • 检查配置文件语法:执行apache2ctl configtest,如果有语法错误会直接提示,修正后再重启Apache。
  • 确认虚拟主机已启用:用a2ensite命令启用后,检查/etc/apache2/sites-enabled/目录下是否有配置文件的软链接。
  • 限制Node服务的监听地址:在Node代码里把监听地址改成127.0.0.1(而非0.0.0.0),确保外部无法直接访问Node端口,只能通过Apache代理。

额外安全建议

  • 启用HTTPS:用Let's Encrypt免费证书加密请求,进一步提升安全性,同时避免浏览器的混合内容警告。
  • 防火墙限制:配置防火墙规则,只允许本地(127.0.0.1)访问Node的端口,外部请求只能通过Apache的80/443端口进入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:30:53