Apache Docker反向代理
我有一个web应用程序集合,每个应用程序都在自己的Docker容器中运行。我可以通过Apache Docker反向代理,apache,docker,docker-compose,reverse-proxy,virtualhost,Apache,Docker,Docker Compose,Reverse Proxy,Virtualhost,我有一个web应用程序集合,每个应用程序都在自己的Docker容器中运行。我可以通过http://localhost:9001,例如。我想通过https://site.example.com,而不是。我有一个通配符让我们为example.com加密证书 我知道我需要Apache来完成从FQDN到端口的直接通信。因此,我设置了一个VirtualHost(如下)。正常的网络活动似乎运作良好。我可以正常浏览网站 但是,当我尝试使用OAuth(例如,BitBucket)登录时,会出现URI重定向不匹配错
http://localhost:9001
,例如。我想通过https://site.example.com
,而不是。我有一个通配符让我们为example.com
加密证书
我知道我需要Apache来完成从FQDN到端口的直接通信。因此,我设置了一个VirtualHost
(如下)。正常的网络活动似乎运作良好。我可以正常浏览网站
但是,当我尝试使用OAuth(例如,BitBucket)登录时,会出现URI重定向不匹配错误。当我在容器外运行时,不会发生这种情况。我认为我的代理设置有问题。有人能建议如何纠正吗
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName site.example.com
ServerSignature Off
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9001/
ProxyPassReverse / http://127.0.0.1:9001/
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
</IfModule>
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem
AllowEncodedSlashes NoDecode
</VirtualHost>
服务器管理员admin@example.com
ServerName site.example.com
服务器签名关闭
代理请求关闭
代理主机
ProxyPass/http://127.0.0.1:9001/
ProxyPassReverse/http://127.0.0.1:9001/
标头始终设置严格的传输安全性“最大年龄=15768000;包括子域;预加载”
斯伦金安
SSLCertificateFile/etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile/etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile/etc/letsencrypt/live/example.com/fullchain.pem
AllowEncodeDSL节点代码
对于这种用例,是一种非常适合的工具。再加上,您可以在同一台主机上设置多个docker容器,每个容器都有自己的端点。要远程访问它们,您只需将远程主机的IP地址绑定到您的所有端点(或使用公共DNS为您执行此操作)
下面是一个使用Traefik的docker compose.yml
示例
version: "3"
services:
traefik:
image: traefik:latest
command: --api --docker --logLevel=DEBUG
ports:
- "80:80"
- "443:443"
- "8082:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.enable=false"
your_first_container:
image: <YOUR_IMAGE>
labels:
- "traefik.frontend.rule=Host:site.example.com"
- "traefik.port=9001"
版本:“3”
服务:
特拉菲克:
图片:traefik:最新
命令:--api--docker--logLevel=DEBUG
端口:
- "80:80"
- "443:443"
- "8082:8080"
卷数:
#这样Traefik就可以监听Docker事件了
-/var/run/docker.sock:/var/run/docker.sock
标签:
-“traefik.enable=false”
您的第一个容器:
图片:
标签:
-“traefik.frontend.rule=Host:site.example.com”
-“traefik.port=9001”
感谢您的回复,但您能否解释一下这是如何解决问题的,对不起?Traefik为您创建了容器端口/FQDN绑定的抽象,我认为这是您问题的根源(但可能我错了)。您能准确地描述一下从OAuth系统得到的错误吗?