Sunday, March 18, 2018

Nginx Reverse Proxy

Halo Sobat Nostra,
Kali ini saya akan berbagi tutorial bagaimana membuat nginx sebagai reverse proxy untuk apache web server dibelakangnya. K
ita dapat menggabungkan 2 webserver pada satu vps yang mana nantinya Nginx sebagai front end (sebagai web server statis) sedangkan Apache sebagai back end (pemroses).

Nginx adalah server HTTP dan reverse proxy gratis berbasis open-source berkemampuan tinggi. Perangkat lunak ini diciptakan oleh Igor Sysoev pada tahun 2002, dan dirilis untuk pertama kalinya secara umum pada tahun 2004. Nginx terkenal karena performanya yang tinggi, stabil, memiliki banyak fitur, mudah dikonfigurasi, dan menggunakan sedikit sumberdaya pada server.

Sebenarnya jenis proxy tersebut adalah Forward Proxy. Sebaliknya, ada jenis Proxy yang berjalan dari sisi lainnya yaitu sisi server, Web Server lebih tepatnya, dan inilah yang dimaksud dengan Reverse Proxy. 

Pada tutorial ini kita akan menggunakan os Centos 7.x. yang di dalamnya sudah terpasang apache/httpd.

Karena default repo pada mesin tidak ada paket nginx, maka perlu menambahkan EPEL.
yum update && yum install epel-release

Ubah konfigurasi apache/http sebelum menginstall nginx.
vim /etc/httpd/conf/httpd.conf

Ubah port 80  menjadi listen port 8080 dan 8081 untuk digunakan web 1 dan web 2 nantinya.
Listen 8080
Listen 8081

Lalu tambahkan rule dibawah ini pada file httpd.conf, letakkan paling bawah. Kita membuat virtual host untuk web 1 dengan port 8080 dan virtual host web2 dengan port 8081.
<VirtualHost *:8080>
    ServerName horas.tk
    ServerAlias web1.horas.tk
    DocumentRoot /var/www/html/web1/
    ErrorLog /var/www/html/web1/error.log
    CustomLog /var/www/html/web1/requests.log combined
</VirtualHost>

<VirtualHost *:8081>
    ServerName horas.tk
    ServerAlias web2.horas.tk
    DocumentRoot /var/www/html/web2/
    ErrorLog /var/www/html/web2/error.log
    CustomLog /var/www/html/web2/requests.log combined
</VirtualHost>

Jika sudah selesai save konfigurasi tersebut. Selanjutnya kita akan menginstall nginx.
yum install nginx

Kemudian edit file nginx.conf
vim /etc/nginx/nginx.conf

Beri tanda command seperti dibawah ini untuk menonaktifkan rule default konfigurasi nginx.

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
        #root         /usr/share/nginx/web;

#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;

#        location / {
#        }
#        error_page 404 /404.html;
#            location = /40x.html {
#        }

#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

Buat konfigurasi baru nginx

vim /etc/nginx/nginx.conf

Isi file tersebut dengan rule dibawah ini.
server {
    client_max_body_size 40M;
    listen 80;
    server_name web1.horas.tk;

        location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://web1.horas.tk:8080;
        proxy_redirect off;
        }
}

server {
    client_max_body_size 40M;
    listen 80;
    server_name web2.horas.tk;
location / {
 proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://web2.horas.tk:8081;
        proxy_redirect off;
        }
}

Restart kembali service httpd dan nginx


service httpd restart && service nginx restart

Untuk memastikannya port sudah listen dapat menggunakan perintah dibawah ini.
[root@node1 land]# netstat -ntlupa|grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30275/nginx: master
tcp        0      0 10.148.0.4:47668        169.254.169.254:80      ESTABLISHED 888/python
tcp        0      0 10.148.0.4:47654        169.254.169.254:80      ESTABLISHED 885/python
tcp        0      0 10.148.0.4:22           103.47.132.16:54780     ESTABLISHED 30690/sshd: land [p
tcp        0      0 10.148.0.4:47664        169.254.169.254:80      ESTABLISHED 889/python
tcp        0      0 10.148.0.4:47644        169.254.169.254:80      CLOSE_WAIT  888/python
tcp6      0      0 :::8080                 :::*                    LISTEN      30038/httpd
tcp6      0      0 :::8081                 :::*                    LISTEN      30038/httpd


Selanjutnya kita bisa mengecek via browser web1.horas.tk



Tampilan web2.horas.tk


Sekian tutorial dari saya, semoga bermanfaat :)

No comments:

Post a Comment