当方で用意したAWSのEC2上のApacheのWEBサーバーからクライアントが画像を取得しようとしたときに,サーバーにファイルが存在しない場合は,EC2が自宅のWEBサーバーからファイルを取得して,それをクライアントに返すようにしたい.
そこで,AWSのWEBサーバーの[DocumentRoot]/archive/.htaccessに下記のように設定した.
htaccess
1RewriteEngine On 2RewriteCond %{REQUEST_URI} ^.*/storage/[^/]+.(jpg|png|gif)$ 3RewriteCond %{REQUEST_FILENAME} !-f 4RewriteRule ^storage/([^/]+.(?:jpg|png|gif))$ http://xxx.xxx.xxx.xxx:8080/storage/$1 [L,P]
例えば,https://hoge.jp/archive/storage/aaa.jpg
にアクセスして,ファイルが存在しない場合はリバースプロキシでhttp://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg
からデータを取得してクライアントに返すようにしたい.
しかし,https://exmaple.com/archive/storage/aaa.jpg
にアクセスすると404エラーとなってしまう.
Apacheのerrorログを見ると以下のようになっていて,最後の行のhttp://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg
はブラウザから直接アクセスすれば画像を見ることができる上に,EC2上でwgetすると正常に取得できる.
解決方法が分かる方はいらっしゃいますでしょうか.
text
1[Sun Jul 12 00:05:16.006257 2020] [rewrite:trace3] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] strip per-dir prefix: /home/ubuntu/public_html/archive/storage/aaa.jpg -> storage/aaa.jpg 2[Sun Jul 12 00:05:16.006267 2020] [rewrite:trace3] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] applying pattern '^storage/([^/]+\.(?:jpg|png|gif))$' to uri 'storage/aaa.jpg' 3[Sun Jul 12 00:05:16.006278 2020] [rewrite:trace4] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] RewriteCond: input='/archive/storage/aaa.jpg' pattern='^.*/storage/[^/]+\.(jpg|png|gif)$' => matched 4[Sun Jul 12 00:05:16.006286 2020] [rewrite:trace4] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] RewriteCond: input='/home/ubuntu/public_html/archive/storage/aaa.jpg' pattern='!-f' => matched 5[Sun Jul 12 00:05:16.006291 2020] [rewrite:trace2] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] rewrite 'storage/aaa.jpg' -> 'http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg' 6[Sun Jul 12 00:05:16.006297 2020] [rewrite:trace2] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] escaped URI in per-dir context for proxy, http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg -> http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg 7[Sun Jul 12 00:05:16.006308 2020] [rewrite:trace2] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] forcing proxy-throughput with http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg 8[Sun Jul 12 00:05:16.006314 2020] [rewrite:trace1] [pid 15694] mod_rewrite.c(482): [client xxx.xxx.xxx.xxx:61496] xxx.xxx.xxx.xxx - - [hoge.jp/sid#7f7a55236f10][rid#7f7a551bc0a0/initial] [perdir /home/ubuntu/public_html/archive/] go-ahead with proxy request proxy:http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg [OK] 9[Sun Jul 12 00:05:16.006350 2020] [core:info] [pid 15694] [client xxx.xxx.xxx.xxx:61496] AH00128: File does not exist: proxy:http://xxx.xxx.xxx.xxx:8080/storage/aaa.jpg
EC2のApacheの手動設定内容(主要箇所抜粋・ファイル混在)
Apache
1<VirtualHost *:80> 2 DocumentRoot /home/ubuntu/public_html 3 RewriteEngine On 4 RewriteCond %{HTTPS} off 5 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 6</VirtualHost> 7 8<IfModule mod_ssl.c> 9 <VirtualHost _default_:443> 10 DocumentRoot /home/ubuntu/public_html 11 </VirtualHost> 12</IfModule> 13 14<Directory "/home/ubuntu/public_html"> 15 AllowOverride All 16 Options ExecCGI MultiViews SymLinksIfOwnerMatch IncludesNoExec 17 Require all granted 18 AddHandler cgi-script .cgi .pl 19</Directory>
- AWS・・・EC2,Ubuntu18.04(Debian10),Apache/2.4.29
- 自宅サーバー・・・Raspberry Pi3,OSMC(Debian9.12),Apache/2.4.25
- 自宅サーバーのselinuxを一時的にオフにしても変化なし
- .htaccessのRewriteRuleのオプションを[L,P]から[L]または[L,R]にして普通にリダイレクトさせれば画像が見れる
- AWSにアクセスして404が返ってきたとき,自宅サーバーのApacheのログには何も記録されていない
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。