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
Create a configuration file for the app in
/etc/nginx/conf.d/
. Replaceexample.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 port3000
onlocalhost
, where the Node.js app is running.Disable or delete the default Welcome to NGINX page:
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
Test the configuration:
sudo nginx -t
If no errors are reported, reload the new configuration:
sudo nginx -s reload
In a browser, navigate to your Linode’s public IP address. You should see the “Hello World!” message displayed.
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#
Reverse Proxy
Fungsi Reverse Proxy
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.
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.
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
Open Proxy
- Anonymous Proxy
- Distorting Proxy
- Elite Proxy
Apache HTTP Server As Reverse-Proxy Using mod_proxy Extension
Apache Working As A Reverse-Proxy Using mod_proxy
- 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
#apt-get update && apt-get upgrade -y
Getting The Essential Build Tools
#apt-get install build-essential -y
Getting The Modules And Dependencies
#apt-get install libapache2-mod-proxy-html libxml2-dev
Configuring Apache To Proxy Connections
Mengaktifkan Modul
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
Mengubah Konfigurasi Default
000-default
di dalam /etc/apache2/sites-enabled
untuk mengatur fungsi “proxying”.nano /etc/apache2/sites-enabled/000-default
mod_virtualhost
dan mod_proxy
bersama-sama.<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>
Mengaktifkan SSL Reverse-Proxy Support
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>
Load-Balancing
<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
#service apache2 restart
#touch /etc/apache2/passwd/passwords
#htpasswd -c /etc/apache2/passwd/passwords admin
# However, configure ProxyPass argument to
# use “mycluster” to balance the load
ProxyVia On
ProxyRequests Off
RewriteEngine On
# Server 1, sesuaikan port yang tersedia
BalancerMember http://IP-SERVER-1:[PORT]/
BalancerMember http://IP-SERVER-2:[PORT]/
<Location /balancer-manager>
SetHandler balancer-manager
AuthName “Balancer Manager Authentication”
AuthUserFile “/etc/apache2/passwd/passwords”
# Anonymous *
Require valid-user
Order allow,deny
allow from all
<Location /server-status>
SetHandler server-status
allow from all
</Location>
ProxyPass /balancer-manager !
ProxyPass /mycluster balancer://mycluster/
ProxyPassReverse /mycluster/ balancer://mycluster/
http://SERVER-IP:[PORT]/server-status
http://SERVER-IP:[PORT]/mycluster
Tidak ada komentar:
Posting Komentar