Proksi Terbalik dengan Penulisan Ulang URL v2 dan Perutean Permintaan Aplikasi
oleh Ruslan Yakushev
Panduan ini akan memandu Anda melalui cara menggunakan Modul Penulisan Ulang URL dan Perutean Permintaan Aplikasi (ARR) untuk mengimplementasikan server proksi terbalik untuk beberapa aplikasi back-end.
Prasyarat
Untuk menjalankan panduan ini, Anda harus memiliki hal berikut:
- IIS 7 atau lebih tinggi dengan layanan peran ASP.NET diaktifkan.
- Modul Penulisan Ulang URL terinstal (versi 2.0 diperlukan jika Anda ingin menyelesaikan bagian tentang penulisan ulang respons)
- Perutean Permintaan Aplikasi versi 1.0 atau versi 2.0 terinstal
Pengantar
Dengan menggunakan Modul Penulisan Ulang URL dan Perutean Permintaan Aplikasi, Anda dapat menerapkan konfigurasi penyeimbangan beban dan proksi terbalik yang kompleks dan fleksibel. Skenario proksi terbalik yang sangat umum adalah menyediakan beberapa aplikasi web internal melalui Internet. Server Web yang dapat diakses Internet digunakan sebagai server proksi terbalik yang menerima permintaan Web dan kemudian meneruskannya ke beberapa aplikasi intranet untuk diproses: Gambar berikut mengilustrasikan konfigurasi umum untuk skenario proksi terbalik:
Dengan asumsi bahwa server ARR memiliki nama http://contoso.com
domain , setiap aplikasi web dapat diakses dengan menggunakan URL ini:
http://contoso.com/webmail/
http://contoso.com/payroll/
Ketika permintaan dibuat untuk http://contoso.com/webmail/default.aspx
, ARR meneruskan permintaan ini ke server internal menggunakan URL http://webmail/default.aspx
. Demikian pula, permintaan untuk http://contoso.com/payroll/
diteruskan ke http://payroll/default.aspx
.
Selain itu, jika aplikasi internal menyisipkan tautan ke HTML responsnya yang ditautkan ke tempat lain dalam aplikasi tersebut, tautan tersebut harus dimodifikasi sebelum respons dikembalikan ke klien. Misalnya, halaman dari http://webmail/default.aspx
mungkin berisi tautan seperti ini:
<a href="/default.aspx?id=1">link</a>
Kemudian server ARR harus mengubah tautan ini menjadi berikut:
<a href="/webmail/default.aspx?id=1">link</a>
Membuat Contoh Situs Web
Untuk kesederhanaan, skenario proksi terbalik yang akan Anda kerjakan dalam panduan ini akan diterapkan pada satu server, dengan IIS "Situs Web Default" bertindak sebagai situs proksi terbalik dan aplikasi webmail dan penggajian yang dihosting di situs web IIS terpisah di server yang sama.
Untuk membuat contoh situs Web:
Buat dua folder yang disebut "webmail" dan "payroll" di folder berikut:
%SystemDrive%\inetpub\ folder.
Buat dua situs web IIS yang disebut "webmail" dan "payroll" yang menunjuk ke folder yang sesuai di bawah
%SystemDrive%\inetpub\
. Gunakan port IP yang berbeda untuk setiap situs.
Anda bisa menggunakan perintah berikut untuk membuat situs:%windir%\System32\inetsrv\appcmd.exe add site /name:"webmail" /bindings:http/*:8081: /physicalPath:"%SystemDrive%\inetpub\webmail" %windir%\System32\inetsrv\appcmd.exe add site /name:"payroll" /bindings:http/*:8082: /physicalPath:"%SystemDrive%\inetpub\payroll"
Buat file bernama default.aspx di folder berikut:
%SystemDrive%\inetpub\webmail
Salin markup ASP.NET berikut, tempelkan ke dalam file, dan simpan file:
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Reverse Proxy Test - WebMail Application</title> </head> <body> <h1>Reverse Proxy Test Page - WebMail Application</h1> <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %><p> <p><a href="<%= Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p> </body> </html>
Buat file bernama default.aspx di folder berikut:
%SystemDrive%\inetpub\payroll
Salin markup ASP.NET berikut, tempelkan ke dalam file, dan simpan file:
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Reverse Proxy Test - Payroll Application</title> </head> <body> <h1>Reverse Proxy Test Page - Payroll Application</h1> <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %><p> <p><a href="<%= Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p> </body> </html>
Untuk memastikan bahwa situs berfungsi dengan benar, buka penelusuran Web dan minta URL berikut:
http://localhost:8081/default.aspx
http://localhost:8082/default.aspx
Mengonfigurasi Aturan untuk Proksi Terbalik
Di bagian panduan ini, Anda akan mengonfigurasi fungsionalitas proksi terbalik untuk bekerja dengan contoh situs Web yang telah Anda buat.
Mengaktifkan fungsionalitas Proksi Terbalik
Fungsionalitas Proksi Terbalik dinonaktifkan secara default, jadi Anda harus mulai dengan mengaktifkannya.
- Buka Manajer IIS
- Pilih simpul server dalam tampilan pohon di sisi kiri lalu klik fitur "Perutean Permintaan Aplikasi":
- Centang kotak centang "Aktifkan Proksi". Biarkan nilai default untuk semua pengaturan lain di halaman ini:
Membuat aturan untuk aplikasi webmail
Anda akan membuat dua aturan penulisan ulang:
- Aturan penulisan ulang yang akan memproksi permintaan apa pun ke aplikasi
http://localhost:8081/
webmail selama jalur URL yang diminta dimulai dengan "webmail". - Aturan penulisan ulang yang akan mem-proksi permintaan apa pun ke aplikasi
http://localhost:8082/
penggajian selama jalur URL yang diminta dimulai dengan "penggajian".
Untuk menambahkan aturan penulisan ulang proksi terbalik:
Buka file web.config yang terletak di lokasi berikut:
%SystemDrive%\inetpub\wwwroot\
Di bawah elemen /configuration/system.webServer , tambahkan yang berikut ini lalu simpan file:
<rewrite> <rules> <rule name="Reverse Proxy to webmail" stopProcessing="true"> <match url="^webmail/(.*)" /> <action type="Rewrite" url="http://localhost:8081/{R:1}" /> </rule> <rule name="Reverse Proxy to payroll" stopProcessing="true"> <match url="^payroll/(.*)" /> <action type="Rewrite" url="http://localhost:8082/{R:1}" /> </rule> </rules> </rewrite>
Untuk informasi selengkapnya tentang membuat aturan penulisan ulang, lihat Membuat Aturan Penulisan Ulang untuk Modul Penulisan Ulang URL.
Menguji fungsionalitas proksi terbalik
Buka browser web dan buat permintaan ke http://localhost/webmail/default.aspx
. Anda akan melihat respons dari halaman pengujian webmail. Selain itu, buat permintaan ke http://localhost/payroll/default.aspx
. Anda akan melihat respons dari halaman uji penggajian.
Perhatikan bahwa dalam kedua kasus tautan di dalam respons menunjuk ke http://localhost/default.aspx
. Jika Anda mengklik tautan ini, itu akan menghasilkan respons 404 (File Tidak Ditemukan) dari server. Di bagian berikutnya Anda akan mempelajari cara membuat aturan keluar untuk memperbaiki tautan HTML respons yang dihasilkan oleh aplikasi.
Mengonfigurasi aturan untuk penulisan ulang respons
Bagian dokumentasi ini berlaku untuk Modul Penulisan Ulang URL Versi 2.0 untuk IIS 7.
Anda akan menentukan aturan keluar yang menggantikan semua tautan dalam HTML respons sebagai berikut:
<a href="/default.aspx">...</a>
akan diganti dengan:
<a href="/webmail/default.aspx">...</a>
(jika respons berasal dari aplikasi webmail)
dan
<a href="/payroll/default.aspx">...</a>
(jika respons berasal dari aplikasi penggajian)
Peringatan
Ketika header respons atau konten respons dimodifikasi oleh aturan penulisan ulang keluar, perhatian ekstra harus diambil untuk memastikan bahwa teks yang disisipkan ke dalam respons tidak berisi kode yang dapat dieksekusi sisi klien, yang dapat mengakibatkan kerentanan skrip lintas situs. Ini sangat penting ketika aturan penulisan ulang menggunakan data yang tidak tepercaya, seperti header HTTP atau string kueri, untuk menyusun string yang akan disisipkan ke dalam respons HTTP. Dalam kasus seperti itu, string pengganti harus dikodekan HTML dengan menggunakan fungsi HtmlEncode , misalnya:
<action type="Rewrite" value="{HtmlEncode:{HTTP_REFERER}}" />
Untuk membuat aturan, ikuti langkah-langkah berikut:
- Buka Manajer IIS
- Pilih "Situs Web Default"
- Di Tampilan Fitur klik "Penulisan Ulang URL"
- Di panel Tindakan di sisi kanan klik "Tambahkan Aturan...". Dalam dialog "Tambahkan Aturan" pilih "Aturan Kosong" di bawah kategori "Aturan Keluar" dan klik OK:
Sekarang Anda harus menentukan aturan keluar yang sebenarnya. Dalam Modul Penulisan Ulang URL 2.0, aturan penulisan ulang keluar ditentukan dengan menentukan informasi berikut:
- Nama aturan.
- Prasyarat opsional yang mengontrol apakah aturan ini harus diterapkan ke respons.
- Pola yang digunakan untuk mencocokkan string dalam respons.
- Serangkaian kondisi opsional.
- Tindakan yang harus dilakukan jika pola cocok dan semua pemeriksaan kondisi berhasil.
Penamaan aturan
Dalam kotak teks "Nama" masukkan nama yang akan mengidentifikasi aturan secara unik, misalnya: "Tambahkan awalan aplikasi".
Menentukan Prasyarat
Prasyarat digunakan untuk mengevaluasi apakah evaluasi aturan keluar harus dilakukan pada respons. Misalnya jika aturan yang memodifikasi konten HTML, hanya respons HTTP dengan header jenis konten yang diatur ke "teks/html" yang harus dievaluasi terhadap aturan ini. Evaluasi aturan keluar dan penulisan ulang konten adalah operasi intensif CPU yang dapat berdampak negatif pada performa aplikasi web. Oleh karena itu, gunakan prasyarat untuk mempersempit kasus saat aturan keluar diterapkan.
Karena aturan yang Anda buat harus diterapkan hanya pada respons HTML, Anda akan menentukan prasyarat yang memeriksa apakah jenis konten header respons HTTP setara dengan "teks/html".
Untuk menentukan prasyarat:
Di daftar Pra-kondisi, pilih "<Buat Pra-kondisi Baru...>".
Ini akan membawa Anda ke dialog Editor pra-kondisi, di mana Anda perlu menentukan prasyarat. Tentukan pengaturan prasyarat sebagai berikut:
Klik OK untuk menyimpan prasyarat dan kembali ke halaman "Edit Aturan".
Menentukan cakupan yang cocok
Aturan penulisan ulang keluar dapat beroperasi pada konten header HTTP atau pada konten isi respons. Aturan ini perlu mengganti tautan dalam konten respons sehingga dalam daftar drop-down "Cakupan Yang Cocok" pilih "Respons".
Menentukan filter tag
Filter tag digunakan untuk mencakup pola yang cocok dengan elemen HTML tertentu saja, alih-alih mengevaluasi seluruh respons terhadap pola aturan. Pencocokan pola adalah operasi yang sangat intensif CPU dan jika seluruh respons dievaluasi terhadap pola, itu dapat secara signifikan memperlambat waktu respons aplikasi Web. Filter tag memungkinkan Anda menentukan bahwa pencocokan pola harus diterapkan hanya dalam konten tag HTML tertentu, sehingga secara signifikan mengurangi jumlah data yang harus dievaluasi terhadap pola ekspresi reguler.
Untuk menentukan filter tag, perluas daftar drop-down "Cocokkan konten di dalam: " lalu pilih dan centang kotak "A (atribut href)".
Ini mengatur aturan untuk menerapkan pola hanya ke nilai atribut href hyperlink, seperti dalam contoh berikut:
<a href="this string will be used for pattern matching">Some link</a>
Menentukan pola
Dalam kotak teks "Pola" masukkan string berikut:
^/(.*)
String ini adalah ekspresi reguler yang menentukan bahwa pola akan cocok dengan string jalur URL apa pun yang dimulai dengan simbol "/".
Perhatikan penggunaan tanda kurung dalam pola. Tanda kurung ini membuat grup pengambilan, yang nantinya dapat direferensikan dalam aturan dengan menggunakan referensi balik.
Menentukan kondisi
Anda perlu mengubah tautan dalam HTML respons hanya jika respons berasal dari webmail atau aplikasi penggajian. Untuk memeriksa apakah Anda akan menggunakan kondisi yang menganalisis jalur URL yang diminta oleh klien. Anda juga akan menentukan pola kondisi yang mengambil folder aplikasi dari URL yang diminta, sehingga aturan tersebut dapat menggunakannya kembali saat menulis ulang tautan dalam respons.
- Perluas kotak grup kondisi.
- Klik "Tambahkan..." untuk memunculkan kotak dialog untuk menentukan kondisi.
- Untuk "Input kondisi:" masukkan string ini: "{URL}". Ini mengonfigurasi modul penulisan ulang URL untuk menggunakan jalur URL yang diminta oleh klien web.
- Dalam kotak kombo drop down pilih "Cocok dengan pola".
- Masukkan
^/(webmail|payroll)/.*
di kotak teks Pola . Ekspresi reguler ini digunakan untuk mencocokkan jalur URL yang dimulai dengan/webmail
atau/payroll
. Tanda kurung dalam pola mengambil bagian dari string URL yang cocok, sehingga dapat digunakan saat membuat URL pengganti. - Klik OK untuk menyimpan kondisi dan kembali ke UI "Tambahkan Aturan".
Menentukan tindakan
Pilih jenis tindakan "Tulis Ulang" yang tercantum dalam kotak grup "Tindakan". Dalam kotak teks "Nilai", masukkan string berikut:
/{C:1}/{R:1}
String ini menentukan nilai baru tempat alamat tautan harus ditulis ulang. {C:1} adalah referensi balik ke grup pengambilan pola kondisi dan akan diganti dengan string "webmail" atau "payroll". {R:1} adalah referensi balik ke grup pengambilan pola aturan dan dalam hal ini akan diganti dengan jalur URL asli yang digunakan dalam hyperlink.
Biarkan nilai default untuk semua pengaturan lainnya. Halaman properti "Edit Aturan Keluar" akan terlihat seperti di bawah ini:
Simpan aturan dengan mengklik tindakan "Terapkan" di sisi kanan.
Untuk memeriksa konfigurasi aturan yang baru saja kita buat, buka file web.config yang terletak di %SystemDrive%\inetput\wwwroot\
. Dalam file ini Anda akan melihat bagian <rewrite>
yang berisi definisi aturan ini:
<rewrite>
<rules>
<rule name="Reverse Proxy to webmail" stopProcessing="true">
<match url="^webmail/(.*)" />
<action type="Rewrite" url="http://localhost:8081/{R:1}" />
</rule>
<rule name="Reverse Proxy to payroll" stopProcessing="true">
<match url="^payroll/(.*)" />
<action type="Rewrite" url="http://localhost:8082/{R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="Add application prefix" preCondition="IsHTML">
<match filterByTags="A" pattern="^/(.*)" />
<conditions>
<add input="{URL}" pattern="^/(webmail|payroll)/.*" />
</conditions>
<action type="Rewrite" value="/{C:1}/{R:1}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
Menguji aturan
Untuk menguji bahwa aturan menulis ulang URL dengan benar dalam respons, buka browser Web dan buat permintaan ke http://localhost/webmail/default.aspx
atau http://localhost/payroll/default.aspx
. Anda akan melihat bahwa aturan penulisan ulang keluar telah mengubah tautan dalam respons HTML:
Ringkasan
Dalam panduan ini, Anda telah mempelajari cara mengonfigurasi Modul Penulisan Ulang URL dan Perutean Permintaan Aplikasi untuk menerapkan skenario proksi terbalik. Anda juga telah mempelajari cara menggunakan fitur penulisan ulang keluar baru dari Modul Penulisan Ulang URL 2.0 untuk memperbaiki tautan dalam respons aplikasi sebelum menyajikannya ke klien web.
Perhatikan bahwa saat menggunakan proksi terbalik, sering kali juga diperlukan untuk menulis ulang header respons HTTP. Untuk mempelajari cara menggunakan Modul Penulisan Ulang URL 2.0 untuk mengubah header HTTP respons, lihat Memodifikasi Header Respons HTTP.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk