Kumpulan Resep Nginx

From wiki.ngadimin.org

Jump to: navigation, search

Contents


CGI di nginx, solusi sederhana

Nginx memang di desain untuk highload server. Dan cgi tidak cocok dengan lingkungan tersebut, jika Anda menjalankan cgi di apache, cgi adalah bottle neck pertama, bahkan sebelum apache Anda terasa lambat. Jadi jangan berharap fitur cgi akan ada di nginx.

Jadi kalau mau menjalankan cgi di nginx bagaimana? Gunakan saja http server yang cukup ringan seperti thttpd.

http://ngadimin.org/2009/02/07/menjalankan-cgi-di-nginx-minta-bantuan-thttpd-saja/

Default Virtual Host

server {
       server_name  _;
       root         html;
}

Geo IP dan Distributed Server

Anda memiliki banyak jaringan yang lokasinya berjauhan. Anda ingin user mengakses server terdekat dengan jaringan mereka. User Bekasi ketika mengakses server utama, akan diredirect ke server bekasi.domain.com, dan user Tangerang akan diarahkan ke tangerang.domain.com.

http {
     geo $geo {
          default      default;
          1.1.1.0/24   bekasi;
          1.1.2.0/24   tangerang;
          1.1.3.0/24   tangerang;
          ...
     }

     server {
          location / {
               rewrite ^(.*)$ http://$geo.domain.com$1 permanent;
          }
     ...
     }
...
}

Hotlink Protection

location ~ \.(jpg|png|gif)$ {
    valid_referers server_names blocked none frienddomain.com *.frienddomain.com ;
    if ($invalid_referer) {
        return 403;
    }
}


Geo IP dan Load Balancer

Anda punya banyak backend server, dan ingin di balance berdasarkan lokasi pengaksesnya. Jadi user dari Bekasi akan diarahkan ke cluster server bekasi, untuk user dari Tangerang akan diarahkan ke cluster server tangerang.

http {
     geo $geo {
          default      default;
          1.1.1.0/24   bekasi;
          1.1.2.0/24   tangerang;
          1.1.3.0/24   tangerang;
          ...
     }
 
     upstream  bekasi.server {
          ....
     }
 
     upstream  tangerang.server {
          ....
     }
 
     upstream  default.server {
          ....
     }
 
     server {
          location / {
               proxy_pass  http://$geo.server;
          }
          ...
     }
     ...
}

Maintenance Page

Yeah we are triggering a maintenance page via the existance of a file. Here is how it looks in the config file.

# Rewrite all the requests to the maintenance.html page if it exists.
if (-f $document_root/system/maintenance.html) {
     return 503;
}

error_page 503 @503;
location @503 {
     rewrite  ^(.*)$  /system/maintenance.html break;
}

This means that if $document_root/system/maintenance.html exists, then only serve that file and nothing else for every request.

Rewrite, gak usah pake www

server {
    server_name  ngadimin.org www.ngadimin.org;

    if ($host !~ ^ngadimin\.org$) {
        rewrite ^.+ http://ngadimin.org$uri permanent;
        break;
    }
}
Personal tools