我有一台机器最近获得了外部访问权限,但只能访问几个端口(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]
我希望我能帮到你。