如何使用Apache将流量重定向到Docker容器

11
我在Ubuntu虚拟机上运行了两个Tornado应用程序的docker容器,它们分别命名为app1app2。虚拟机有一个域名ubuntu.somesite.com。我可以通过docker端口转发访问其中一个应用程序,即ubuntu.somesite.com:8080。相反,我希望这两个应用程序都可以通过ubuntu.somesite.com/app1ubuntu.somesite.com/app2进行访问。您认为最好的实现方法是什么?我尝试使用Apache虚拟主机,但没有得到很好的结果。

如果您还想使用HTTPS,可以参考这个好的教程:https://codeburst.io/http-server-on-docker-with-https-7b5468f72874 - BerndGit
1个回答

21

你需要将两个Docker容器暴露在主机网络上,当然要在不同的端口上(比如说8080和8081)。

接着你需要在主机上设置一个反向代理。Apache 2.4是其中一种可能的选择。你可以像这样使用虚拟主机:

<VirtualHost *:80>
  ServerName ubuntu.somesite.com

  <Location />
    Order allow,deny
    Allow from all
    Require all granted
  </Location>

  ProxyPass /app1 http://127.0.0.1:8080/
  ProxyPassReverse /app1 http://127.0.0.1:8080/

  ProxyPass /app2/ http://127.0.0.1:8081/
  ProxyPassReverse /app2/ http://127.0.0.1:8081/
</VirtualHost>
请注意,此配置不适用于Apache 2.2或更早版本。

1
这会将 ubuntu.somesite.com:8080:8081 暴露给外部吗? 如果是的话,有没有不暴露的方法? - yam
1
它们暴露在主机网络中。如果您有防火墙,则无法通过该端口访问您的服务。如果您想完全避免端口映射,可以使用一个反向代理,它本身是docker化的,并仅将代理暴露给主机网络。 - whites11
3
在执行此操作后,如果出现“无效命令'ProxyPass'”的错误,请运行“sudo a2enmod proxy_http”,然后它应该开始工作。 - gouravkr
我正在Docker上运行Sonar。我的Apache(CentOS上的服务)找不到文件。我尝试了使用<Location>和不使用<Location>进行测试。我的错误信息是:AH00128: File does not exist: GET /sonarqube/js/main.m.c5b6e957.js。我需要配置什么? - Taciano Morais Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接