Setting Nginx Untuk Laravel 4 pada Ubuntu/OpenSuse

Karena sekarang banyak para programmer web yang lagi seneng main sama yang namanya framework, contoh yang sekarang populer adalah konsep MVC (Model, View, Controller). Contoh framework-framework yang sering digunakan oleh para programmer web adalah Yii, Zend, Laravel, CodeIgniter, dan lain-lain. Dan untuk sekarang ini yang lagi populer-populernya adalah CodeIgniter, karena framework ini disusun agar sangat mudah digunakan dan disusun oleh Phil Sturgeon. Dam karena kepopulernya si CodeIgniter ini, muncullah pesaing berat CodeIgniter, namanya Laravel yang disusun oleh Taylor Otwell dan untuk saat ini Laravel juga dikembangkan oleh Phil Sturgeon sang pencipta CodeIgniter ini. Untuk sejarah lebih jauh, silahkan buka www.google.com
Oke sekarang kita balik lagi ke topik semula tentang konfigurasi nginx pada Laravel. Secara default, Laravel menggunakan .htaccess untuk menyembunyikan nama index.php pada alamat URL browser kita. Bagi pengguna Apache, mungkin ini bukan masalah, karena file .htaccess itu akan dibaca oleh Apache, tetapi bagaimana dengan Nginx? Jawabannya ikutilah beberapa cara berikut ini:

