Konfigurasi Index, Error_Page, Return, Rewrite, Try_files Redirect Pada Nginx


Konfigurasi Redirect Nginx - Salah satu yang membuat nginx sangat flexible adalah option yang disediakan nginx untuk melakukan redirect request uri. Di pembahasan kali ini www.dimasrio.com akan menjelaskan berberapa fitur nginx yang memungkinkan kita untuk melakukan redirect.

Baca Juga :
Konfigurasi Location Block Nginx
Install Nginx Source di CentOS 7
Disini kita akan melanjutkan konfigurasi yang sebelumnya, bagi sobat ada yang belum membaca artikel sebelumnya silahkan buka pada link di atas.

Index

Index merupakan adalah cara yang paling mudah untuk menentukan file index. Dengan index, file yang yg kita definisikan akan menjadi sebuah index.

Contoh :
location /home {
      index dimzrio.html;
      root /opt/nginx/html;
}
Lalu buat file dimzrio.html di dalam direktory /opt/nginx/html/home. Lalu access dengan url https://dimzrio.com/home maka secara otomatis dimzrio.html akan menjadi file index location /home.

Error_page

Error page ini adalah salah satu cara untuk handling http error. Sehingga kita bisa membuat redirect pada semua http error ke halaman tertentu.

Contoh :
error_page 404 /404.html;
location = /404.html {
       root /opt/nginx/html;
}
Lalu buat file 404.html di dalam direktory /opt/nginx/html. Jika request uri tidak ditemukan maka akan di redirect ke halaman 404.hml.


Return

Untuk melakukan redirect dengan menggunakan return, kita perlu memahami http respond code. HTTP Redirect akan mengembalikan response code 301 ( Permanent Redirect ) dan 302 ( Temporary Redirect).

Contoh :
location ~*/img/(.*)$ {
           return 301 $scheme://$host/images/$1";
}
Lalu letakan file gambar (sebagai contoh saya menggunakan file nginx.png) pada direktory /opt/nginx/html/images. Selanjutnya akses dengan https://dimzrio.com/img/nginx.png maka akan di redirect ke https://dimzrio.com/images/nginx.png.

Rewrite

Jika kita menggunakan rewrite untuk membuat melakukan redirect, kita dapat melakukannya di luar location block. 

Contoh:
rewrite ^/logo/(.*)$ $scheme://$host/images/$1 permanent;
Perintah di atas output hampir sama dengan return. JIka user mengakses https://dimzrio.com/logo/nginx.png maka akan di redirect ke https://dimzsrio.com/images/nginx.png.

Try_files

Jika kita sering menggunakan cms atau framework, sudah seharusnya kita mempelajari try_files redirect. Biasanya try_files digunakan untuk request uri yang dinamik karena dapat melakukan pencocokan requests.

Contoh:
location /data {
       root /opt/nginx/html;
       try_files $uri $uri/ $uri.txt $uri.html =404;
}
Lalu buatlah file bernama info.txt dan example.html pada direktory /opt/nginx/html/data. Kemudian access dengan menggunakan url berikut:

  • https://dimzrio.com/data/info 
  • https://dimzrio.com/data/example
Dari request uri diatas, maka try_files akan mengembalikan respond sesuai file yang tersedia pada /home. Akan tetapi jika request uri tidak cocok maka akan mengembalikan error code 404.

Sebagai tambahan saya akan memberikan contoh bagaimana melakukan redirect http ke https dan non-www ke www.

HTTP ke HTTPS
if ($scheme = http) {
        return 301 https://$server_name$request_uri;
}
Non-WWW to WWW
if ($host = "dimzrio.com" ) {
        return 301 https://www.$host$request_uri;
}

Bagaimana sobat? Banyak sekali bukan cara untuk melakukan redirect pada nginx? Semoga tutorial konfigurasi redirect nginx bermanfaat bagi kita semua dan selamat mencoba..!!!!

Konfigurasi Location Block Nginx


Konfigurasi Location Block Nginx - Pada artikel sebelumnya www.dimasrio.com sudah membahas tentang konfigurasi gzip nginx di centos 7. Block konfigurasi pada nginx terdiri dari server block dan location block. Server block digunakan untuk mendefine sebuah virtual server, sedangkan location block digunakan untuk mendefinisikan bagaimana sebuah request uri di proses. 

