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:

  1. IIS 7 atau lebih tinggi dengan layanan peran ASP.NET diaktifkan.
  2. Modul Penulisan Ulang URL terinstal (versi 2.0 diperlukan jika Anda ingin menyelesaikan bagian tentang penulisan ulang respons)
  3. 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:

Diagram konfigurasi umum untuk skenario proksi terbalik.

Dengan asumsi bahwa server ARR memiliki nama http://contoso.comdomain , 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:

  1. Buat dua folder yang disebut "webmail" dan "payroll" di folder berikut:

    %SystemDrive%\inetpub\ folder.
    
  2. 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"
    
  3. Buat file bernama default.aspx di folder berikut:

    %SystemDrive%\inetpub\webmail
    
  4. 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>
    
  5. Buat file bernama default.aspx di folder berikut:

    %SystemDrive%\inetpub\payroll
    
  6. 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>
    
  7. 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.

  1. Buka Manajer IIS
  2. Pilih simpul server dalam tampilan pohon di sisi kiri lalu klik fitur "Perutean Permintaan Aplikasi":
    Cuplikan layar Manajer I I S. Ikon yang berbeda ditampilkan. Ikon Perutean Permintaan Aplikasi disorot.
  3. Centang kotak centang "Aktifkan Proksi". Biarkan nilai default untuk semua pengaturan lain di halaman ini:
    Cuplikan layar halaman Perutean Permintaan Aplikasi. Aktifkan proksi disorot dan dipilih.

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:

  1. Buka file web.config yang terletak di lokasi berikut:

    %SystemDrive%\inetpub\wwwroot\
    
  2. 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.

Cuplikan layar Aplikasi Email Web Halaman Uji Proksi Terbalik. Di bagian bawah U R L h t t p garis miring titik dua host lokal garis miring default titik s p x disorot.

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:

  1. Buka Manajer IIS
  2. Pilih "Situs Web Default"
  3. Di Tampilan Fitur klik "Penulisan Ulang URL"
    Cuplikan layar Manajer I I S. Panel Koneksi memperlihatkan pohon navigasi yang diperluas. Situs Web Default disorot. Di panel Beranda Situs Web Default, ikon Penulisan Ulang U R L dipilih.
  4. Di panel Tindakan di sisi kanan klik "Tambahkan Aturan...". Dalam dialog "Tambahkan Aturan" pilih "Aturan Kosong" di bawah kategori "Aturan Keluar" dan klik OK:
    Cuplikan layar dialog Tambahkan aturan. Aturan Kosong di bawah kategori Aturan Keluar dipilih. Tambahkan Aturan di panel Tindakan disorot.

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:

  1. Di daftar Pra-kondisi, pilih "<Buat Pra-kondisi Baru...>".

  2. Ini akan membawa Anda ke dialog Editor pra-kondisi, di mana Anda perlu menentukan prasyarat. Tentukan pengaturan prasyarat sebagai berikut:

    • Nama: "IsHTML"

    • Menggunakan: "Ekspresi Reguler"

    • Klik "Tambahkan" untuk memunculkan dialog "Tambahkan kondisi". Dalam dialog ini tentukan:

      • Input kondisi: "{RESPONSE_CONTENT_TYPE}"

      • Periksa apakah string input: "Cocok dengan pola"

      • Pola: "^text/html"

        Cuplikan layar kotak dialog Tambahkan Pra-kondisi. JENIS KONTEN RESPONS ditulis di kolom Input. Cocok dengan pola yang ditulis di kolom Jenis. Garis miring teks h t m l ditulis di kolom Pola.

  3. 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.

  1. Perluas kotak grup kondisi.
  2. Klik "Tambahkan..." untuk memunculkan kotak dialog untuk menentukan kondisi.
  3. Untuk "Input kondisi:" masukkan string ini: "{URL}". Ini mengonfigurasi modul penulisan ulang URL untuk menggunakan jalur URL yang diminta oleh klien web.
  4. Dalam kotak kombo drop down pilih "Cocok dengan pola".
  5. 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.
  6. 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:

Cuplikan layar halaman properti Edit Aturan Keluar. Kategori Kecocokan, Kondisi, dan Tindakan ditampilkan.

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:

Cuplikan layar Aplikasi Email Web Halaman Uji Proksi Terbalik. Tautan di bagian bawah adalah h t t p garis miring garis miring host lokal garis miring email web garis miring default titik s p x.

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.