
Ich habe einen Fehler mit meinem Apache-Reverse-Proxy. Derzeit verwende ich einen Reverse-Proxy für 4 Websites.
- 1.1.1.1/a
- 1.1.1.2/b
- 1.1.1.3/c
- 1.1.1.4/d
Ich habe kein Problem mit dem Reverse-Proxy zu den Websites A und B. Das Bild ist gut und es gibt kein Problem.
Bei den Websites C und D werden die Bilder jedoch nicht geladen. Hier sind die Protokolle in meinem Zugriffsprotokoll.
- - [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
Der Zugriff vom Apache-Reverse-Proxy-Server selbst ist problemlos. Beim Zugriff von außerhalb tritt das Problem auf.
Ich habe versucht, die URL direkt auf einem anderen Computer einzugeben, und das Bild wurde geladen.
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"
Wie Sie sehen, funktioniert der Link im ersten. Der im zweiten nicht.
Wenn ich die Webseite normal anfordere, wird der zweite Link angefordert und es tritt ein 404-Fehler auf, da der Pfad nicht gefunden werden kann.
Wenn ich direkt den ersten Link eingebe, wird das Bild gefunden.
Mir fällt auf, dass die Websites c und d beim Eingeben des Links umgeleitet werden. Und das ist die Ursache des Problems.
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
Hier ist meine Apache Reverse Proxy-Konfiguration
<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>
Also, wie löse ich das? Ich habe mod_rewrite und mod_proxy_html untersucht, aber kein Glück bei der Lösung des Problems.
Antwort1
Sie können separate Standortcontainer für die Bilder verwenden.
Ich teste das nicht, aber das sollte es mehr oder weniger sein.
Für /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>
Bei /d bin ich mir nicht ganz sicher, was da los ist, vielleicht gibt es eine Umleitung auf 1.1.1.4:8080, die alles auf /landing.do umleitet? In diesem Fall würde folgendes nicht helfen:
<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>