Nginx Location Block

Location block nginx terdiri dari berberapa option regular expression (regex) yang akan menentukan bagaimana location block tersebut akan di proses.
  • (none) : Jika kita tidak mendefinisikan options pada location block, maka nginx akan membaca awalan yang cocok dengan uri.
  • = : Option ini jika digunakan untuk membaca uri secara exact, jadi uri dan location harus benar-benar sama, jika request uri tidak sama satu huruf pun dengan location block maka request tidak akan di proses.
  • ~ : Digunakan agar location di baca sebagai regular expression case sensitive.
  • ~* : Digunakan agar location di baca sebagai regular expression case insensitive.
  • ˆ~ : Hampir sama dengan standard location block, pengecekan berdasarkan awalan dari uri dan akan dibaca lebih dahulu dibandingkan regex.
Setelah kita mengetahui berberapa option untuk menetukan location block, kali ini kita akan mencoba menerapkan location block pada pembahasan sebelumnya. Bagi sobat yang belum membaca tutorial sebelumnya bisa mengikuti link di bawah ini.
Install Nginx Source di CentOS 7
Konfigurasi OpenSSL Nginx di CentOS 7
Masih dengan file conf yang sebelumnya, berikut contoh regular expression pada block location.
nano /opt/nginx/conf/vhosts/dimzrio-com.conf

None Block

location /files {
      return 200 "This is an example non block";
}
Block di atas akan membaca uri yang berawalan dengan kata /files.
Contoh :
  • https://dimzrio.com/files
  • https://dimzrio.com/filesxxx

Case Sensitive

location ~ /files[0-9] {
       return 200 "This is an example case sensitive";
}
Block di atas akan membaca uri case sensitive dengan awalan /files dan di akhiri dengan angka 0 - 9.
Contoh :
  • https://dimzrio.com/files01
  • https://dimzrio.com/files123345

Case Insensitive

location ~* /files[0-9] {
        return 200 "This is an example case insensitive";
}
Block di atas akan membaca uri dengan awalan /files case insensitive dan di akhiri dengan angka 0-9
Contoh :
  • https://dimzrio.com/Files123
  • https://dimzrio.com/FILES9

Preferential

location ^~ /filesinfo {
        return 200 "This is an example standard block, but more important than regex";
}
Contoh :
  • https://dimzrio.com/filesinfo
  • https://dimzrio.com/filesinfoxxx

Block di atas akan membaca uri yang berawalan /filesinfo, meski pada bagian non block juga cocok akan tetapi preferential block akan di baca lebih dahulu di bandingkan block regex lainnya meski secara fungsinya juga sama dengan non block.

Exact Match

location = 50x.html {
       root /opt/nginx/html;
}
Block di atas hanya akan membaca request uri 50x.html pada directory root.
Contoh :
  • https://dimzrio.com/50x,html

Output :


Demikian tutorial nginx saya kali ini mengenai konfigurasi location block pada nginx. Semoga bermanfaat bagi kita semua dan selamat mencoba..!!!!

Konfigurasi Gzip Nginx


Konfigurasi Gzip Nginx - Salah satu cara untuk menurunkan size transfer data antara web server dan client side yaitu dengan menyediakan fitur compresi pada web server. Nginx secara default sudah menyediakan module gzip sebagai add-ons, sehingga kita hanya perlu mengaktifkannya.  Dengan mengaktifkan module gzip pada nginx, dapat menurunkan ukuran size pada file yang di load, sehingga proses transfer data menjadi lebih cepat.

Baca Juga :
Install nginx source di centos 7
Konfigurasi openssl nginx di centos 7 

Setelah kita mengaktifkan mod_ssl pada nginx, di kesempatan kali ini www.dimasrio.com akan menjelaskan bagaimana cara konfigurasi gzip nginx di centos7.

Konfigurasi Gzip Nginx

