概括:
我正在尝试通过 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”。