Habis coba test kecil-kecilan benchmark Apache dengan Nginx, ketahuan kalo diakses dengan jumlah konkurensi yang gede (lupa berapa spesifiknya), Nginx masih kuat merespon daripada Apache. Apache cenderung mereset koneksi jika udah kebanyakan request. Ini juga gak tau, emang bener gak settingan apache-nya… hehehe….
OK… Sekarang coba install Nginx. Sebenarnya udah dicoba sama temanku bagian sysnet, tapi waktu itu belum berani dimasukkan ke live, karena ada beberapa feature yang takutnya tidak didukung penuh oleh Nginx. Setelah dipikir2, sepertinya sih gak ada. Soalnya webserver dalam hal ini gak begitu banyak berperan di aplikasi WordpressMU, yang berperan banyak dari sisi PHP-nya. Cuman yang perlu diperhatikan itu fasilitas rewrite. Apache dengan Nginx punya cara penanganan yang berbeda dalam setting konfigurasi, maka dari itu penulis coba-coba belajar cara setting di Nginx.
Setelah tiga hari utak-atik rewrite di Nginx, akhirnya ketemu juga logika cara mainnya
. Bingung sih baca manualnya di website Nginx, gak begitu jelas. Akhirnya coba-coba sendiri deh. Ada sih konfigurasi dapat dari googling, tapi masih ada masalah.
Nih hasil utak-atik konfigurasinya….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| worker_processes 32;
daemon off;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
multi_accept on;
epoll_events 512;
accept_mutex_delay 10ms;
}
http {
include /opt/nginx/conf/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;
tcp_nodelay on;
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
server_name blog.com *.blog.com;
access_log /var/log/nginx/access.fifo main;
error_log /var/log/nginx/error.fifo info;
client_max_body_size 20M;
#-------- uploaded file -------------
location ~ /files/ {
root /data/wpmu;
rewrite ^.*/files/(.*) /wp-content/blogs.php?file=$1 break; # get upload file
fastcgi_pass 127.0.0.1:8888;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wpmu/$fastcgi_script_name;
include /opt/nginx/conf/fastcgi_params;
}
location ~* (/wp-content/avatars|/wp-content/cache/supercache/.+.html) {
root /data/wpmu;
expires 1h;
break;
}
location ~* ^.+.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf)$ {
root /data/wpmu;
expires 30d;
break;
}
location / {
root /data/wpmu;
index index.php index.html index.htm;
#------- cache it, but do not supercache --------------
set $exist 0;
set $match 2;
if (-e $request_filename) {
set $exist 1;
}
# custom scripts, apart from wordpressmu
if ($uri ~ "^.*/(blogdir.php|blogstardir.php|blogcat.php|result.php|blognew.php).*$") {
set $match 1;
}
if ($match = $exist) {
break;
}
#------- supercache --------------
set $olduri $uri;
set $nosc 0;
rewrite ^ /wp-content/cache/supercache/$http_host/$uri/index.html;
if ($query_string ~ ".*s=.*") {
set $nosc 1;
}
if ($http_cookie ~ "^.*(comment_author_|wordpressuser|wp-postpass_).*$" ) {
set $nosc 1;
}
if (!-e $request_filename) {
set $nosc 1;
}
if ($nosc = 0) {
rewrite ^(.*) $1 last;
}
#------------------------------------
rewrite ^ $olduri;
if (-d $request_filename) {
rewrite ^(.*[^/])$ $1/ permanent;
}
if (!-e $request_filename) {
#permalink
rewrite ^ /index.php break;
}
break;
fastcgi_pass 127.0.0.1:8888;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wpmu/$fastcgi_script_name;
include /opt/nginx/conf/fastcgi_params;
}
}
} |
Di rewrite module ada rule “if”. Rule ini gak bisa di nested
. Jadi masukin alurnya jadi bingung, sedikit akal-akalan. Intinya dalam rewrite itu, selama gak ada rule “break” atau “last ” diakhir line dalam satu directive location, maka pencarian akan dilanjutkan ke rule rewrite yang lain (masih dalam satu directive location). Jika sudah gak ketemu yang match, baru dilanjutkan di directive location lain. Variabel $uri akan berubah-ubah sesuai dengan hasil rule rewrite yang match. Sedangkan $request_uri merupakan original $uri ditambah dengan argumen.
Jika ada rule “last”, maka rewrite akan berhenti mencari rule rewrite selanjutnya di directive location-nya dia, dan mencari di directive location lain sampai ketemu match. Jika ingin benar-benar berhenti dan tidak akan melanjutkan mencari di directive location lain, maka pakai rule “break”.
Buat Wordpress MU sendiri, yang bikin pusing ini rule buat supercache. Tapi akhirnya berhasil, walaupun banyak akal-akalannya (liat sendiri aja). Ehmmm… belum cek keseluruhan… jadi 90% lah keberhasilannya ….hehehehe……..
Jika ada yang tahu cara efisiennya, kasih tau ya….
Updated: Ternyata yang lama masih kacau konfigurasinya… ketauan baru diproduction… hihihi.. sial
admin Server