使用virtualmin在静态url上提供本地react应用程序的反向代理



我有一个本地运行的reactJS应用程序,我想运行作为一个子域托管在virtualmin上的域,这样应用程序可以托管在本地,但可以公开看到。

ngrok。IO允许你通过一个公开可见的子域为本地运行的reactjs应用程序(或许多其他东西)提供服务。

我的目的是回答我自己的问题,因为当我搜索时,我遇到了很多死胡同。我试着用尽可能多的关键词来寻找答案
  1. 在Virtualmin中,点击'Create Virtual Server'

  2. 对于域名,请使用"subdomain.x.com">

  3. Enabled功能:设置DNS区域(如果需要),apache网站启用,apache ssl网站启用。

  4. 点击服务器配置->编辑代理网站

  5. 设置"启用代理?"Yes"帮助"。代理到url: http://localhost:12809/

  6. 在本地主机上运行你的reactjs应用。我们假设它运行在端口8301上。

  7. 在你的本地主机上,建立一个ssh隧道到你的服务器;做的事:

    ssh -N -T -R 12809:localhost:8301 user@x.com

7a)在SSH上使用-vv标志进行测试。您应该在输出中看到这一行:

`debug1: remote forward success for: listen 12809, connect localhost:8301`

7b)然后在服务器上,您可以这样做来测试是否有连接:

`telnet 127.0.0.1 12809`

如果您连接到服务器上的Telnet,那么您将在本地主机上看到来自SSH命令的消息:

`debug1: channel 1: connected to localhost port 8301`

7c)如果可以,那么您也可以尝试从您的虚拟服务器中获取:

`wget 127.0.0.1:12809`

7d)如果工作,你应该不能telnet/wget从外部的虚拟服务器。它只能在您的服务器中使用,apache将代理从子域到127.0.0.1的服务的流量。您可以尝试netstat -ntlp | grep 12809以确保端口12809正在侦听。

  1. reload "subdomain.x.com"你在本地运行的reactjs应用会在那里公开。

  2. 如果您需要启用websockets,请确保将其添加到您的apache配置文件Services->Configure Website->Edit Directives。

RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:12809%{REQUEST_URI} [P]

RewriteEngine On部分

编辑:当我最初写这篇文章时,这是一个不必要的步骤,但我在这里留下它,以展示如何通过另一个服务器路由,如果你想/需要:

)下载'caddy'到你的virtualmin用户主目录:https://caddyserver.com/download

)然后在caddy上运行反向代理,从连接到本地主机(在本例中为9000)的端口到从subdomain.x.com提供的端口:

`./caddy reverse-proxy --from :12809 --to 127.0.0.1:9000`

)在这种情况下,您将在本地主机上运行ssh,如9000:localhost:8301

最新更新