Pada Ubuntu

  1. Sebelumnya dalam kasus ini, laravel saya terletak pada direktori /home/aim/workspaces. Jadi sesuaikanlah pengaturan ini pada settingan nginx anda (secara default, letak direktori kerja anda pada nginx adalah di /var/www). Karena pada pembahasan selanjutnya letak direktori kerja saya ada di /home/aim/workspaces, jadi mohon untuk menyesuaikan dengan direktori kerja anda, dan saya harap anda sudah paham dan mengerti akan peletakan direktori kerja ini.
  2. Buka terminal dan jalankanlah perintah ini:
    $ sudo cp /etc/nginx/sites-available/default /home/yourusername/workspaces/conf/nginx-vhosts.conf
  3. Lalu setelah itu saatnya merubah settingan nginxnya:
    $ sudo vim /home/yourusername/workspaces/conf/nginx-vhosts.conf

    Lalu isilah dengan konfigurasi nginx seperti ini. Ingat jangan asal copy paste, tapi sesuaikanlah letak projek laravel anda. Untuk lebih jelasnya bacalah keterangan komentar pada settingan nginx dibawah ini:

    server {
        # Port yang ingin digunakan untuk web server
        listen    80;

        # Nama virtual host (sesuaikan dengan kebutuhan)
        server_name    imron02.com;

        # Setting log (sesuaikan letak direktorinya).
        access_log    /home/yourusername/workspaces/log/logs.access.log;
        error_log    /home/yourusername/workspaces/log/logs.error.log;
        rewrite_log    on;

        # Lokasi projek laravelnya (sesuaikan letak direktorinya)
        root     /home/aim/workspaces/paten-social/public;

        # Setting halaman index dan menyembunyikan index.php pada url browser.
        index    index.php index.html;

        location / {
            try_files    $uri $uri/ /index.php?$query_string;
        }
      
        if (!-d $request_filename) {
            rewrite    ^/(.+)/$ /$1 permanent;
        }
      
        # Konfigurasi PHP FPM
        location ~* \.php$ {
            fastcgi_pass    unix:/var/run/php5-fpm.sock;
            fastcgi_index    index.php;
            fastcgi_split_path_info    ^(.+\.php)(.*)$;
            include    /etc/nginx/fastcgi_params;
            fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        # Nginx tidak membutuhkan file .ht (misal seperti .htaccess)
        location ~ /\.ht {
            deny all;
        }
    }
  4. Lalu sekarang saatnya menambahkan alamat host (Virtual Host) pada Linux Ubuntunya:
    $ sudo vim /etc/hosts

    Lalu tambahkanlah nama host seperti pada konfigurasi nginx di atas. Misalnya di atas saya menggunakan nama host imron02.com.

    127.0.0.1    localhost
    127.0.1.1    imron02.com

    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

  5. Lalu terkhir ketikkan perintah berikut ini:
    $ sudo ln -s /home/yourusername/workspaces/conf/nginx-vhosts.conf /etc/nginx/sites-available/nginx-vhost.conf

    Dan setelah itu silahkan restart Ubuntunya dan lalu setelah restart buka alamat imron02.com. Pasti laravelnya langsung work.
    Catatan Bagi yang tidak work di Ubuntunya (menggunakan google chrome), coba di clear dulu google chromenya.

  6. Lalu sekarang bukalah browser anda dan kettikan alamat imron02.com, dan apabila anda mengikuti langkah ini dengan benar, maka hasilnya akan terlihat seperti ini. Karena secara default, alamat imron02.com sudah di set langsung untuk membuka halaman public pada projek laravelnya, contoh settingan saya letak projek laravelnya seperti berikut ini root /home/aim/workspaces/paten-social/public;
    Dan berikut ini adalah hasil output dari browsernya:

Tambahan:
Dan berikut ini adalah contoh settingan nginx lainnya dari sumber http://obviousrobot.com.
Jadi apabila ingin memakai settingan nginx ini cukup ketikkan perintah berikut ini:

$ sudo vim /home/yourusername/workspaces/conf/nginx-vhosts.conf

Lalu isi konfigurasinya dengan ini:

##################################
##          PHP-FPM             ##
##################################
upstream myphp {
    # We use the upstream directive, give it a name, then
    # pass all PHP requests to this socket.
    server unix:/var/run/php5-fpm.sock;
}

##################################
##        Imron Rosdiana        ##
##################################
server {

    # To add a new site, just copy this server directive then
    # find and replace "testsite" with the new project name
    # and replace "scottydelicious" with your username.

    # This is is the equivalent of Apache's ServerName.
    # There is no ServerAlias alternative, just add more domain
    # names separated by space. For example:
    # server_name example.com www.example.com example2.com;
    server_name imron02.com;

    # This sets the web root.
    root /home/yourusername/workspaces/paten-social/public;

    # Tell Nginx where to record logs. These will be owned by root.
    access_log /home/yourusername/workspaces/log/logs.access.log;
    error_log  /home/yourusername/workspaces/log/logs.error.log;

    # List folders if no index file is present:
    # This is a terrible idea in production, but can be useful
    # in development.
    autoindex on;

    # Which files should be used as indexes. Ordered in preference,
    # e.g. look for index.php first, then index.html, then stop looking.
    index index.php index.html;

    location / {
        # Pretty URLs. Allows removal of "index.php" from the URL.
        # Useful for frameworks like Laravel or WordPress.
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Turn off logging for favicon and robots.txt
    location = /robots.txt      { access_log off; log_not_found off; }
    location = /favicon.ico    { access_log off; log_not_found off; } 

    # serve static files directly
    location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
        access_log off;
        expires max;
    }

    # Removes trailing slashes (prevents SEO duplicate content issues)
    if (!-d $request_filename)
    {
        rewrite ^/(.+)/$ /$1 permanent;
    }

    # Removes trailing "index" from all controllers.
    # Useful for frameworks like Laravel.
    if ($request_uri ~* index/?$)
    {
        rewrite ^/(.*)/index/?$ /$1 permanent;
    }

    # Unless the request is for a valid file (image, js, css, etc.),
    # send it to index.php
    if (!-e $request_filename)
    {
        rewrite ^/(.*)$ /index.php?/$1 last;
        break;
    }

    # Uncomment this to run all 404 errors to index.php
    #error_page 404 /index.php;

    # Handle requests for files with the .php extension.
    location ~ \.php$ {
    # Pass php requests to the upstream server we created above
    fastcgi_pass myphp;
    fastcgi_index index.php;
    include fastcgi_params;
    }
}

Pada OpenSuse

Setelah membuat settingan untuk Ubuntu, maka sekarang adalah settingan untuk OpenSuse, pada OpenSuse terdapat perbedaan tersendiri saat mensetting nginx ini. Sebelumnya pastikan anda telah membaca tutorial sebelumnya untuk instalasi web server pada OpenSuse ini http://imron02.blogspot.com/search/label/OpenSuse. Nah jadi hampir sama dengan ubuntu, saya membuat konfigurasi tersendiri untuk laravel ini yaitu pada /home/yourusername/workspaces/conf/nginx-vhosts.conf. Dan berikut ini adalah langkah-langkahnya:

  1. $ su
    # vim /home/yourusername/workspaces/conf/nginx-vhosts.conf
  2. Lalu rubah isinya menjadi seperti ini:
    server {

    # Port that the web server will listen on.
    listen 80;

    # Host that will serve this project.
    server_name imron02.com;

    # Useful logs for debug.
    access_log /home/aim/workspaces/log/logs.access.log;
    error_log /home/aim/workspaces/log/logs.error.log;
    rewrite_log on;

    # The location of our projects public directory.
    root /home/aim/workspaces/xinix/saw_project/public;

    # Point index to the Laravel front controller.
    index index.php;

    location / {

    # URLs to attempt, including pretty ones.
    try_files $uri $uri/ /index.php?$query_string;

    }

    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
    rewrite ^/(.+)/$ /$1 permanent;
    }

    # PHP FPM configuration.
    location ~* \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # We don't need .ht files with nginx.
    location ~ /\.ht {
    deny all;
    }

    # Set header expirations on per-project basis
    location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff)$ {
    expires 365d;

    }
    }
  3. Setelah itu jangan lupa untuk di save dan rubah juga host dari opensuse ini:
    # vim /etc/hosts

    Lalu tambahkan imron02.com seperti berikut ini:

    #
    # hosts This file describes a number of hostname-to-address
    # mappings for the TCP/IP subsystem. It is mostly
    # used at boot time, when no name servers are running.
    # On small systems, this file can be used instead of a
    # “named” name server.
    # Syntax:
    #
    # IP-Address Full-Qualified-Hostname Short-Hostname
    #

    127.0.0.1 localhost
    127.0.1.1 imron02.com

    # special IPv6 addresses
    ::1 localhost ipv6-localhost ipv6-loopback

    fe00::0 ipv6-localnet

    ff00::0 ipv6-mcastprefix
    ff02::1 ipv6-allnodes
    ff02::2 ipv6-allrouters
    ff02::3 ipv6-allhosts

  4. Dan sekarang terkahir restart nginxnya dan pasti hasilnya akan sama seperti settingan pada Ubuntu di atas
    # systemctl restart nginx.service

Quotation:
Sehebat-hebatnya kamu, sekaya-kayanya kamu, sepintar-pintarnya kamu. Tapi klo g bahagia buat pa?
Bukankah tujuan makhluk hidup adalah mencapai kebahagiaan dunia & akhirat..

Dan ingat, kamu akan merasa bahagia apabila orang yang kamu sayangi juga bisa bahagia bersama kamu. So kalau kamuu bahagia sendirian, buat apa???

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s