GNU/Linux >> Belajar Linux >  >> Linux

Cara menangani url relatif dengan benar dengan proxy terbalik

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
  1. Muat modul mod_proxy_html

    LoadModule proxy_html_module modules/mod_proxy_html.so
    
  2. 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.


Linux
  1. Cara Mengatur Proksi Terbalik Nginx

  2. Cara menginstal Odoo 11 di CentOS 7 dengan Nginx sebagai Proxy Terbalik

  3. Cara Menginstal Flectra di CentOS 8 dengan Nginx sebagai Proxy Terbalik

  1. Cara Menginstal Odoo 14 di CentOS 8 dengan Nginx sebagai Reverse Proxy

  2. Cara Menginstal Odoo 11 di Ubuntu 16.04 dengan Nginx sebagai Proxy Terbalik

  3. Cara Menginstal Odoo 10 di Ubuntu 16.04 dengan Nginx sebagai Proxy Terbalik

  1. Cara Menginstal Odoo 10 di CentOS 7 dengan Nginx sebagai Proxy Terbalik

  2. Cara Menginstal Odoo 12 di Ubuntu 18.04 dengan Apache sebagai Proxy Terbalik

  3. Cara Menginstal Odoo 14 di Ubuntu 20.04 dengan Apache sebagai Proxy Terbalik