如何解决静态服务内部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 请求。
,服务器上是否启用了 Apache 的插件 mod_rewrite
和 mod_proxy
?
如果是这样,也许您可以将 ProxyReverse 与 mod_rewrite 的 P 标志 一起使用在 中,如in this post 所述:.htaccess
文件
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。