Masih melanjutkan konfigurasi sebelumnya, pada contoh kali saya akan menyediakan sebuah file css dengan ukuran lebih dari 100kb.
mkdir /opt/nginx/html/assets
cd /opt/nginx/html/assets
wget https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css
Tambahkan configurasi untuk mengaktifkan gzip pada dimzrio-com.conf.
nano /opt/nginx/conf/vhosts/dimzrio-com.conf
Content:
server {
listen 80;
listen 443 ssl http2;
access_log /var/log/nginx/dimzrio-access.log main;
error_log /var/log/nginx/dimzrio-error.log;
server_name dimzrio.com;

# SSL Config #
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /opt/nginx/ssl/nginx.crt;
ssl_certificate_key /opt/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_session_cache shared:TLS:10m;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
ssl_prefer_server_ciphers on;

gzip on;

gzip_disable "msie6";

gzip_proxied any;
gzip_comp_level 7;
gzip_min_length 100;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

location / {
index index.html;
root /opt/nginx/html;
}

location ˜*\.(css|map|js|json|xml)$ {
root /opt/nginx/html/assets;
}
}
Perintah gzip di atas sebagai berikut.

  • gzip_disable msie6 : Digunakan untuk menonaktifkan gzip pada internet explorer version 6.
  • gzip_proxied any : Digunakan untuk menerima semuga request dari traffic yg menggunakan semua jenis proxy. 
  • gzip_comp_level : Level compresi (1 sampai 9), nilai 7 dapat menurunkan kurang lebih 70% size.
  • gzip_min_length : Batas minimum yang digunakan untuk bypass gzip. Jika file kurang dari 100kb maka akan di abaikan.
  • gzip_types : Jenis file yang akan di compress.
Selanjutnya tambahkan $gzip_ratio pada format log agar file yang dilakukan compress terlihat pada log.
nano /opt/nginx/conf/nginx.conf
Content:
user nginx;
worker_processes 1;

events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

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

sendfile on;
tcp_nopush on;
keepalive_timeout 65;

include vhosts/*.conf;
}
Reload nginx.
/opt/nginx/sbin/nginx -s reload
Setelah service nginx di reload, lakukan uji coba pada browser dengan mode inspect dengan mengakses url berikut.
https://dimzrio.com/assets/bootstrap.min.css
Output:





Dari output di atas, gzip sudah berfungsi dengan baik di nginx. Terlihat size dari file bootstrap.min.css yang semula berukuran 141kb di load menjadi 20.1kb.

Demikian tutorial nginx kali ini mengenai konfigurasi gzip nginx di centos 7. Semoga bermanfaat bagi kita semua dan selamat mencoba.!!!

Konfigurasi OpenSSL Nginx di CentOS7


Konfigurasi OpenSSL Nginx di CentOS7 - HTTPS sudah menjadi standard security pada world wide web (www). HTTPS menggunakan transport layer SSL (Socker Secure Layer) atau TLS (Transport Layer Security) dengan melakukan enkripsi data antara web server dengan browser.

Baca Juga:
Install Nginx Source di CentOS7
Konfigurasi WebDav Nginx di CentOS7 

Masih melanjutkan artikel yang sebelumnya, Kali ini www.dimasrio.com akan membahas bagimana mengaktifkan module ssl pada nginx

Enable SSL di Nginx

Disini kita akan install openssl via source.
wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz
Extract archive dan compile source openssl.
tar -zxvf openssl-10.2n.tar.gz
cd openssl-10.2n
./config --prefix=/opt/openssl
make
make install
Buat ssl cert dan key ssl, sebagai contoh saya akan membuat ssl untuk domain dimzrio.com.
mkdir /opt/nginx/ssl
/opt/openssl/bin/openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /opt/nginx/ssl/nginx.key -out /opt/nginx/ssl/nginx.crt
Output:
-----
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:DKI Jakarta
Locality Name (eg, city) []:Cipinang
Organization Name (eg, company) [Internet Widgits Pty Ltd]:dimzrio tutorials
Organizational Unit Name (eg, section) []:dimzrio
Common Name (e.g. server FQDN or YOUR name) []:dimzrio.com
Email Address []:nginx@dimzrio.com
Selanjutnya recompile nginx dengan mengaktifkan module ssl.
./configure --prefix=/opt/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --with-threads --with-file-aio --with-http_sub_module --with-http_geoip_module --with-http_dav_module --with-stream --with-http_v2_module --with-stream_ssl_module --with-http_ssl_module --with-openssl=/root/source/openssl-1.0.2n

make
make install
Setelah module ssl terinstall.
/opt/nginx/sbin/nginx -V
Output:
...
built with OpenSSL 1.0.2n 7 Dec 2017
TLS SNI support enabled
...

Setting SSL pada Nginx

Setup nginx.conf seperti di bawah ini.
nano /opt/nginx/conf/nginx.conf
Content:
user nginx;
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

sendfile on;
tcp_nopush on;
keepalive_timeout 65;

include vhosts/*.conf;
}
Buat vhosts untuk dimzrio.com.
mkdir /opt/nginx/conf/vhosts
nano /opt/nginx/conf/vhosts/dimzrio-com.conf
Content:
server {
listen 80;
listen 443 ssl http2;
access_log /var/log/nginx/dimzrio-access.log main;
error_log /var/log/nginx/dimzrio-error.log;
server_name dimzrio.com;

# SSL Config #
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /opt/nginx/ssl/nginx.crt;
ssl_certificate_key /opt/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_session_cache shared:TLS:10m;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
ssl_prefer_server_ciphers on;

location / {
index index.html;
root /opt/nginx/html;
}
}
Jalankan service nginx.
/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
Selanjutnya test dengan browser https://dimzrio.com.
Jika sudah dapat di akses, maka ssl sudah aktif.

Demikian tutorial nginx mengenai enable ssl di nginx dengan openssl. Semoga bermanfaat bagi kita semua dan selamat mencoba..!!!

Install Nginx Source di CentOS 7


Install nginx Source di CentOS 7 - Nginx merupakan sebuah HTTP Server berbasis Open Source yang sangat power full. Di indonesia sudah banyak perusahaan besar yang memanfaatkan nginx sebagai Frontend atau Backend pada environtment production mereka. Pada berberapa artikel kedepan www.dimasrio.com akan mencoba mengulas seputar nginx karena fiturnya yang menarik. Di artikel kali ini saya akan mulai dengan cara setup web services menggunakan nginx source di centos 7.

Baca Juga:
Setup High Availability Web Services Menggunakan Docker HAProxy
Install Nginx PHP-FPM Docker Compose  

Install Nginx Source di CentOS 7

Sebelum sobat melakukan installasi pada mesin centos anda, sobat perlu menginstall berberapa packages depedencies untuk mendukung proses compile source.
yum install gc gcc gcc-c++ pcre-devel zlib-devel make wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools gperftools-devel libatomic_ops-devel perl-ExtUtils-Embed
Buat user untuk nginx.
adduser nginx 
Selanjutnya download dan extract source, pada contoh kali ini saya akan menggunakan versi nginx v1.12.2 stable.
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
Compile nginx dengan berberapa module yang dibutuhkan. Nginx secara default sudah menyertakan berberapa module yang akan terinstall akan tetapi ada juga berberapa module yang secara default tidak terinstall. Jadi jika sobat ada kebutuhkan pada module tertentu pastikan menyertakan argument pada saat configure source.
./configure --prefix=/opt/nginx  --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --with-threads --with-file-aio --with-http_sub_module --with-http_geoip_module --with-http_dav_module  --with-stream --with-http_v2_module
Pada proses di atas, saya mengaktifkan berberapa module yaitu threads, file-aio, http_sub_module, geoip, webdav, stream, dan httpv2.

Selanjutnya install dengan perintah berikut.
make
make install
Secara default nginx akan berada pada direktory /opt/ karena pada proses configure kita menyertakan prefix dimana kita akan menginstall nginx.

Start service nginx dengan perintah berikut.
/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
Stop service nginx.
/opt/nginx/sbin/nginx -s stop
Demikian tutorial nginx singkat kali ini mengenai install nginx source di centos 7. Semoga bermanfaat bagi kita semua dan selamat mencoba.!!!

Youtube

Bisnis Online