静态服务内部apache 服务器NodeJS api 在自定义端口上打开并将其转发到公共 url 文件可以做什么

问题描述

简介

我有一个大学管理的服务器,它不让学生访问互联网流量的开放端口,但学生仍然可以打开端口(例如 4040 用于他们的 NodeJS 应用程序以供内部访问)。

每个学生的帐户都有一个 public_html 文件夹(类似于 /var/www/),它静态地(或由 PHP 呈现)提供此 URL 上 public_html 中的所有文件(使用 Apache 服务器) :

http://mi-linux.wlv.ac.uk/~studentid/

问题

但是,就我而言,我想使用 postman 公开一个用于外部测试的 API,并将其添加到 React 应用程序中。问题是,它使用 NodeJS 和 express,并在端口 4040 上创建了自己的服务器。

我可以在内部使用来自 ssh 的 curl 命令来访问 API,例如:

studentid@csl-student:~$ curl http://localhost:4040
{"message": "hey! The backend is working. Explore routes from the code"}

现在,由于学生不能允许开放帖子用于 HTTP 流量,因此人们根本无法从服务器外部访问我的 NodeJS API(我必须这样做)。

我查过的东西

我广泛搜索了诸如如何静态地为 nodejs 应用程序提供服务,如何将端口从 8080(https 端口)转发到 4040(我的 NodeJS 端口)等主题,但其中大多数需要 sudo 访问 ,其中一些根本不起作用。

我提出的解决方

我想我仍然可以访问我的 public_html 文件夹,它是静态提供的,并且可以呈现 PHP。我知道我可以创建一个 index.html(或 index.PHP文件来在内部获取 http://localhost:4040,然后简单地转发结果,因为 API 端口在内部是开放的,而 {{1 }} 文件可以在外部提供。

文件可以做什么

使用

加载文件
index.html

文件可以在服务器本身内部加载来自 http://mi-linux.wlv.ac.uk/~studentid/index.html 的响应(因为 API 可在内部访问),然后将结果连同状态代码和标头一起发送。

但是,我的 API 有多个路由,我无法对每个路由进行硬编码。必须有一种更有效的方法来做到这一点。

我在找什么

如果有人可以将我引导到一个已经制作的包,我将非常感激,该包用于转发带有从内部 API 预加载的响应的静态文件

或者我可以有一个 localhost:4040 脚本,它可以完成我需要的所有转发并公开 API。

PS:我知道应该在 Server Fault 上问这个问题,但因为我认为这可以通过使用脚本或其他东西来完成,所以我在这里问了。

解决方法

对此的解决方法是将您的 NodeJs 代码托管在第三方平台上,例如 Heroku。

并创建一个 PHP 脚本,该脚本充当中间件代理并向您的 Heroku-Hosted-NodeJs API 端点发出 curl 请求。

enter image description here

,

服务器上是否启用了 Apache 的插件 mod_rewritemod_proxy

如果是这样,也许您可​​以将 ProxyReverse 与 mod_rewrite 的 P 标志 一起使用在 .htaccess 文件 中,如in this post 所述:

RewriteEngine On
RewriteRule ^/node/(.*)$ 
http://localhost:4040/$1 [L,P]
ProxyPassReverse /node http://localhost:4040

(我现在无法测试,所以我的回答纯属推测,抱歉。)

另一个选项,如果无法修改服务器配置,可以使用 mod_headers 和 Location,但我不确定它是否透明:

Header edit Location ^http://internal\.example\.com/(.*) http://example.com/$1