Yii Framework. Configure Nginx for Yii

June 12, 2016 10 Jack White

Setting Example Yii + Nginx + PHP-FPM.

Open the Nginx configuration file for the site and paste the following:

server {
    set $host_path "/var/www/devreadwrite.com";
    access_log  /var/www/devreadwrite.com/log/access.log  main;
    server_name  devreadwrite.com www.devreadwrite.com;
    root   $host_path/htdocs;
    set $yii_bootstrap "index.php";
    # define charset
    charset utf-8;
    location / {
        index  index.html $yii_bootstrap;
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }
    # deny access to protected directories
    location ~ ^/(protected|framework|themes/w+/views) {
        deny  all;
    }
    #avoid processing of calls to unexisting static files by yii
    location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
        try_files $uri =404;
    }
    # prevent nginx from serving dotfiles (.htaccess, .svn, .git, etc.)
    location ~ /. {
        deny all;
        access_log off;
        log_not_found off;
    }
    # php-fpm configuration using socket
    location ~ .php {
        fastcgi_split_path_info  ^(.+.php)(.*)$;
        #yii catches the calls to unexising PHP files
        set $fsn /$yii_bootstrap;
        if (-f $document_root$fastcgi_script_name){
            set $fsn $fastcgi_script_name;
        }
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;
        #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
        ## Tweak fastcgi buffers, just in case.
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 4k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
}

Do not forget to change the path and the domain on real data of your website.