Podmiana w locie adresu witryny - czyli apache jako proxy

Problem:

Założeniem było zmigrowanie strony "witryna.pl" pod archiwalny adres "stara.witryna.pl", tak by strona pozostała widoczna jako archiwum dla nowej. Z racji braku dostępów by podmienić adres www strony, doszedłem do wniosku by stworzyć virtualhost, działający jako proxy na serwerze apache. 

Rozwiązanie:

Poniżej przedstawiam działający gist, dzięki któremy użytkownik wchodzący pod adres "stara.witryna.pl", wysyła zapytanie do serwera proxy, który przekazuje dalej dane do właściwego vhosta. Serwer ten w locie podmienia wszystkie wystąpienia "witryna.pl" oraz "/" z oryginalej strony na adres "stara.witryna.pl". Działa to w obie strony.

<VirtualHost *:443>

SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

ServerAlias stara.witryna.pl
ProxyPass "/" https://witryna.pl/
ProxyPassReverse "/" https://witryna.pl/

<Location />
AddOutputFilterByType SUBSTITUTE text/html #AddOutputFilterByType SUBSTITUTE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript application/json SetOutputFilter proxy-html
ProxyPassReverse /
Substitute 's|//witryna.pl/|https://stara.witryna.pl/|i'
Substitute 's|="/|="https://stara.witryna.pl/|i'

RequestHeader unset Accept-Encoding
</Location>

SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt

</VirtualHost>

Aby nasz serwer proxy, wiedział gdzie się znajduje nasza archiwalna strona, wymagane jest dodanie wpisu w hosts tak by korzystał z naszej starej strony a nie tej która ją zastąpiła.

/etc/hosts

127.0.0.1 witryna.pl

Kamil Mirończuk

I kiedy czegoś gorąco pragniesz, to cały wszechświat sprzyja potajemnie twojemu pragnieniu
~Paulo Coelho

Komentarze

Zostaw komentarz

Twój adres mailowy NIE zostanie opublikowany. W razie otrzymania zapytania, otrzymasz na niego odpowiedź.
Wymagane pola są oznaczone jako *