Solusi 1:
Apache ProxyPassRewrite tidak menulis ulang badan respons yang diterima dari http://test.example.com, hanya header (seperti pengalihan ke halaman 404 dan semacamnya).
Sejumlah alternatif:
Satu ) Tulis ulang aplikasi internal untuk menggunakan jalur relatif, bukan absolut. yaitu ../css/style.css
bukannya /css/style.css
Dua ) Terapkan ulang aplikasi internal di subdirektori yang sama /folder
bukan di root test.example.com.
Tiga ) Satu dan dua seringkali tidak mungkin terjadi... Jika Anda beruntung, aplikasi internal hanya menggunakan dua atau tiga subdirektori dan itu tidak digunakan di situs utama Anda , cukup tulis banyak baris ProxyPass:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://test.example.com/
ProxyPassReverse /externalpath/ http://test.example.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://test.example.com/css/
ProxyPassReverse /css/ http://test.example.com/css/
ProxyPass /icons/ http://test.example.com/icons/
ProxyPassReverse /icons/ http://test.example.com/icons/
Empat ) Buat subdomain terpisah untuk aplikasi internal dan cukup balikkan proxy semuanya:
<VirtualHost *:80>
ServerName app.example.com/
# Expose Internal App to the internet.
ProxyPass / http://test.internal.example.com/
ProxyPassReverse / http://test.internal.example.com/
</VirtualHost>
Lima ) Terkadang pengembang sama sekali tidak tahu dan memiliki aplikasi mereka tidak hanya menghasilkan URL absolut tetapi bahkan menyertakan bagian nama host di URL mereka dan kode HTML yang dihasilkan terlihat seperti ini:<img src=http://test.example.com/icons/logo.png>
.
A ) Anda dapat menggunakan solusi combo dari split horizon DNS dan skenario 4. Baik pengguna internal maupun eksternal menggunakan test.example.com, tetapi DNS internal Anda mengarah langsung ke alamat ip server test.example.com. Untuk pengguna eksternal, catatan publik untuk test.example.com menunjuk ke alamat ip server web publik Anda www.example.com dan Anda kemudian dapat menggunakan solusi 4.
B ) Anda benar-benar bisa mendapatkan apache untuk tidak hanya meminta proxy ke test.example.com, tetapi juga menulis ulang isi respons sebelum dikirim ke pengguna Anda. (Biasanya proxy hanya menulis ulang header/respons HTTP). mod_substitute di apache 2.2. Saya belum menguji apakah cocok dengan mod_proxy, tapi mungkin yang berikut ini berfungsi:
<Location /folder/>
ProxyPass http://test.example.com/
ProxyPassReverse http://test.example.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|test.example.com/|www.example.com/folder/|i"
</Location>
Solusi 2:
Sebagai pelengkap jawaban HBruijn, jika Anda memilih solusi (3) "ProxyPass", Anda mungkin juga harus menggunakan mod_proxy_html untuk menulis ulang beberapa URL di halaman HTML Anda.
lih. Cara menangani url relatif dengan benar dengan proxy terbalik untuk beberapa contoh.
Sebagai contoh terapan, berikut adalah cara mengonfigurasi Apache menggunakan ProxyHTMLURLMap
aturan untuk meneruskan semuanya di nama-domain-anda.com/pad ke instans Etherpad Anda yang berjalan secara lokal di port 9001:
<Location /pad>
ProxyPass http://localhost:9001 retry=0
# retry=0 => avoid 503's when restarting etherpad-lite
ProxyPassReverse http://localhost:9001
SetOutputFilter proxy-html
ProxyHTMLURLMap http://localhost:9001
</Location>
RewriteRule ^/pad$ /pad/ [R]
Solusi 3:
Anda dapat menggunakan cara berikut untuk membuat proxy terbalik:
1. Pasang mod_proxy_html
yum install mod_proxy_html
-
Muat modul mod_proxy_html
LoadModule proxy_html_module modules/mod_proxy_html.so
-
Dan gunakan pengaturan berikut
ProxyRequests off ProxyPass /folder/ http://test.madeupurl.com ProxyHTMLURLMap http://test.madeupurl.com /folder <Location /folder/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /folder/ RequestHeader unset Accept-Encoding </Location>
Semoga bantuan ini.