我有 Apache 服务器,上面有几个站点。
我想在这个服务器上运行带有 Mercure 的 docker 容器并在互联网上共享它。
我在网上查到信息说需要在vhost配置中使用ProxyPass和ProxyPassReverse。
我的虚拟主机配置:
<VirtualHost *:80>
ServerName tomaszf.pl
ServerAlias www.tomaszf.pl
DocumentRoot /var/www/html/mercurytest/public
DirectoryIndex /index.php
<Directory /var/www/html/mercurytest/public>
AllowOverride None
Order Allow,Deny
Allow from All
FallbackResource /index.php
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost"
</FilesMatch>
<Directory /var/www/html/mercurytest/public/bundles>
DirectoryIndex disabled
FallbackResource disabled
</Directory>
ErrorLog ${APACHE_LOG_DIR}/tomaszf.pl.error.log
CustomLog ${APACHE_LOG_DIR}/tomaszf.pl.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.tomaszf.pl [OR]
RewriteCond %{SERVER_NAME} =tomaszf.pl
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
ServerName tomaszf.pl
ServerAlias www.tomaszf.pl
DocumentRoot /var/www/html/mercurytest/public
DirectoryIndex /index.php
<Directory /var/www/html/mercurytest/public>
AllowOverride None
Order Allow,Deny
Allow from All
FallbackResource /index.php
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost"
</FilesMatch>
<Directory /var/www/html/mercurytest/public/bundles>
DirectoryIndex disabled
FallbackResource disabled
</Directory>
ErrorLog ${APACHE_LOG_DIR}/tomaszf.pl.error.log
CustomLog ${APACHE_LOG_DIR}/tomaszf.pl.log combined
SSLCertificateFile /etc/letsencrypt/live/tomaszf.pl/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tomaszf.pl/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ProxyPass /mercure http://127.0.0.1:8099/
ProxyPassReverse /mercure http://127.0.0.1:8099/
</VirtualHost>
Docker 容器使用以下命令启动:
docker run \
-e SERVER_NAME=':80' \
-e MERCURE_PUBLISHER_JWT_KEY='!ChangeMe!' \
-e MERCURE_SUBSCRIBER_JWT_KEY='!ChangeMe!' \
-p 8099:80 \
-e CORS_ALLOWED_ORIGINS='https://tomaszf.pl' \
-e DEBUG=1 \
-e ALLOW_ANONYMOUS=1 \
dunglas/mercure caddy run -config /etc/caddy/Caddyfile.dev
问题:当您尝试进入网站 tomaszf.pl/mercure 时,浏览器中的地址会自动更改为 127.0.0.1,并且网站无法运行。
我需要在配置中更改什么?
答案1
我已经实现了相同的配置,除了自签名证书和修改我的主机文件以tomaszf.pl
指向127.0.9.1
我不是被重定向出该主机。
这证明来自 dockerhub 的最新版本的容器dunglas/mercure:latest
重定向正确。如果您遇到此问题,请验证您是否拥有最新的映像(c10597bdf077
撰写本文时为 amd64 的哈希值)。
你将要面对的另一个问题是 caddy 模块mecure
才不是似乎支持在主机根目录之外的任何地方提供模块(即tomaszf.pl
,不是 tomaszf.pl/mercure
)。这似乎是基于前缀的使用而做出的设计决策/.well-known
(Mercure Caddy Module 文档https://caddyserver.com/docs/modules/http.handlers.mercure)
我建议使用子域名(也许mercure.tomaszf.pl
)并从那里(在根目录)提供模块。