apache 反向代理 404 图像错误

apache 反向代理 404 图像错误

我的 Apache 反向代理出现了一些错误。目前,我正在对 4 个网站进行反向代理。

  • 1.1.1.1/a
  • 1.1.1.2/b
  • 1.1.1.3/c
  • 1.1.1.4/天

反向代理到 a 和 b 网站时没有遇到任何问题。图像很好,没有问题。

然而,当访问 c 和 d 网站时,图像无法加载。在我的 access_log 中,以下是日志。

- - [08/May/2014:10:40:36 +0800] "GET /whatshot_v3/images/promo/img_samplePromo.jpg HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/menu/faq_butt_03.png HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/banner/text_planprice.gif HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/banner/text_services.gif HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/banner/text_account.gif HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/shortcut/bann_store.gif HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/shortcut/bann_rewards.gif HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/shortcut/bann_idd.gif HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/footer/img_customerService.png HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/footer/icon_fb.png HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/footer/icon_tw.png HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/footer/icon_rss.png HTTP/1.1" 404 1245
- - [08/May/2014:10:40:36 +0800] "GET /images_v3/footer/icon_share.png HTTP/1.1" 404 1245

从apache反向代理服务器本身访问没有问题,从外部访问时就出现问题。

我尝试在另一台机器上直接输入 URL,然后图像就加载了。

1.1.1.1 - - [08/May/2014:10:19:00 +0800] "GET **/d/images_v3/footer/icon_share.png** HTTP/1.1" 200 869 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36
1.1.1.1 - - [08/May/2014:10:18:24 +0800] "GET **/images_v3/footer/icon_share.png HTTP/1.1" 404 1245** "htt://1.2.3.4/digi/landing.do" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36"

你可以看到第一个链接可以正常工作。第二个链接则不能。

当我正常请求网页时,它会请求第二个链接,并且会因为找不到路径而导致404错误。

如果我直接输入第一个链接,就会找到图像。

我注意到输入链接时 c 和 d 网站被重定向。这就是问题的原因。

1.1.1.3/c --> 1.1.1.3/c/index_other.html 
1.1.1.4/d --> 1.1.1.4/d/landing.do

这是我的 apache 反向代理配置

<VirtualHost *:80>
    #ServerAdmin [email protected]
    #DocumentRoot /www/docs/dummy-host.example.com
    #ServerName dummy-host.example.com
    ErrorLog logs/arp_error_log
    CustomLog logs/arp_access_log common

    ProxyRequests Off

        <Location /a>
                ProxyPass http://1.1.1.1/a
                ProxyPassReverse http://1.1.1.1/a
        </Location>

        <Location /b>
                ProxyPass http://1.1.1.2/b
                ProxyPassReverse http://1.1.1.2/b  
        </Location>

        <Location /c>
                ProxyPass http://1.1.1.3/index_other.html
                ProxyPassReverse http://1.1.1.3/index_other.html
        </Location>

        <Location /d>
            ProxyPass http://1.1.1.4:8080
            ProxyPassReverse http://1.1.1.4:8080
         </Location>

</VirtualHost>

那么,我该如何解决这个问题?我一直在研究 mod_rewrite 和 mod_proxy_html ,但没有解决问题。

答案1

您可以为图像使用单独的位置容器。

我没有测试这个但或多或少应该是这样的。

对于 /c:

    <Location /c/images_v3>
            ProxyPass http://1.1.1.3/images_v3
            ProxyPassReverse http://1.1.1.3/images_v3
    </Location>

    <Location /c>
            ProxyPass http://1.1.1.3/index_other.html
            ProxyPassReverse http://1.1.1.3/index_other.html
    </Location>

对于 /d ,我不太清楚发生了什么,也许 1.1.1.4:8080 上有一个重定向,将所有内容重定向到 /landing.do ?在这种情况下,以下方法无济于事:

    <Location /d/images_v3>
        ProxyPass http://1.1.1.4:8080/images_v3
        ProxyPassReverse http://1.1.1.4:8080/images_v3
     </Location>

    <Location /d>
        ProxyPass http://1.1.1.4:8080
        ProxyPassReverse http://1.1.1.4:8080
     </Location>

相关内容