Recently, because of a mandatory VPS move I had an opportunity to migrate all my sites from apache to nginx. My old box was in a messy state and setting up a new box from scratch was always going to be fun. Here in this post, I will walk you through all the steps that helped me migrate seamlessly. Specially, how did I setup the new box ensuring zero downtime on the sites.
Ensuring zero downtime while migration:
By the time I will pin up various pieces on my new vps box, I didn’t want my site visitors to see an under-maintenance page. To ensure zero downtime, I usually follow these steps:
- Setup the new vps with nginx, php-fastcgi, etc as described later in the post
- To verify the setup on new vps, edit the local host file depending upon your operating system
/private/etc/hosts (mac) /etc/hosts (ubuntu) C:WindowsSystem32driversetchosts (windows)
Go ahead and add the following host entry:
99.198.122.216 abhinavsingh.com
where, 99.198.122.216 is my new vps ip address and abhinavsingh.com is a vhost configured to handle by nginx on my new vps
- Now, whenever I visit http://abhinavsingh.com in my browser, my local machine will point it to my new vps box. However, all other visitors will still be served by apache on old vps.
- After verifying the setup, I simply remove previously added host setting on my local box and update the DNS settings for my site at godaddy.
To start with, just add up the required host setting on your local system.
Installing Nginx and configuring vhosts:
Follow these steps to install nginx webserver:
- Update and upgrade apt-get and install nginx
sudo apt-get update sudo apt-get upgrade sudo apt-get install nginx
- Configure vhost for nginx by creating a file
/etc/nginx/sites-available/mysite.com
as follows:server { listen 80; server_name mysite.com; access_log /var/log/nginx/mysite.access.log; root /var/www/mysite; index index.php index.html index.htm; location / { } }
- Enable vhost by creating a symlink as follows:
cd /etc/nginx/sites-enabled ln -s /etc/nginx/sites-available/mysite.com mysite.com sudo /etc/init.d/nginx restart
- Assuming you have configured your local host file correctly, try visiting http://mysite.com and your browser will take it to the new vps
Setting up php-fastcgi and xcache:
Here are the steps to configure php-fastcgi and how to ensure php-fastcgi is up and running even after system reboot. We will also configure xcache for better performance.
- sudo apt-get install php5-cgi php5-cli php5-xcache
- Download php-fastcgi default config and place it at
/etc/default/php-fastcgi
- Download php-fastcgi init.d script and place it at
/etc/init.d/php-fastcgi
- Add php-fastcgi init.d as startup script
update-rc.d -f php-fastcgi defaults
- Update following fields inside
/etc/php5/conf.d/xcache.ini
:xcache.admin.user = "admin" xcache.admin.pass = "pass" xcache.size = 128M xcache.count = 4
xcache.count should ideally be equal to
cat /proc/cpuinfo |grep -c processor
- Setup xcache admin interface:
cd /var/www ln -s /usr/share/xcache/admin xcache
- Update
/etc/php5/cgi/php.ini
as per your requirements and start php-fastcgi processsudo /etc/init.d/php-fastcgi start
- Visit xcache admin panel http://vps_ip_address/xcache
Stitching php-fastcgi and nginx vhosts:
Now lets enable php for vhosts configured with nginx:
- Download nginx fastcgi param config file and place it at
/etc/nginx/fastcgi.conf
- Update /etc/nginx/sites-available/mysite.com with following config:
location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name; include /etc/nginx/fastcgi.conf; }
- Restart nginx and we are done
Here we complete the vps setup and vhost configurations. Verify the new vps setup and once satisfied update site’s DNS settings. Another challenge involving migration from apache to nginx includes rewriting apache .htaccess rewrite rules for nginx. However, I will keep that for another post.
Pingback: uberVU - social comments
Pingback: Tweets that mention Setting Nginx, PHP Fastcgi and XCache on a new Ubuntu | Abhi's Weblog -- Topsy.com
Pingback: Abhinav Singh’s Blog: Setting Nginx, PHP Fastcgi and XCache on a new Ubuntu | Development Blog With Code Updates : Developercast.com
Pingback: Webs Developer » Abhinav Singh’s Blog: Setting Nginx, PHP Fastcgi and XCache on a new Ubuntu
Abhinav,
I think you are the owner of gtalkbots.Is the bot no more operational?
Thanks.
You should not trust in every tutorial, I found a great article here, check this
http://www.discusswire.com/setting-php-fastcgi-nginx-dont-trust-tutorials-check-configuration/