Senin, 16 November 2020

REVERSE PROXY- lengkap

 

Reverse Proxy & Load Balancing

Configure NGINX

At this point, you could configure Node.js to serve the example app on your Linode’s public IP address, which would expose the app to the internet. Instead, this section configures NGINX to forward all requests from the public IP address to the server already listening on localhost.

Basic Configuration for an NGINX Reverse Proxy

  1. Create a configuration file for the app in /etc/nginx/conf.d/. Replace example.com in this example with your app’s domain or public IP address:

    File: /etc/nginx/conf.d/nodeapp.conf
    server {
      listen 80;
      listen [::]:80;
    
      server_name example.com;
    
      location / {
          proxy_pass http://localhost:3000/;
      }
    }

    The proxy_pass directive is what makes this configuration a reverse proxy. It specifies that all requests which match the location block (in this case the root / path) should be forwarded to port 3000 on localhost, where the Node.js app is running.

  2. Disable or delete the default Welcome to NGINX page:

    sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
    
  3. Test the configuration:

    sudo nginx -t
    
  4. If no errors are reported, reload the new configuration:

    sudo nginx -s reload
    
  5. In a browser, navigate to your Linode’s public IP address. You should see the “Hello World!” message displayed.

-----------------------------------------------------------------------------------------------
root@ubuntu:/etc/nginx/sites-enabled# cat staging-yomproxy-api.yogya.com.conf    
server {
   listen 8080;
   server_name staging-yomproxy-api.yogya.com;
   location / {
       proxy_set_header   X-Real-IP $remote_addr;
       proxy_set_header   Host      $http_host;
       proxy_pass         http://127.0.0.1:40003;
   }
}

root@ubuntu:/etc/nginx/sites-enabled# 
------------------------------------------------------------------------------------------------------
Proxy server adalah server yang berfungsi sebagai perantara antara PC client dan server. Penggunaan proxy server ini biasanya bertujuan untuk meningkatkan keamanan server atau sebagai cache untuk meringankan kinerja server.

Reverse Proxy

Reverse Proxy adalah salah satu jenis proxy server yang berfungsi sebagai perantara antara client dengan satu atau lebih web server:

Fungsi Reverse Proxy

Beberapa fungsi utama dari reverse proxy adalah:
1. Load balancing
Reverse proxy ditempatkan di bagian depan web server dan bertugas mendistribusikan semua permintaan / request dari client ke tiap web server yang ada di group tersebut. Dengan cara seperti ini akan dicapai kinerja server yang optimal dengan mendapatkan kecepatan yang paling baik serta untuk memastikan server tidak akan pernah down. Jika dalam group tersebut ada salah satu web server yang overload, maka proxy server akan meredirect traffik yang masuk ke webserver tersebut menuju ke webserver lainnya.
2. Web acceleration
Reverse proxy mampu mengkompress inbound dan outbound data, sebaik cache tools. Dan hal ini akan menambah kecepatan baik dalam hal request content maupun dalam masalah trafik antara client dan web server. Selain itu reverse proxy juga bisa menangani tugas lain seperti enkripsi SSL tanpa memberikan beban tambahan pada web server sehingga kecepatan bisa tetap terjaga.
3. Security dan Anonimity
Reverse proxy akan menjadikan web server Anda lebih aman karena internet hanya bisa mendeteksi atau mengenal IP reverse proxy Anda dan tidak bisa menjangkau web server secara langsung.
Forwad Proxy
Sebuah Forward Proxy adalah sebuah server proxy yang akan meneruskan permintaan klien ke server untuk membangun komunikasi. Klien akan memilih sumber daya yang diinginkan kemudian forward proxy menyambungkan ke server target.

Open Proxy
Open Proxy adalah sejenis forward proxy yang terbuka untuk semua pengguna internet. Open proxy ini sering di gunakan untuk pengguna internet untuk menyembunykan alamat IP mereka. Sehingga mereka tetap anonim selama aktivitas web mereka. Beberapa contoh open proxy
  • Anonymous Proxy
Anonymous proxy adalah jenis proxy terbuka yang menyembunyikan alamat IP pengguna internet sehingga server target tidak bisa mengidentifikasi asal klien meminta. Namun, proxy anonim mengidentifikasi dirinya sebagai server proxy, tetapi masih berhasil mempertahankan anonimitas pengguna.
  • Distorting Proxy
jenis server proxy ini mengenalkan dirinya sebagai proxy namun proxy ini mengungkapkan alamat ip proxy yang palsu dari klien ke server target
  • Elite Proxy
Elite Proxy dapat memberikan anonimitas yang maksimal karena tidak mengindentifikasi dirinya sebagai proxy atau mengungkapkan alamat IP sebenarnya dari klien. Biasanya pengguna harus membayar untuk jenis proxy karena karang tersedia secara bebas di internet.

Apache HTTP Server As Reverse-Proxy Using mod_proxy Extension

Apache adalah server HTTP telah teruji dan dilengkapi dengan akses ke ekstensi yang sangat luas. Meskipun mungkin tidak memilih untuk menjalankan reverse proxy, administrator sistem yang sudah bergantung pada Apache dengan set fitur yang tersedia dapat menggunakannya sebagai pintu gerbang (gateway) ke server aplikasi. 

Apache Working As A Reverse-Proxy Using mod_proxy

mod proxy adalah modul Apache untuk mengalihkan koneksi (e.g. a gateway, passing them through). Hal ini dimungkinkan untuk digunakan seperti modul dan konfigurasi lainnya yang cukup mendasar (atau standar), sesuai dengan yang lain. mod proxy bukan hanya satu modul tapi juga koleksi, masing-masing membawa satu set fungsionalitas baru.
Beberapa modul ini adalah:
  • mod_proxy: Modul utama proxy untuk Apache yang mengelola koneksi dan pengalihan (redirect).
  • mod_proxy_http: Modul ini mengimplementasikan fitur proxy untuk protokol HTTP dan HTTPS.
  • mod_proxy_ftp: Modul ini melakukan hal yang sama namun untuk protokol FTP.
  • mod_proxy_connect: Modul ini digunakan untuk SSL tunneling.
  • mod_proxy_ajp: Digunakan untuk bekerja dengan protokol AJP.
  • mod_proxy_wstunnel: Digunakan untuk bekerja dengan web socket (yaitu WS dan WSS).
  • mod_proxy_balancer: Digunakan untuk clustering dan load-balancing.
  • mod_cache: Digunakan untuk caching.
  • mod_header: Digunakan untuk mengelola header HTTP.
  • mod_deflate: Digunakan untuk kompresi.

Installing Apache And mod_proxy

Updating The Operating-System
#apt-get update && apt-get upgrade -y

Getting The Essential Build Tools

Untuk mendapatkan paket penting untuk membangun aplikasi, diperlukan paket build-essential. Paket ini berisi alat yang diperlukan untuk menginstal beberapa hal dari sumber .
#apt-get install build-essential -y

Getting The Modules And Dependencies

Jalankan perintah berikut untuk mendapatkan modul dan dependencies.
#apt-get install libapache2-mod-proxy-html libxml2-dev

 

Configuring Apache To Proxy Connections

Mengaktifkan Modul

Sebelum mengkonfigurasi Apache, aktifkan modul yang diperlukan untuk keperluan selanjutnya. Verifikasi apakah semua modul terpasang dengan benar dan siap untuk diaktifkan.
Jalankan perintah berikut untuk mendapatkan daftar modul Apache yang tersedia:
#a2enmod<TAB><TAB>
Pada kondisi ini kita dapat melihat daftar modul yang tersedia untuk diaktifkan. Atau sebagai alternatif, Anda dapat menjalankan perintah berikut untuk mengaktifkan modul satu per satu:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
Catatan: Beberapa modul cenderung diaktifkan secara default. Perintah dapat dilakukan 2 kali hanya untuk memastikan bahwa modul telah aktif.

Mengubah Konfigurasi Default

Pada langkah ini, kita akan melihat bagaimana memodifikasi file konfigurasi default 000-default di dalam /etc/apache2/sites-enabled untuk mengatur fungsi “proxying”.
Jalankan perintah berikut untuk mengedit host virtual Apache default menggunakan editor teks nano:
nano /etc/apache2/sites-enabled/000-default
Di sini, kita akan mendefinisikan host virtual proxy menggunakan mod_virtualhost dan mod_proxy bersama-sama.
Copy-paste blok konfigurasi di bawah ini, ubah sesuai kebutuhan Anda:
<VirtualHost [IP-SERVER]:[PORT]>
    ProxyPreserveHost On
    ServerName localhost
    # Servers to proxy the connection, or;
    # List of application servers:
    # Usage:
    # Sesuaikan IP dan port yang tersedia
    # ProxyPass / http://[IP Addr.]:[port]/
    # ProxyPassReverse / http://[IP Addr.]:[port]/
    # Example: 
    ProxyPass / http://IP-REMOTE:[PORT]/
    ProxyPassReverse / http://IP-REMOTE:[PORT]/
    
</VirtualHost>
#service restart apache2
Catatan: Untuk mempelajari lebih lanjut tentang konfigurasi virtual host, Anda dapat melihat manual Apache terperinci mengenai masalah ini.

Mengaktifkan SSL Reverse-Proxy Support

Jika Anda berurusan dengan koneksi dan sertifikat SSL, Anda juga perlu mengaktifkan virtual host sekunder dengan pengaturan di bawah ini.
Ulangi langkah-langkah dari langkah sebelumnya namun gunakan opsi konfigurasi berikut:
Listen 443
NameVirtualHost IP-SERVER:443
<VirtualHost IP-SERVER:443>
ProxyPreserveHost On
    ProxyVia On
    ProxyRequests Off
    RewriteEngine On 
    SSLEngine On

    # Set the path to SSL certificate
    # Usage: SSLCertificateFile /path/to/cert.pem    
    SSLCertificateFile /etc/apache2/ssl/apache.pem
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

    # Servers to proxy the connection, or;
    # List of application servers:
    # Usage:
    # ProxyPass / http://[IP Addr.]:[port]/
    # ProxyPassReverse / http://[IP Addr.]:[port]/
    # Example: 
    ProxyPass / http://IP-REMOTE:[PORT]/
    ProxyPassReverse / http://IP-REMOTE:[PORT]/

    # Or, balance the load:
    # ProxyPass / balancer://balancer_cluster_name

</VirtualHost>
Restart apache

Load-Balancing

Dalam komputasi , load balancing meningkatkan distribusi beban kerja melalui beberapa sumber daya komputasi, seperti komputer, cluster komputer , koneksi jaringan , unit pemrosesan pusat , atau disk drive. Load balancing bertujuan untuk mengoptimalkan penggunaan sumber daya, memaksimalkan throughput , meminimalkan waktu respon, dan menghindari kelebihan sumber daya tunggal. Menggunakan beberapa komponen dengan load balancing, membentuk satu komponen dapat meningkatkan kehandalan dan ketersediaan melalui redundansi (High Availability).
Load balancing berbeda dari bonding link dalam load balancing yang membagi lalu lintas antar antarmuka jaringan pada soket jaringan ( model OSI layer 4), sedangkan bonding link menyiratkan pembagian lalu lintas antar antarmuka fisik pada tingkat yang lebih rendah, baik per paket ( model OSI Layer 3) atau pada data link ( model OSI Layer 2) dengan protokol seperti shortest path bridging.
Load balancing biasanya melibatkan perangkat lunak atau perangkat keras khusus, seperti switch multilayer atau proses server Domain Name System
Jika Anda memiliki beberapa server back-end, cara yang baik untuk mendistribusikan koneksi mereka melalui proxy adalah menggunakan fitur load balancing Apache.
Edit setting virtual-host seperti langkah sebelumnya, tapi kali ini menggunakan contoh konfigurasi di bawah ini:
<VirtualHost SERVER-IP:[PORT]>
    # Apply VH settings as desired
    # However, configure ProxyPass argument to
    # use "mycluster" to balance the load
    ProxyPreserveHost On
    ProxyVia On
    ProxyRequests Off
    RewriteEngine On 

    <Proxy balancer://mycluster>
    # Define back-end servers:

    # Server 1, sesuaikan port yang tersedia
    BalancerMember http://IP-SERVER-1:[PORT]/

    # Server 2, sesuaikan port yang tersedia
    BalancerMember http://IP-SERVER-2:[PORT]/
    </Proxy>
    ProxyPass /mycluster balancer://mycluster/
    ProxyPassReverse /mycluster/ balancer://mycluster/
</VirtualHost>

Restart Apache

Setelah Anda menyelesaikan konfigurasi, Anda perlu me-restart server agar perubahan mulai berlaku.
Jalankan perintah berikut untuk me-restart Apache:
#service apache2 restart
Sekarang anda dapat mengunjungi VPS dan Apache akan melakukan koneksi reverse proxy ke server aplikasi back-end.
Monitoring load balancing dan status server
Siapkan user (misalnya admin) dan password untuk balancer-manager dengan perintah:
#mkdir -p /etc/apache2/passwd
#touch /etc/apache2/passwd/passwords
#htpasswd -c /etc/apache2/passwd/passwords admin
Untuk memonitoring kinerja server dan statusnya, telah tersedia aplikasi built-in dalam apache yaitu balancer-manager dan server-status. Konfigurasinya adalah sebagai berikut:
<VirtualHost SERVER-IP:[PORT]>
# Apply VH settings as desired
# However, configure ProxyPass argument to
# use “mycluster” to balance the load
ProxyPreserveHost On
ProxyVia On
ProxyRequests Off
RewriteEngine On
<Proxy balancer://mycluster>
# Define back-end servers:
# Server 1, sesuaikan port yang tersedia
BalancerMember http://IP-SERVER-1:[PORT]/
# Server 2, sesuaikan port yang tersedia
BalancerMember http://IP-SERVER-2:[PORT]/
</Proxy>
#Balancer manager monitoring
<Location /balancer-manager>

SetHandler balancer-manager
AuthType basic
AuthName “Balancer Manager Authentication”
AuthUserFile “/etc/apache2/passwd/passwords”
# Anonymous *
Require valid-user
Order allow,deny

allow from all
</Location>
#Server status monitoring
<Location /server-status>
         SetHandler server-status
        Order allow,deny
        allow from all
</Location>
ProxyPass /server-status !
ProxyPass /balancer-manager !
ProxyPass /mycluster balancer://mycluster/
ProxyPassReverse /mycluster/ balancer://mycluster/
</VirtualHost>
Restart apache
Testing load balancing
http://SERVER-IP:[PORT]/balancer-manager
http://SERVER-IP:[PORT]/server-status
http://SERVER-IP:[PORT]/mycluster
Selamat berkreasi !!!

Tidak ada komentar:

Posting Komentar