![](/img/trans.png)
[英]Docker-compose multiple services listen on same port, different domains
[英]docker docker-compose multiple sub.domains with SSL/ port 443 & Apache ssl.conf VirtualHost and Dockerfile
如何使用子域而不需要使用附加到 sub_n.domain.com:444 的端口号
我有:
我确实在端口 443 上运行了以下“实例”之一:
sub1:
hostname: localhost
container_name: sub1
build:
context: ./core
restart: always
volumes:
- ./core/html:/var/www/html
- ./core/apacheErrorLog:/var/www/apacheErrorLog
tty: true
ports:
- "443:443"
- "80:80"
ADD ssl.conf /etc/apache2/sites-available/ssl.conf
RUN rm -rf /etc/apache2/sites-enabled/000-default.conf
COPY ./html/ /var/www/html/sub1/
RUN a2enmod ssl
RUN a2ensite ssl
RUN a2enmod vhost_alias
RUN a2enmod rewrite
CMD echo "ServerName localhost" >> /etc/apache2/apache2.conf
并且,ssl.conf
<VirtualHost *:80>
ServerName sub1.domain.com
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log common
</VirtualHost>
<VirtualHost *:443>
ServerName sub1.domain.com
ServerAdmin webmaster@domain.com
DocumentRoot /var/www/html/sub1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl_keys/cert.crt
SSLCertificateKeyFile /etc/apache2/ssl_keys/key.key
SSLCertificateChainFile /etc/apache2/ssl_keys/bundle.ca-bundle
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
<Directory /var/www/html/sub1>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
DirectoryIndex index.php
</VirtualHost>
==================================================== =============
问题是:如果我现在添加一个 sub2.domain.com 以下/调整这些步骤,我需要将 docker-container 暴露到另一个端口,例如 444 - 现在,正确的“重定向”ro DocumentRoot 只会起作用,当端口显式输入 url - 否则,将使用“443 的默认值(此处:var/www/html/”,无论哪个 sub_n. - 域输入到浏览器的 url 地址。
所以: https://sub2.domain.com:444/ -> 好的,进入 var/www/html/sub2/ (根据服务定义)
但是https://sub2.domain.com/ -> false,进入 var/www/html/ (= 为在 sub1-docker-container 中运行的 sub1 定义的那个,因此,完全错误的 docker 服务......)
--> 只有一个端口 443 - 如果您需要多个 docker-containerized-LAMP-stacks 运行 SSL 连接/可通过一个特定端口访问,您需要一个特殊的解决方案来完成这项工作,例如traefik 反向代理: https://doc.traefik.io/traefik/providers/docker/ 。
也许,还有其他/更简单的解决方案,但我已经对 traefik 和 docker-compose 及其路由范式有一些经验......
随意添加其他可能更简单的解决方案!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.