Apache、Docker、代理-将浏览器中的地址更改为 127.0.0.1

Apache、Docker、代理-将浏览器中的地址更改为 127.0.0.1

我有 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)并从那里(在根目录)提供模块。

相关内容