如何通过 Apache 创建到 Google Cloud 的代理并处理 403 故障转移?

如何通过 Apache 创建到 Google Cloud 的代理并处理 403 故障转移?

概括:

我正在尝试通过 Apache 将图像代理到 Google Cloud。

如果图像不存在,我想将请求转发到不同的路由,该路由将返回图像并将其保存在 Google Cloud 上以供下次使用。

图例:

用于代理的本地媒体域:媒体之家

如果图像不存在,则应转发请求(不重定向)的站点:主站点

谷歌云存储桶:storage.googleapis.com/mymedia.appspot.com

情况1:

http://media.homestead/dimension/150x100/sport.jpg

该图像存在于谷歌云上,因此用户将获得图像响应。

案例 2:

http://media.homestead/dimension/600x400/sport.jpg

该图像不存在,用户应该从 mainsite.homestead/dimension/150x100/sport.jpg 获得响应

为什么?

因为有 ErrorDocument 403 来涵盖这种情况。如果图像不存在,我们会从 Google Cloud 获取标头状态 403。

我为 Apache 使用的配置:

LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so

<VirtualHost *:80>
    ServerName media.homestead
    ServerAdmin webmaster@localhost
    ServerAlias media.homestead

    Header always append X-Frame-Options SAMEORIGIN
    Header always append X-XSS-Protection "1; mode=block"
    Header always append X-Content-Type-Options nosniff

    Header unset X-GUploader-UploadID
    Header unset alt-svc
    Header unset alternate-protocol
    Header unset x-goog-hash
    Header unset x-goog-generation
    Header unset x-goog-metageneration
    Header unset x-goog-stored-content-encoding
    Header unset x-goog-stored-content-length
    Header unset x-goog-storage-class
    Header unset Set-Cookie

    RequestHeader set X-SCHEME https
    RequestHeader set X-Forwarded-Proto https
    RequestHeader set Host "https://storage.googleapis.com/mymedia.appspot.com"

    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off

    ProxyErrorOverride On

    <Location />
        ProxyPass http://storage.googleapis.com/mymedia.appspot.com/
        ProxyPassReverse http://storage.googleapis.com/mymedia.appspot.com/
    </Location>


    <Location /media>
        ProxyPass http://mainsite.homestead/dimension
        ProxyPassReverse http://mainsite.homestead/dimension
    </Location>

    ErrorDocument 403 /media
    ErrorDocument 404 /media
</VirtualHost>

mainsite.homestead 上的 PHP 脚本内容:

<?php
echo $_SERVER['REQUEST_URI'];exit;

问题:

问题是,当我在主站点上打印当前 URL 时,我得到的是“/dimension”而不是“/dimension/600x400/sport.jpg”

答案1

终于解决了。

我已替换以下几行:

    <Location /media>
        ProxyPass http://mainsite.homestead/dimension
        ProxyPassReverse http://mainsite.homestead/dimension
    </Location>

    ErrorDocument 403 /media
    ErrorDocument 404 /media

有以下两个:

    <Location /media>
        ProxyPass http://mainsite.homestead
        ProxyPassReverse http://mainsite.homestead
    </Location>
    ErrorDocument 403 /media/%{REQUEST_URI}
    ErrorDocument 404 /media/%{REQUEST_URI}

现在我得到了请求的 URL“/dimension/600x400/sport.jpg”。

相关内容