Ну, мне потребовалось некоторое время, чтобы разобраться, потому что было два основных угловых случая.Я остановлюсь на одном случае: wordpress image
<VirtualHost *:443>
ServerName new_domain.eu
ProxyPass / http://localhost:8081/
<Location />
AddOutputFilterByType SUBSTITUTE text/html
SetOutputFilter proxy-html
ProxyPassReverse /
Substitute "s|http://localhost:8081/|https://new_domain.eu/|i"
RequestHeader unset Accept-Encoding
</Location>
SSLCertificateFile /etc/letsencrypt/live/new_domain.eu/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/new_domain.eu/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
[ Прежде всего ], я не смог получить доступ к контейнеру с их локального ip (то есть 172.7.0.3:80, не знаю почему), поэтому я использовал порт localhost, определенный при настройке контейнера:
docker run -e WORDPRESS_DB_PASSWORD=thePassWord --name wordpress --link wordpressdb:mysql -p 8081:80 -v "$PWD/html":/var/www/html -d wordpress
[ secondly ] сложная частьбыло, следовательно, правильно обрабатывать относительные URL (например, некоторые / путь / к / CSS), потому что они не были доступны.По-видимому, это хорошо известная проблема .Эта часть была самой длинной: многое изменилось вокруг Apache 2.4, и синтаксис не очень хорошо документирован.По сути,
Substitute "s|http://localhost:8081/|https://new_domain.eu/|i"
заменяет все URL-адреса в html, чтобы можно было правильно обращаться к относительным ресурсам (css, js, png и т. Д.).
[ возможные улучшения ] Я не совсем доволен тем, что порт 8081 виден из внешнего мира.Это означает, что к приложению можно получить доступ с этого самого порта, минуя правила, которые я установил в apache.conf .Я исправил проблему, добавив правило iptables
iptables -A INPUT -p tcp -s localhost --dport 8081 -j ACCEPT
iptables -A INPUT -p tcp --dport 8081 -j DROP
Не совсем элегантно, поэтому, если у кого-нибудь есть предложение, дайте мне знать.
\ // _