如何将 http 请求重定向到在其他端口运行的服务

如何将 http 请求重定向到在其他端口运行的服务

我有一台机器最近获得了外部访问权限,但只能访问几个端口(SSH,HTTP 和 HTTPS)。现在这台机器必须提供对其他一些服务(例如 RabbitMQ,Tomcat 等)的访问权限,但我不想让这些端口获得外部访问权限。

我的第一个想法是将端口 80 上的 HTTP 请求重定向到这些服务。例如:

http://<machine_ip>:80/tomcat应该相当于http://<machine_ip>:8080

我想知道 Nginx、HAProxy 或其他代理相关软件是否可以帮助我解决这个问题。你有什么建议?请记住,我对系统管理还很陌生。

答案1

我有一个建议:您可以使用 Apache 代理(集群)网页。例如,您输入http://example.com/tomcatApache 会将请求传递给http://example.com:8080/. 很容易做到:

当您在 Apache 配置文件中定义新的 VirtualHost 块时,请向其中添加以下行(确保已启用 mod_proxy):

<Proxy balancer://custom-balancer-name>
    BalancerMember http://localhost:8080 #Enter the address of the second machine or service
</Proxy>

ProxyPass        /tomcat balancer://custom-balancer-name
ProxyReversePass /tomcat balancer://custom-balancer-name

希望我的回答对您有帮助。

答案2

您可以使用 HAProxy 来实现这一点。请慢慢来,因为这不是一件容易的事,尤其是当主题是新主题时。
您可以使用多种选项。

  • 每个服务添加一个监听块

    listen rabbit
      bind ::5672
      mode tcp
      ... some other haproxy options
      server rabbit-srv IP:PORT
    
    listen ....
    
  • 您可以使用 SNI (服务器名称指示) 路由与前端/后端组合,以保持使用 TLS 进行通信的服务的单一端口使用。我创建了一个 SNI 路由工作原理的图片,示例配置使用 HAProxyHAProxy 中的 SNI 路由如何工作

我不知道您使用哪个版本的 HAProxy,因此这里提供最新 HAProxy 版本 2.2 的链接。
http://cbonte.github.io/haproxy-dconv/2.2/configuration.html

答案3

.htaccess您可以使用 .htaccess 文件来执行此操作。首先,在文档根目录中创建一个文件,然后将以下几行粘贴到其中:

RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^tomcat/(.*[^/])/?$ http://%{HTTP_HOST}:8080/$1/ [R=301,L]

我希望我能帮到你。

相关内容