Apa gunanya ProxyPassReverse Directive

8

Definisi dari apache.org mengatakan:

Arahan ini memungkinkan Apache httpd menyesuaikan URL di header Lokasi, Konten-Lokasi, dan URI pada respons pengalihan HTTP. Ini penting ketika Apache httpd digunakan sebagai proxy terbalik (atau gateway) untuk menghindari melewati proxy terbalik karena pengalihan HTTP pada server backend yang tetap berada di belakang proxy terbalik.

Hanya tajuk respons HTTP yang disebutkan di atas yang akan ditulis ulang. Apache httpd tidak akan menulis ulang tajuk respons lain, juga tidak akan secara default menulis ulang referensi URL di dalam halaman HTML. Ini berarti bahwa jika konten yang diproksi berisi referensi URL absolut, mereka akan memotong proxy. Untuk menulis ulang konten HTML agar sesuai dengan proxy, Anda harus memuat dan mengaktifkan mod_proxy_html.

path adalah nama jalur virtual lokal; url adalah sebagian URL untuk server jarak jauh. Parameter ini digunakan dengan cara yang sama seperti untuk direktif ProxyPass.

Dapatkah seseorang tolong jelaskan padaku cara kerjanya. Secara umum apa yang dilakukan arahan ini?

SnowmanOnFire
sumber

Jawaban:

8

Jika server benar-benar menangani permintaan melakukan pengalihan ke URL yang berbeda di server itu, ProxyPassReversearahan menulis ulang URL dalam hal server proxy terbalik. Misalnya, seperti yang tercantum dalam dokumentasi Apache , jika:

 http://reverseproxy.com/mirror/foo/bar

dikirim (proksi terbalik) ke

 http://backend.example.com/bar

untuk penanganan, tetapi di server backend ditentukan bahwa URL yang benar seharusnya quux, yaitu bahwa permintaan harus diarahkan ke

 http://backend.example.com/quux

yang ProxyPassReversedirektif penulisan ulang URL (pada reverse proxy) ke

 http://reverseproxy.com/mirror/foo/quux

sebelum meneruskan tanggapan pengalihan HTTP ke klien. Dengan cara ini klien hanya tahu tentang server proxy terbalik, tetapi tetap dapat membuat permintaan yang diperlukan ke URL yang benar http://reverseproxy.com/mirror/foo/quuxyang kemudian akan diproksikan ke server backend dan ditangani seperti biasa. Singkatnya, ini hanya memungkinkan proxy terbalik untuk mengembalikan header URI yang benar pada respons pengalihan HTTP.

Kuda jantan muda
sumber
Tidak jelas apa does a redirectartinya sebenarnya. Apakah itu merespons dengan respons pengalihan HTTP (301/302)?
Chris Stryczynski
Ini akan merespons dengan beberapa kode 3xx, karena "[t] he 3xx (Redirection) kode status menunjukkan bahwa tindakan lebih lanjut perlu diambil oleh agen pengguna untuk memenuhi permintaan." Lihat RFC 7231 membahas pengalihan . The ProxyPassReversedirektif hanya memastikan bahwa respon 3xx HTTP termasuk URI yang benar dalam hal server proxy reverse.
Colt
0

Dari panduan proxy 2.4 Reverse Apache :

Untuk memastikan itu dan Lokasi: header yang dihasilkan dari backend dimodifikasi untuk menunjuk ke proxy terbalik, alih-alih kembali ke dirinya sendiri, arahan ProxyPassReverse paling sering diperlukan:

ProxyPass "/" " http://www.example.com/ "

ProxyPassReverse "/" " http://www.example.com/ "

Jika Anda memiliki Klien dan 2 server, Proxy dan Asal, tempat Asal melakukan pekerjaan yang sebenarnya (menghasilkan respons) dan Proxy hanya proksi permintaan ke Asal, arsitektur server yang baik adalah saat

  1. Asal tidak tahu tentang Proksi
  2. dan setiap permintaan melalui Proxy.

Jika Origin tidak tahu tentang Proxy, mungkin terjadi bahwa Origin mengembalikan Klien HTTP Redirect (HTTP 301 atau 302) melalui Proxy, yang menunjuk langsung ke dirinya sendiri, Origin. Dan itu merupakan masalah karena browser akan langsung menghubungi Asal di babak berikutnya, yang akan melanggar poin 2.

Ketika respons pengalihan HTTP kembali ke Proxy menuju Klien, Proxy dapat / harus memodifikasi Pengalihan tersebut sehingga Lokasi masih menunjuk ke Proxy. Dengan cara ini aplikasi mandiri yang berjalan di Origin yang tidak mengetahui Proxy dapat menghasilkan URL pengalihan apa pun selama Proxy dikonfigurasi dengan baik.

karatedog
sumber