<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Chris Gilligan » new media » Chris Gilligan » new media »</title> <atom:link href="http://chrisgilligan.com/feed/" rel="self" type="application/rss+xml" /><link>http://chrisgilligan.com</link> <description>portfolio of web work</description> <lastBuildDate>Fri, 18 May 2012 15:02:34 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>Load Balancing Virtualmin WordPress Hosting Server with Varnish on AWS</title><link>http://chrisgilligan.com/consulting/load-balancing-virtualmin-wordpress-hosting-server-varnish-aws/</link> <comments>http://chrisgilligan.com/consulting/load-balancing-virtualmin-wordpress-hosting-server-varnish-aws/#comments</comments> <pubDate>Thu, 17 May 2012 20:43:06 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Amazon Web Services]]></category> <category><![CDATA[Consulting]]></category> <category><![CDATA[Content Management Systems]]></category> <category><![CDATA[Virtualmin]]></category> <category><![CDATA[Wordpress]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=830</guid> <description><![CDATA[I am creating a true load balancer topography for a WordPress hosting server, if it needs to scale up beyond what the current system can handle. Scaling Levels The current system is the &#8220;admin&#8221; path shown in the diagram, with no CDN or Load Balancing. It will handle a lot of traffic, but it is [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/05/EMTopography-1.png" width="240" /></p><p><strong>I am creating a true load balancer topography for a WordPress hosting server</strong>, if it needs to scale up beyond what the current system can handle.</p><h3>Scaling Levels</h3><p>The current system is the &#8220;admin&#8221; path shown in the diagram, with no CDN or Load Balancing. It will handle a lot of traffic, but it is somewhat vulnerable to failure and overload. A simple and inexpensive extension of this system is to add CloudFront CDN, the &#8220;beta users&#8221; path.</p><p>For ultimate reliability and speed, I propose the &#8220;users&#8221; path: This will take most load off of the <a
href="http://www.virtualmin.com/documentation/id,running_mysql_on_a_remote_system/">Virtualmin/Apache and Webmin/MySQL </a>servers, because the user will be interacting only with CloudFront CDN and Varnish Caching Servers.</p><p
style="text-align: center;"><a
href="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/05/EMTopography-1.png"><img
class="aligncenter size-medium wp-image-831" title="AWS Topography" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/05/EMTopography-1-300x225.png" alt="" width="300" height="225" /></a></p><h3>Load Balancing</h3><p>The Load Balancing layer can be deployed separate from the current configuration, with DNS change to Route 53 for domains that require Load Balancing. If DNS routing for a domain goes to the Elastic IP, that traffic will interact directly with the primary Virtualmin/Apache server, which is OK for beta stage.</p><p>Traffic via Route 53 will be served from the Varnish instances, which will be load balanced, in multiple Availability Zones, and will serve cached WordPress pages as static HTML.</p><p>W3 Total Cache coordinates Apache and Varnish to provide updated disk-cached pages, and some data objects. CloudFront CDN pulls linked images, css, js, etc. from Apache via the W3 disk and opcode caches.</p><h3>Redundancy and Fault Tolerance</h3><p>More fault tolerance, speed and redundancy can be created via <a
href="http://blog.9minutesnooze.com/raid-10-ebs-data/">RAID10 arrays of multiple EBS Volumes</a>, attached to the Virtualmin and Webmin instances. Creating a Storage Area Network for these volumes will provide shared /home and /var for the primary and slave instances.</p><p>Slave Server pairs for Virtualmin/Apache and Webmin/MySQL can be created to respond in round-robin fashion to the Varnish requests. With AWS Auto-scaling, more instances can be created on-demand if load on the backend servers is too great.</p><p>EBS snapshots of primary database server and web server will provide speedy recovery from catastrophic failure.<br
/> S3 backups of virtual domains on the primary Virtualmin/Apache server will provide speedy restoration of broken code or loss of files.</p><p>Be aware that creating a system with all of the elements I have described could be very expensive, and probably not necessary unless traffic is in the millions.</p><h3>Website Workflow</h3><p><strong>WordPress sites:</strong></p><ul><li>Create Virtual Domain, which <a
title="Automated WordPress Installation Via Custom Virtualmin Script Installer" href="http://chrisgilligan.com/wordpress/automated-wordpress-installation-via-custom-virtualmin-script-installer/">automatically provisions WordPress with database and custom plugins/templates</a></li><li>Build WordPress site via the Elastic IP (spoof DNS on your local machine to do this)</li></ul><p><strong>At Soft Launch (client approval or beta):</strong></p><ul><li>Point A record to Elastic IP</li><li>Set up W3 Total Cache with CloudFront and Varnish, but do not deploy</li></ul><p><strong>At Public Launch:</strong></p><ul><li>Deploy W3TC</li><li>Point A record to Route 53, or set name servers to Route 53</li></ul> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/load-balancing-virtualmin-wordpress-hosting-server-varnish-aws/" title="inurl public_html/wp-config php">inurl public_html/wp-config php</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/load-balancing-virtualmin-wordpress-hosting-server-varnish-aws/" title="scaling wordpress">scaling wordpress</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/consulting/load-balancing-virtualmin-wordpress-hosting-server-varnish-aws/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Automated WordPress Installation Via Custom Virtualmin Script Installer</title><link>http://chrisgilligan.com/wordpress/automated-wordpress-installation-via-custom-virtualmin-script-installer/</link> <comments>http://chrisgilligan.com/wordpress/automated-wordpress-installation-via-custom-virtualmin-script-installer/#comments</comments> <pubDate>Thu, 17 May 2012 20:42:10 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Virtualmin]]></category> <category><![CDATA[Wordpress]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=832</guid> <description><![CDATA[WordPress (or any other script) can automatically install during Virtualmin &#62; Create Virtual Server. Virtualmin automatically creates users, MySQL database, and installs WordPress in the public_html root, then gives a link to the WordPress Installer. You can even create a custom installer with a set of plugins and themes. To create a custom script installer [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/05/wordpress-installation.jpg" width="240" /></p><p><strong>WordPress (or any other script) can automatically install during Virtualmin &gt; Create Virtual Server.</strong></p><p>Virtualmin automatically creates users, MySQL database, and installs WordPress in the public_html root, then gives a link to the WordPress Installer. You can even create a custom installer with a set of plugins and themes.</p><p><strong>To create a custom script installer with plugins and themes:</strong></p><ul><li>Download http://wordpress.org/latest.zip &amp; unzip</li><ul><li>  add some themes and plugins folders in /wp-content/</li><li>  zip as copy-of-latest.zip</li></ul><li>Create a copy of <a
href="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/05/wordpress.pl_.zip">/usr/libexec/webmin/virtual-server/scripts/wordpress.pl</a></li><ul><li>  edit copy-of-wordpress.pl to give a new name: script_wordpress_desc &#8220;Custom WordPress&#8221;</li><li>  link to your zip: &#8216;url&#8217; =&gt; &#8220;http://yourdomain.com/copy-of-latest.zip&#8221;,</li></ul><li>Put copy-of-wordpress.pl in /usr/libexec/webmin/virtual-server/scripts/</li><li>Virtualmin &gt; System Settings &gt; Server Templates &gt; Default Settings &gt; Default Script Installers</li><ul><li>Custom WordPress</li></ul></ul><p>&nbsp;</p> ]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/wordpress/automated-wordpress-installation-via-custom-virtualmin-script-installer/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Professional Social Network</title><link>http://chrisgilligan.com/consulting/professional-social-networks/</link> <comments>http://chrisgilligan.com/consulting/professional-social-networks/#comments</comments> <pubDate>Thu, 03 May 2012 14:03:54 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Amazon Web Services]]></category> <category><![CDATA[Consulting]]></category> <category><![CDATA[Professional Social Networks]]></category> <category><![CDATA[Web Server Performance Tuning]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=806</guid> <description><![CDATA[You have probably heard of LinkedIn, but the new paradigm is industry-specific and profession-specific networks. Using SocialEngine Community Software, and deployed in a robust Cloud Formation on Amazon Web Services, we have created a powerful educational and promotional platform.]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/05/Screen-Shot-2012-05-03-at-8.34.55-AM.png" width="240" /></p><p><strong>Professional Social Networks are the next frontier on the web.</strong> You have probably heard of LinkedIn, but the new paradigm is industry-specific and profession-specific networks. Using <a
href="http://www.socialengine.net/">SocialEngine Community Software</a>, and deployed in a robust <a
href="http://aws.amazon.com/">Cloud Formation on Amazon Web Services</a>, <a
href="http://web-n-map.com/">Web-N-Map Solutions</a> has created a powerful educational and promotional platform.</p><p><strong><a
href="http://dentaljugaad.com/">DentalJugaad.com is a Professional Social Network for dentistry professionals</a></strong>, students, interns, lab professionals, and others related to dentistry.</p><p><a
href="http://dentaljugaad.com/"><img
class="aligncenter size-medium wp-image-807" title="Dental Jugaad Professional Social Network" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/05/Screen-Shot-2012-05-03-at-8.34.55-AM-225x300.png" alt="" width="225" height="300" /></a></p><p>Launched in the India/Asia-Pacific region, DentalJugaad.com is ready for heavy traffic and a worldwide user base.</p><p>My role in this project was to configure the software and server stack. I chose CentOS 6 x64 as the Linux foundation for the site, integrated the LAMP software stack with Virtualmin, and connected to AWS S3 backups and CloudFront content distribution network.</p><p>Future-proofing is assured, for the point when traffic and load warrant scaling up to a Load Balancer and dedicated Amazon RDS database server. Using tools from <a
href="http://www.rightscale.com/">RightScale</a> and Amazon Web Services, scaling up to a serious web presence is simple and quickly accomplished.</p><p>For more information, or to plan your own Social Network, <a
href="http://webnmap.com/contact-us.php">contact Web-N-Map Solutions</a>.</p> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="joomla 1 5 centos 6">joomla 1 5 centos 6</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="chown socialengine">chown socialengine</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="nginx network traffic stops at 12M">nginx network traffic stops at 12M</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="nginx w3 total cache apc minify">nginx w3 total cache apc minify</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="social network web template">social network web template</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="virtualmin consultant">virtualmin consultant</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="webpage powered for socialengine">webpage powered for socialengine</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="wordpress apache php setup tuning">wordpress apache php setup tuning</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/consulting/professional-social-networks/" title="wordpress apc php ini apc optimization">wordpress apc php ini apc optimization</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/consulting/professional-social-networks/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Punk Rock Music Community</title><link>http://chrisgilligan.com/portfolio/punk-rock-music-community/</link> <comments>http://chrisgilligan.com/portfolio/punk-rock-music-community/#comments</comments> <pubDate>Tue, 10 Apr 2012 14:20:41 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Consulting]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[Portfolio]]></category> <category><![CDATA[Publishing]]></category> <category><![CDATA[Web Server Performance Tuning]]></category> <category><![CDATA[Wordpress]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=771</guid> <description><![CDATA[Punktastic.com is a community powered site that covers punk music in Britain, but is poised to go worldwide. They cover punk and hardcore shows and festivals, and provide album reviews, video interviews and more. With a growing audience and user base, Punktastic needed a more reliable and robust web server, so they made the move [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/04/Screen-Shot-2012-04-10-at-10.03.58-AM.png" width="240" /></p><p><strong><a
title="Punktastic.com" href="http://punktastic.com/">Punktastic.com</a> is a community powered site that covers punk music in Britain, but is poised to go worldwide.</strong> They cover punk and hardcore shows and festivals, and provide album reviews, video interviews and more.</p><p>With a growing audience and user base, Punktastic needed a more reliable and robust web server, so they made the move to a dedicated CentOS 5 series web server with 3GB RAM. While this is a relatively low-end box, it has plenty of horsepower for a single WordPress site and phpBB3 forum.</p><div
id="attachment_772" class="wp-caption aligncenter" style="width: 257px"><a
href="http://punktastic.com/"><img
class="size-medium wp-image-772" title="Punktastic.com" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/04/Screen-Shot-2012-04-10-at-10.03.58-AM-247x300.png" alt="" width="247" height="300" /></a><p
class="wp-caption-text">Punktastic.com web site</p></div><h3>For this GIG, I soloed on&#8230;</h3><ul><li>transferring the site from a WAMP development server to the live LAMP server</li><li>configuring an active firewall to block the baddies</li><li>installing monitoring and administration tools</li><li>tuning Apache and MySQL for high traffic</li><li>integrating APC PHP Cache to speed up web pages and provide better concurrency</li></ul><p><strong>Loud Fast Rules.</strong></p> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="powered by expressionengine registration inurl register">powered by expressionengine registration inurl register</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="powered by expressionengine">powered by expressionengine</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="com powered by expressionengine [business]">com powered by expressionengine [business]</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="powered by express engine forums">powered by express engine forums</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="com powered by expressionengine [restaurants]">com powered by expressionengine [restaurants]</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="[ cpu ][ phpinfo ] [ php ini ] [ cpu ] [ mem ] [ users ] [ tmp ]">[ cpu ][ phpinfo ] [ php ini ] [ cpu ] [ mem ] [ users ] [ tmp ]</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="webserver virtualmin Fedora 16">webserver virtualmin Fedora 16</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="powered by expressionengine forum">powered by expressionengine forum</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="gilligan wordpress">gilligan wordpress</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/punk-rock-music-community/" title="expresion engine music register">expresion engine music register</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/portfolio/punk-rock-music-community/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>WordPress with W3 Total Cache on Nginx with APC (Virtualmin)</title><link>http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/</link> <comments>http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/#comments</comments> <pubDate>Mon, 12 Mar 2012 15:25:34 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Web Server Performance Tuning]]></category> <category><![CDATA[Wordpress]]></category> <category><![CDATA[apc]]></category> <category><![CDATA[nginx]]></category> <category><![CDATA[virtualmin]]></category> <category><![CDATA[w3 total cache]]></category> <category><![CDATA[w3tc]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=672</guid> <description><![CDATA[Virtualmin now includes support for Nginx web server. I deploy many WordPress sites with W3 Total Cache and APC Alternative PHP Cache, so I was very interested to see how Nginx performance compares to Apache for WordPress, and whether APC and W3TC would play nice with Nginx. I prefer to install WordPress in public_html/wordpress for [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/03/virtualmin-nginx-wordpress-permalinks-apc.png" width="240" /></p><p><strong><a
href="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/03/virtualmin-nginx-wordpress-permalinks-apc.png"><img
class="alignright size-medium wp-image-673" title="virtualmin-nginx-wordpress-permalinks-apc" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/03/virtualmin-nginx-wordpress-permalinks-apc-300x187.png" alt="" width="300" height="187" /></a>Virtualmin now includes <a
title="Virtualmin Nginx" href="http://www.virtualmin.com/documentation/web/nginx">support for Nginx web server</a>.</strong> I deploy many WordPress sites with W3 Total Cache and APC Alternative PHP Cache, so I was very interested to see how Nginx performance compares to Apache for WordPress, and whether APC and W3TC would play nice with Nginx.</p><p>I prefer to install WordPress in public_html/wordpress for ease of development, compatibility with other scripts, etc. Accordingly, the suggested configuration is for WordPress installed in a subfolder. This info also assumes you have successfully installed APC Cache on your server, and set up a <em>clean</em> install of Virtualmin with Nginx as the Alternative Web Server. Switching from Apache to Nginx later is difficult, as is transferring apache virtual server backups. Best to start fresh and build from scratch.</p><h3>Testing the Virtualmin Nginx Modules</h3><p>Virtualmin does not support Nginx and Apache together, and there is no easy migration from Apache to Nginx, so it is suggested to begin with a fresh install of Virtualmin with no existing accounts.</p><p>If you would like to experiment with Nginx, and you already have a Virtualmin Pro license, you are permitted to set up Virtualmin on a second server for testing and migration. I run the extra Virtualmin Pro system on a VPS that I use for backups, slave DNS, and testing.</p><p>The Nginx modules are <a
title="Virtualmin Nginx on GPL?" href="http://www.virtualmin.com/node/20602">also available for the free Virtualmin GPL version</a>. To install the modules, go to Virtualmin Package Updates (wbm-virtualmin-nginx and wbm-virtualmin-nginx-ssl).</p><h3>WordPress Plugins for this Setup</h3><ul><li><a
title="Wordpress opcode cache, page cache, caching, database cache, browser cache" href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a> &#8212; adds opcode cache, minification, browser cache and page cache capabilities to WordPress&#8230; and it works with Nginx. Works best with Alternative PHP Cache to provide opcode and database cache. Setting APC for all caches works easiest with Nginx&#8230; setting to file caching introduces URL rewrite errors&#8230; See <a
title="W3 Total Cache Settings" href="#w3tc-settings">W3TC Settings</a> information below for instructions on how to implement File caching.</li><li><a
title="Wordpress Nginx Plugin" href="http://wordpress.org/extend/plugins/nginx-compatibility/">nginx Compatibility</a> &#8212; makes WordPress more compatible with Nginx, allows use of permalinks without /index.php/</li></ul><h3>Configuring Nginx for WordPress pretty URL Permalinks</h3><p>The nginx Compatibility plugin has support for pretty URLs, but you must configure Nginx to use them. You should add or edit the following URL path locations to nginx.conf for your virtual domain&#8230; either by direct edit, or via URL Path Locations in Virtualmin &gt; Services &gt; Configure Nginx Website (<em><a
title="Virtualmin Nginx WordPress URL Path Locations" href="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2012/03/virtualmin-nginx-wordpress-permalinks-apc.png">see attached image&#8230;</a></em>). This config is for WP installed in /public_html/wordpress, so you will need to omit or change /wordpress if WP is installed in a different directory.</p><p><code>location ^~ /files/ {<br
/> rewrite /files/(.+) /wordpress/wp-includes/ms-files.php?file=$1 last;<br
/> }<br
/> location @wordpress {<br
/> fastcgi_pass localhost:9000;<br
/> fastcgi_param SCRIPT_FILENAME $document_root/index.php;<br
/> include /etc/nginx/fastcgi_params;<br
/> fastcgi_param SCRIPT_NAME /index.php;<br
/> }<br
/> location ~ \.php$ {<br
/> try_files $uri @wordpress;<br
/> fastcgi_index index.php;<br
/> fastcgi_pass localhost:9000;<br
/> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br
/> include /etc/nginx/fastcgi_params;<br
/> }<br
/> location ^~ /blogs.dir/ {<br
/> internal;<br
/> root /home/username/public_html/wordpress/wp-content;<br
/> }</code></p><h3>Adding APC Support for a Virtual Domain</h3><p>Because Virtualmin&#8217;s implementation of Nginx uses php-fastcgi, each virtual domain will load its own php.ini file, so you can add the APC directives to that file (/home/domainname/etc/php5/php.ini)</p><p>Add the following to php.ini (adjust to your requirements)<br
/> <code>[APC]<br
/> extension = apc.so<br
/> apc.enabled = 1<br
/> apc.shm_segments = 1<br
/> apc.shm_size = 32M<br
/> apc.optimization = 0<br
/> apc.num_files_hint = 256<br
/> apc.user_entries_hint = 1024<br
/> apc.ttl = 0<br
/> apc.user_ttl = 0<br
/> apc.gc_ttl = 600<br
/> apc.cache_by_default = 1<br
/> apc.filters = ""<br
/> apc.slam_defense = 0<br
/> apc.use_request_time = 1<br
/> apc.mmap_file_mask = /tmp/apc.XXXXXX<br
/> apc.file_update_protection = 2<br
/> apc.enable_cli = 0<br
/> apc.max_file_size = 2M<br
/> apc.stat = 1<br
/> apc.write_lock = 1<br
/> apc.report_autofilter = 0<br
/> apc.include_once_override = 0<br
/> apc.rfc1867 = 0<br
/> apc.rfc1867_prefix = "upload_"<br
/> apc.rfc1867_name = "APC_UPLOAD_PROGRESS"<br
/> apc.rfc1867_freq = 0<br
/> apc.localcache = 1<br
/> apc.localcache.size = 256<br
/> apc.coredump_unmap = 0<br
/> apc.stat_ctime = 0<br
/> </code></p><h3>Reloading PHP-fastcgi processes after changes to php.ini</h3><p>You will need to reload the php-fastcgi processes if you change php.ini. Luckily, Virtualmin creates service scripts for each virtual domain, which you can use to reload PHP.</p><p>The service scripts are located in /etc/rc.d/init.d.</p><pre>php-fcgi-domain1.com
php-fcgi-domain2.com</pre><p>Script allows stop, start, restart<br
/> e.g.<br
/> <code>service php-fcgi-domain2.com restart</code></p><p><em><strong>The service may also be restarted via Webmin &gt; Services &gt; Bootup and Shutdown</strong></em></p><h3>Memory Considerations</h3><p>PHP FCGId will launch the number of sub-processes you specify in Virtualmin &gt; Server Configuration &gt; Website Options, so beware of the memory overhead if you specify a large number, because each will consume the amount of memory specified in  apc.shm_size. You may need to experiment with this value, depending on your server&#8217;s memory and potential traffic.</p><p>Virtualmin explains: &#8220;When PHP scripts for this domain as run via FCGId, the number of PHP processes set in this field will be kept running at all times to serve requests. You can increase this from the default of 4 to improve PHP script latency, or decrease it to reduce memory use. Setting it to None will cause PHP processes to be launched only as needed on demand, and to be cleaned up after some period of inactivity.&#8221;</p><p>Nginx support on Virtualmin is working well, and it is reported that the lead developer, Jamie Cameron, is working on a php-fpm implementation, which should increase performance and lessen memory requirements. Let&#8217;s hope this rumor is true!</p><h3><a
title="W3 Total Cache Settings" name="w3tc-settings"></a>W3 Total Cache Settings</h3><p>Provided you use the nginx.conf settings described above, using APC cache for all W3TC categories of cache/minify/etc. will work with no additional changes to the conf file. However, if you wish to choose Disk cache for page and/or minify cache, URL rewriting will not work properly on Virtualmin. You must include the location {&#8230;} directives in the nginx.conf created in your public_html root by W3TC, and add them after the location {&#8230;} directives described above.</p><p>You can do this either by copying the directives and pasting into /etc/nginx/nginx.conf, or (better) by using an include statement:</p><p><code>[...]<br
/> location ^~ /blogs.dir/ {<br
/> internal;<br
/> root /home/username/public_html/wordpress/wp-content;<br
/> }<br
/> include /home/username/public_html/nginx.conf;<br
/> [...]</code></p><p><em><strong>However, remember you will need to restart NginX web server after making changes to the W3TC configuration, because these will over-write the local nginx.conf file.</strong></em></p><h3>Conclusion</h3><p>Sorry, no benchmarks. See my <a
title="Wordpress on Nginx with APC cache (Virtualmin)" href="http://nginx.chrisgilligan.com/consulting/web-server-performance-tuning/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" target="_blank">example/test site here</a>.</p><p>Nginx support on Virtualmin is working well, though I don&#8217;t see much improvement over Apache in terms of initial index page load, or time to first byte on the WordPress test site I created.  Cached and subsequent pages load very quickly, so it looks like there is an overall improvement. All WordPress functions seem to work well: comments, image uploads, etc. are no problem. I am interested to see if there is improvement with other scripts, especially phpbb3.</p> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="virtualmin mySQL cache">virtualmin mySQL cache</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="virtualmin configuring nginx ontop of for caching">virtualmin configuring nginx ontop of for caching</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="nginx performance tuning">nginx performance tuning</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="virtualmin install apc">virtualmin install apc</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="virtualmin nginx wordpress">virtualmin nginx wordpress</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="virtualmin wp super cache">virtualmin wp super cache</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="virtualmin nginx php timeout">virtualmin nginx php timeout</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="w3 total cache nginx">w3 total cache nginx</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="cpanel service temporarily unavailable">cpanel service temporarily unavailable</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/" title="centos 6 fastcgi">centos 6 fastcgi</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/wordpress/wordpress-with-w3-total-cache-on-nginx-with-apc-virtualmin/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>Farm to Table Restaurant Website</title><link>http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/</link> <comments>http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/#comments</comments> <pubDate>Sat, 24 Dec 2011 21:08:25 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Agriculture]]></category> <category><![CDATA[Organic Farms]]></category> <category><![CDATA[Restaurant]]></category> <category><![CDATA[Retail]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=566</guid> <description><![CDATA[Joe Naturals Farm Store Cafe is a &#8220;farm to table&#8221; cafe and natural foods store located in historic Leiper&#8217;s Fork, near Franklin, TN. The owners contacted me through a fellow farmer with whom I have worked on several web projects. The website project was languishing, after being abandoned by a designer who lacked knowledge of [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/12/Screen-Shot-2011-12-24-at-2.13.41-PM.png" width="240" /></p><p>Joe Naturals Farm Store Cafe is a <a
href="http://joenaturals.com/about-joe/">&#8220;farm to table&#8221; cafe and natural foods store</a> located in historic Leiper&#8217;s Fork, near Franklin, TN. The owners contacted me through a fellow farmer with whom I have worked on several web projects.</p><div
id="attachment_567" class="wp-caption aligncenter" style="width: 310px"><a
href="http://joenaturals.com/"><img
class="size-medium wp-image-567 " title="Joe Natural's Farm Store Cafe website" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/12/Screen-Shot-2011-12-24-at-2.13.41-PM-300x226.png" alt="" width="300" height="226" /></a><p
class="wp-caption-text">Joe Natural&#39;s website</p></div><p>The website project was languishing, after being abandoned by a designer who lacked knowledge of WordPress template coding. The site needed better integration with WordPress, including text-based navigation and replacement of scanned layout comps, which were being used for page display &amp; navigation.</p><p>I reworked the stylesheet to replace image-based text with CSS styled text, integrated WordPress navigation, and then added a few WordPress plugins.</p><ul><li><a
href="http://integrationservic.es/constant-contact/wordpress-plugin.php">Constant Contact API</a> for automated newsletter signup</li><li><a
href="http://ottopress.com/wordpress-plugins/simple-facebook-connect/">Simple Facebook Connect</a> for Facebook Fan Page interconnectedness</li><li><a
href="http://ronaldheft.com/code/analyticator/">Google Analyticator</a> and <a
href="http://www.arnebrachhold.de/redir/sitemap-home/">Google XML Sitemaps</a> for search engine optimization and traffic reporting</li><li><a
href="http://yoast.com/wordpress/seo/#utm_source=wpadmin&amp;utm_medium=plugin&amp;utm_campaign=wpseoplugin">WordPress SEO</a> for simple and effective search engine optimization</li><li><a
href="http://www.w3-edge.com/wordpress-plugins/w3-total-cache/">W3 Total Cache</a> to speed up site access on a <a
href="http://lifehacker.com/godaddy-sucks/">low-end GoDaddy hosting</a> account</li></ul><p>I also worked with the farmers&#8217; social media person to add social media links and integrate Facebook &#8220;Likes&#8221; and cross publishing from the WordPress blog to the Facebook Fan Page.</p> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="farmers market website template">farmers market website template</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="wordpress virtual museum">wordpress virtual museum</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="portfolio slideshow pro clashes with simple facebook connect">portfolio slideshow pro clashes with simple facebook connect</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="fedora 16 samba speed">fedora 16 samba speed</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="organic farm web navigation">organic farm web navigation</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="centos vhost wordpress">centos vhost wordpress</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="bike magazine template">bike magazine template</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="allintext: [ SQL ] [ phpinfo ] [ php ini ] [ cpu ] [ mem ] [ users ] [ tmp ] [ delete ]">allintext: [ SQL ] [ phpinfo ] [ php ini ] [ cpu ] [ mem ] [ users ] [ tmp ] [ delete ]</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="web page for architects">web page for architects</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/" title="wordpress organic farming sites">wordpress organic farming sites</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/agriculture/farm-to-table-restaurant-website/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Apache and MySql Performance Tuning for High Traffic Website</title><link>http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/</link> <comments>http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/#comments</comments> <pubDate>Fri, 26 Aug 2011 14:27:52 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Portfolio]]></category> <category><![CDATA[Web Server Performance Tuning]]></category> <category><![CDATA[apache]]></category> <category><![CDATA[apache web server]]></category> <category><![CDATA[apc]]></category> <category><![CDATA[blacklisting]]></category> <category><![CDATA[cpanel]]></category> <category><![CDATA[denial of service]]></category> <category><![CDATA[denial of service attacks]]></category> <category><![CDATA[inspection firewall]]></category> <category><![CDATA[internet climate]]></category> <category><![CDATA[load balancing]]></category> <category><![CDATA[memory usage]]></category> <category><![CDATA[mpm]]></category> <category><![CDATA[page impressions]]></category> <category><![CDATA[performance testing]]></category> <category><![CDATA[plugins]]></category> <category><![CDATA[Search Engine Optimization]]></category> <category><![CDATA[security probes]]></category> <category><![CDATA[soccer news]]></category> <category><![CDATA[Syndication]]></category> <category><![CDATA[traffic load]]></category> <category><![CDATA[traffic security]]></category> <category><![CDATA[traffic surges]]></category> <category><![CDATA[web hosting servers]]></category> <category><![CDATA[Wordpress]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=523</guid> <description><![CDATA[SoccerNews.com is a high traffic WordPress site with over 600,000 unique visitors and over 2,000,000 page impressions per month. It is a content republisher and aggregator, presenting custom XML feeds for (what else?) soccer news from all over the world. The site has a very active user base, providing content in the forms of editorials and [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/08/Screen-Shot-2011-08-26-at-9.01.12-AM.png" width="240" /></p><p><strong><a
title="Soccer News" href="http://soccernews.com/">SoccerNews.com</a> is a high traffic WordPress site with over 600,000 unique visitors and over 2,000,000 page impressions per month.</strong> It is a content republisher and aggregator, presenting custom XML feeds for (what else?) soccer news from all over the world. The site has a very active user base, providing content in the forms of editorials and comments on news items. Advertising and sponsored referrals provide the revenue stream.</p><div
id="attachment_524" class="wp-caption aligncenter" style="width: 269px"><a
href="http://soccernews.com/"><img
class="size-medium wp-image-524 " title="SoccerNews.com website" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/08/Screen-Shot-2011-08-26-at-9.01.12-AM-259x300.png" alt="SoccerNews.com website" width="259" height="300" /></a><p
class="wp-caption-text">SoccerNews.com website</p></div><p><strong>I was contacted by the publisher</strong> after responding to a plea for assistance in a WordPress.org support forum. Though the site was running on a dedicated server with 8GB RAM, it was crashing frequently under load. The developer tried implementing APC Alternative PHP Cache and W3 Total Cache, but these measures turned out to be incompatible with some of the custom PHP code and the software architecture of the server. Haphazardly implementing randomly suggested &#8220;solutions&#8221; had actually made the problems worse, resulting in an &#8220;own goal&#8221; that brought down the server.</p><p><strong>I did an assessment of the software, hardware and traffic load</strong> and found that there were many improvements to be made. Among the changes:</p><ul><li><strong>Implemented a <a
href="http://configserver.com/cp/csf.html">Stateful Packet Inspection firewall and Login Failure Daemon</a></strong> to block malicious IP addresses, malware servers, bad bots, content scrapers, etc. Many of the problems leading to site crashes were due to constant bad bot traffic, security probes and Denial of Service attacks. Connection Tracking in the firewall now limits the amount of resources a single legitimate IP address can monopolize, in addition to blacklisting attackers.</li><ul><li>This is the first step to proper web server performance in today&#8217;s Internet climate. Popular sites that do not have a solid security and load balancing strategy are subject to crippling traffic from the Internet&#8217;s millions of malicious and compromised servers and personal computers.</li></ul><li><strong><a
title="Tuning Apache and MySQL for Best Performance in a Shared Virtual Hosting Environment" href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/">Reconfigured Apache web server, PHP and MySQL</a></strong> to better utilize the server&#8217;s horsepower. Default configurations were limiting the number of concurrent user sessions the server could handle. Changed PHP to run as FastCGI (fcgid) and recompiled Apache to better handle the needs of a high traffic WordPress site. Configured a large MySQL table and query cache based on performance and load testing.</li><li><strong>Configured Amazon CloudFront Content Distribution Network</strong>, page cache, browser cache, and object cache with the WordPress plugin, <a
title="W3 Edge -- W3 Total Cache" href="http://www.w3-edge.com/wordpress-plugins/w3-total-cache/">W3 Total Cache</a>. Due to the sheer number of ad scripts being served per page, there were inevitable JavaScript and PHP conflicts, but W3TC is very flexible and was able to handle the task.</li><li><strong>Suggested a scheduled, offsite backup strategy</strong> that would utilize existing resources, and eliminate the need for a 3rd-party backup solution that was causing more load issues and costing $45.00 per month.</li></ul><div><strong>Now the site is stable and fast</strong>, and is ready for very high traffic. With World Cup Brazil coming up in 2014, the site will definitely see a huge amount of users. Future plans include changing the architecture of the server to simplify the background processes and implement APC Alternative PHP Cache, or a caching web server front end.</div><h3>Results? I&#8217;ll let the publisher speak to that!</h3><blockquote><p><strong>The site has been as good as &#8220;flawless&#8221; since, with no downtime, and we couldn&#8217;t be happier. Everything is running smoothly and it&#8217;s a great relief knowing that we made the site faster, safer and more reliable. The site feels a lot more stable and faster. So you&#8217;ve done a great job. </strong></p><p>&#8211; Kim Vincenzius, <a
title="StarScape, LLC" href="http://www.starscape.com/">StarScape LLC</a></p></blockquote> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="fcgidmaxrequestsperprocess">fcgidmaxrequestsperprocess</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="timthumb alternative">timthumb alternative</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="expressionengine forum">expressionengine forum</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="apache handling traffic surges">apache handling traffic surges</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="alternative to timthumb">alternative to timthumb</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="joomla server memory usage high traffic">joomla server memory usage high traffic</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="non mark making artwork">non mark making artwork</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="opencart email">opencart email</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="high load speed tuning apache mysql apc">high load speed tuning apache mysql apc</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/" title="mysql traffic optimization">mysql traffic optimization</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/portfolio/apache-and-mysql-performance-tuning-for-high-traffic-website/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Tuning Apache and MySQL for Best Performance in a Shared Virtual Hosting Environment</title><link>http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/</link> <comments>http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/#comments</comments> <pubDate>Mon, 22 Aug 2011 15:13:20 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Wordpress]]></category> <category><![CDATA[brute force]]></category> <category><![CDATA[buffer length]]></category> <category><![CDATA[buffer pool]]></category> <category><![CDATA[buffer size]]></category> <category><![CDATA[cache size]]></category> <category><![CDATA[configured server]]></category> <category><![CDATA[email servers]]></category> <category><![CDATA[force probes]]></category> <category><![CDATA[innodb]]></category> <category><![CDATA[lfd]]></category> <category><![CDATA[max connections]]></category> <category><![CDATA[memory usage]]></category> <category><![CDATA[mpm]]></category> <category><![CDATA[performance tuning]]></category> <category><![CDATA[php scripts]]></category> <category><![CDATA[pool size]]></category> <category><![CDATA[software accounts]]></category> <category><![CDATA[stateful packet inspection]]></category> <category><![CDATA[static html files]]></category> <category><![CDATA[virtual hosts]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=508</guid> <description><![CDATA[Web hosting has changed dramatically in the last few years. The majority of accounts are now running PHP scripts and MySQL, whereas in the past most accounts were only serving static HTML files. This presents challenges in security as well as performance tuning. It is impossible to predict whether a certain configuration will work properly [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/08/LAMP-linux-apache-mysql-php.jpg" width="240" /></p><p><strong><img
class="alignright size-thumbnail wp-image-515" title="LAMP-linux-apache-mysql-php" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/08/LAMP-linux-apache-mysql-php-e1314060599892-150x81.jpg" alt="" width="150" height="81" />Web hosting has changed dramatically in the last few years.</strong> The majority of accounts are now running PHP scripts and MySQL, whereas in the past most accounts were only serving static HTML files. This presents challenges in security as well as performance tuning.</p><p>It is impossible to predict whether a certain configuration will work properly for a given server, unless the hardware, software, accounts, network and traffic are identical to a previously configured server… therefore it is impossible to give a configuration which will cover all applications.</p><h3>Firewall Unnecessary Traffic from Affecting the Server</h3><p>Before you begin performance tuning, please consider using a stateful packet inspection (SPI) firewall &amp; login failure daemon (LFD) for your server: <a
title="ConfigServer free firewall for web servers" href="http://configserver.com/cp/csf.html">ConfigServer Firewall is an excellent free firewall</a> &amp; lfd. This will help prevent brute force probes, port flooding, DDOS, etc. If you have 600 virtual hosts running on a server, it is very likely that the server is experiencing constant malicious exploits, especially if you are also running email servers on the same IP addresses.</p><h3>Tune Apache the Sane Way (Requires Basic Math Skills)</h3><p>If you wish to tune your Apache MPM settings, you should consider following this method:<br
/> <a
href="https://telvps.com/clients/knowledgebase/25/HOW-TO-Optimize-Apache-for-Low-Memory-Usage.html">https://telvps.com/clients/knowledgebase/25/HOW-TO-Optimize-Apache-for-Low-Memory-Usage.html</a><br
/> (the formula works well for any level of traffic and memory).</p><h3>MySQL Tuning Is More Difficult: Trial and Error</h3><p>To test your MySQL cache variables, you may try mysqltuner: <a
title="MySQL performance tuning script" href="https://github.com/rackerhacker/MySQLTuner-perl">https://github.com/rackerhacker/MySQLTuner-perl</a></p><p>This script will analyze MySQL performance and make suggestions regarding your my.cnf configuration. If you are running MySQL 5 or later, the configuration statements can be in the following form (example from one of my servers):</p><p><code>[mysqld]<br
/> safe-show-database<br
/> net_buffer_length = 1M<br
/> max_allowed_packet = 4M<br
/> myisam_sort_buffer_size = 24M<br
/> sort_buffer = 8M<br
/> key_buffer = 32M<br
/> table_cache = 1000<br
/> query_cache_size = 128M<br
/> thread_cache_size = 8<br
/> innodb_buffer_pool_size = 22M<br
/> join_buffer_size = 12M<br
/> tmp_table_size = 64M<br
/> max_heap_table_size = 32M<br
/> max_connections = 85<br
/> </code></p><p>This is for example only! table_cache should be set a little higher than the total number of tables (sum of MYISAM,INNODB,MEMORY etc.), as reported by mysqltuner. If you anticipate adding more virtual hosts, or clients adding more databases or tables, you will need to raise table_cache value.</p><p>Follow the recommendations from the Apache tuning, and then follow the recommendations of the mysqltuner script. The apache tuning will give you the number of maxclients, and from this you will know the appropriate beginning value for [mysqld] maxconnections. Begin with maxconnections set slightly higher than maxclients.</p><h3>Take Time to Get a Realistic Assessment of MySQL Performance</h3><p>If you have a PHP opcode and database caching strategy (such as APC) implemented on your web server and for your PHP script packages, you will be able to lower maxconnections, based on the information you receive from mysqltuner after 24-48 hours of steady traffic. For example, I have a server with Apache set to 256 maxclients, but the MySQL maxconnections set to 200, because many web requests do not require direct interaction with the MySQL server.</p><p>Take a look at &#8220;Highest usage of available connections&#8221;, and lower maxconnections accordingly. It is safe to lower maxconnections to a number slightly above the reported highest usage. Doing so will allow you to set higher values for the individual cache settings which affect the thread cache size, because the total thread buffer memory size is multiplied by maxconnections. Feedback is available in the reports for &#8220;Total buffers&#8221; and &#8220;Highest usage of available connections&#8221;.</p><p>After you have the proper settings for maxclients and maxconnections, restart httpd and mysqld. Wait 1 hour, and run mysqltuner to see if there are any recommended changes. Mysqltuner will show you the maximum memory which will be used by mysql. You should adjust config variables to take up no more than 60% of total RAM. Wait 24-48 hours and run mysqltuner again.</p><h4>Example mysqltuner results:</h4><p><code>-------- Storage Engine Statistics -------------------------------------------<br
/> [--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster<br
/> [--] Data in MyISAM tables: 2G (Tables: 748)<br
/> [--] Data in InnoDB tables: 20M (Tables: 76)<br
/> [--] Data in MEMORY tables: 1M (Tables: 1)<br
/> [!!] Total fragmented tables: 55</code></p><p><code>-------- Performance Metrics -------------------------------------------------<br
/> [--] Up for: 15h 7m 18s (1M q [31.195 qps], 105K conn, TX: 7B, RX: 285M)<br
/> [--] Reads / Writes: 63% / 37%<br
/> [--] Total buffers: 390.0M global + 18.6M per thread (200 max threads)<br
/> [OK] Maximum possible memory usage: 4.0G (66% of installed RAM)<br
/> [OK] Slow queries: 0% (13/1M)<br
/> [OK] Highest usage of available connections: 25% (51/200)<br
/> [OK] Key buffer size / total MyISAM indexes: 72.0M/1.1G<br
/> [OK] Key buffer hit rate: 99.9% (1B cached / 1M reads)<br
/> [OK] Query cache efficiency: 78.2% (967K cached / 1M selects)<br
/> [OK] Query cache prunes per day: 0<br
/> [OK] Sorts requiring temporary tables: 0% (0 temp sorts / 74K sorts)<br
/> [OK] Temporary tables created on disk: 20% (7K on disk / 38K total)<br
/> [OK] Thread cache hit rate: 99% (294 created / 105K connections)<br
/> [OK] Table cache hit rate: 84% (1K open / 1K opened)<br
/> [OK] Open file limit used: 71% (1K/2K)<br
/> [OK] Table locks acquired immediately: 99% (684K immediate / 686K locks)<br
/> [OK] InnoDB data size / buffer pool: 20.2M/28.0M</code></p><p><code>-------- Recommendations -----------------------------------------------------<br
/> General recommendations:<br
/> Run OPTIMIZE TABLE to defragment tables for better performance<br
/> MySQL started within last 24 hours - recommendations may be inaccurate<br
/> Enable the slow query log to troubleshoot bad queries</code></p><p>I suggest you NOT enable the slow query log unless the Slow Queries result is very high. Slow Queries result % will be somewhat high if MySQL has run for less than 24 hours.</p> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="apache tuning script">apache tuning script</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="join_buffer_size">join_buffer_size</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="apache performance tuning scripts">apache performance tuning scripts</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="opencart slow loading">opencart slow loading</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="tune apache to block more hits from same ip">tune apache to block more hits from same ip</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="opencart slow">opencart slow</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="mysql join_buffer_size">mysql join_buffer_size</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="mysql max connections calculator">mysql max connections calculator</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="Highest usage of available connections">Highest usage of available connections</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/" title="installing ez publish on godaddy">installing ez publish on godaddy</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/wordpress/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>APC Cache Considerations for Virtual Hosting Environments</title><link>http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/</link> <comments>http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/#comments</comments> <pubDate>Mon, 22 Aug 2011 14:58:21 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Wordpress]]></category> <category><![CDATA[apache]]></category> <category><![CDATA[apc]]></category> <category><![CDATA[commodity]]></category> <category><![CDATA[configured]]></category> <category><![CDATA[conflicts]]></category> <category><![CDATA[cpu requirements]]></category> <category><![CDATA[environments]]></category> <category><![CDATA[hosting server]]></category> <category><![CDATA[ini]]></category> <category><![CDATA[neighborhood]]></category> <category><![CDATA[personal clients]]></category> <category><![CDATA[php script]]></category> <category><![CDATA[script packages]]></category> <category><![CDATA[scripts]]></category> <category><![CDATA[source code]]></category> <category><![CDATA[virtual host]]></category> <category><![CDATA[virtual hosts]]></category> <category><![CDATA[virtual server]]></category> <category><![CDATA[virtualmin]]></category> <category><![CDATA[web hosting servers]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=505</guid> <description><![CDATA[APC cache does not work well in a virtual hosting environment unless PHP is running as FCGID, and every individual virtual host has a unique PHP.ini and a unique fcgiwrapper. This is not the case with many virtual hosting environments because the memory and CPU requirements are too great. I suggest using Virtualmin for a [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2010/10/Screen-shot-2010-10-13-at-6.20.12-PM.png" width="240" /></p><p>APC cache does not work well in a virtual hosting environment unless PHP is running as FCGID, and every individual virtual host has a unique PHP.ini and a unique fcgiwrapper. This is not the case with many virtual hosting environments because the memory and CPU requirements are too great.</p><p><a
title="How to Configure APC Cache on Virtual Servers with PHP running under FCGId" href="http://chrisgilligan.com/wordpress/how-to-configure-apc-cache-on-virtual-servers-with-php-running-under-fcgid/">I suggest using Virtualmin for a shared hosting environment with APC cache</a>, because it does allow to set php.ini and fcgiwrapper for every individual virtual host, and so to set an individual configuration for APC per virtual server. However with 200+ virtual hosts all running PHP script packages, as is the case with a commodity shared hosting server, this will use a lot of memory, and you will need somewhere in the neighborhood of 10-30GB apc.shm_size if you attempt to configure a single APC cache for the entire server.</p><p>My web hosting server is for a small number of personal clients, so I adjust the APC settings for each individual account, depending on the number and type of PHP script packages running on the account. These accounts are all administered by myself, not by the clients.</p><p>I do not think APC is the correct cache for most shared web hosting servers, given the number of virtual hosts. You will probably have better results if you remove APC and concentrate on <a
title="Tuning Apache and MySQL for Best Performance in a Shared Virtual Hosting Environment" href="http://chrisgilligan.com/portfolio/tuning-apache-and-mysql-for-best-performance-in-a-shared-virtual-hosting-environment/">Apache performance tuning and MySQL cache</a>.</p><p>If your clients are adamant in their requests to use APC cache, you may wish to move them to a different server which can properly handle their needs. Virtualmin is a very good choice for this, as it allows individual accounts to be configured with individual php.ini and fcgiwrapper, or even different versions of PHP. Of course, because this will require greater management, it should be charged as a premium service.</p><p>If you wish to enable APC on a commodity web hosting server, you may try the following method to selectively enable APC per directory:<br
/> <a
href="http://www.php.net/manual/en/ini.php">http://www.php.net/manual/en/ini.php</a></p><p><em>Also see other recommendations in following comments&#8230; </em></p><p>&nbsp;</p> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="apc shared hosting">apc shared hosting</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="apc virtual hosting">apc virtual hosting</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="apc cache php apache virtual hosts">apc cache php apache virtual hosts</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="how to run apc on wordpress on shared hosting">how to run apc on wordpress on shared hosting</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="configure apc for shared hosting">configure apc for shared hosting</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="configure virtual host to work with apc">configure virtual host to work with apc</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="virtualhost apc">virtualhost apc</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="apc on a virtual host">apc on a virtual host</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="apc virtual vhost">apc virtual vhost</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/" title="apc enable vhost">apc enable vhost</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Remote publishing to WordPress from Facebook via RSS</title><link>http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/</link> <comments>http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/#comments</comments> <pubDate>Tue, 26 Jul 2011 03:51:39 +0000</pubDate> <dc:creator>Chris Gilligan</dc:creator> <category><![CDATA[Wordpress]]></category> <category><![CDATA[business page]]></category> <category><![CDATA[Facebook]]></category> <category><![CDATA[fan page]]></category> <category><![CDATA[FeedWordPress]]></category> <category><![CDATA[permissions]]></category> <category><![CDATA[plugin]]></category> <category><![CDATA[RSS]]></category> <category><![CDATA[Simple Facebook Connect]]></category><guid
isPermaLink="false">http://chrisgilligan.com/?p=486</guid> <description><![CDATA[Most WordPress developers know you can use one of several plugins to publish from WordPress to a Facebook wall, app or fan page. Did you know you can also do the opposite? You can publish from Facebook to WordPress by using the FeedWordPress plugin and the RSS feed from your fan page. This can be [...]]]></description> <content:encoded><![CDATA[<p
style="float:right; margin:0 0 10px 15px; width:240px;"> <img
src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/07/Screen-Shot-2011-07-25-at-8.47.54-PM.png" width="240" /></p><p>Most WordPress developers know you can use one of several plugins to publish from WordPress to a Facebook wall, app or fan page. Did you know you can also do the opposite? You can publish from Facebook to WordPress by using the <a
href="http://wordpress.org/extend/plugins/feedwordpress/">FeedWordPress plugin</a> and the RSS feed from your fan page. This can be handy for clients who want to keep their site updated with blog posts, or share links and information, but don&#8217;t necessarily want to spend the time to post with WordPress.</p><p>Let&#8217;s face it, Facebook is convenient to use to share a link, upload small photos and video, or write a brief update.</p><h3>Your Blog is Hungry</h3><p>FeedWordPress is a plugin that pulls content from an RSS feed and publishes articles as WordPress posts. It is somewhat complex to set up properly, so I won&#8217;t go into that here. It&#8217;s up to you to figure it out, but it is very useful for adding non-copyright or permitted content to your site or a client&#8217;s site. For instance, I use it to publish bicycle manufacturer&#8217;s RSS feeds to a <a
title="Bike Shop Website with Facebook Features" href="http://chrisgilligan.com/portfolio/bike-shop-website-with-facebook-features/">local bike shop&#8217;s WordPress site</a>. You can also use it to create a scraper site, but you wouldn&#8217;t do that, would you?</p><h3>Connect WordPress to Facebook</h3><p>Using the <a
href="http://wordpress.org/extend/plugins/simple-facebook-connect/">plugin Simple Facebook Connect</a>, your client can publish WordPress posts to a Facebook fan page.  I suggest you install Simple Facebook Connect and learn how to set up a simple Facebook App using the plugin&#8217;s easy instructions. This will allow your website to use Facebook authentication to Publish to Facebook, allow comments by logged in Facebook users, etc.</p><p>Creating an App instead of a Fan Page or Business page may suit your needs. Give it a try if you have not already set up a Facebook Page. If you use SFC, don&#8217;t set it to automatically publish to Facebook, or you may create a publishing loop. Leave it set to manual publishing and you&#8217;ll have an extra Publish button in the post editor for that purpose.</p><h3>Setting up the Facebook RSS Feed</h3><p>If your client would like to use Facebook&#8217;s simple, highly available, multi-device platform to publish content to a WordPress website, you will need a Facebook page or app&#8217;s RSS feed.</p><p>Facebook Fan Pages or Business Pages are for groups or businesses. If you build websites, you have probably set these up for several clients already. But to make the RSS feed from the page available to RSS readers and aggregators, you must change a few settings:</p><ul><li>Edit Page &gt; Manage Permissions</li><li>Uncheck Only Admins can See Page</li><li>Age Restrictions: None</li><li>Country Restrictions: None</li></ul><p>Uncheck All:</p><ul><li>Users can write or post content on the wall</li><li>Users can add photos</li><li>Users can add tags to photos</li><li>Users can add videos</li></ul><p><img
class="size-full wp-image-487 alignnone" title="Facebook Page Edit Settings" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/07/Screen-Shot-2011-07-25-at-8.55.00-PM.png" alt="" width="583" height="259" /></p><p>This will make your wall posts available to the general public, because users with restricted privacy settings cannot post to your wall (they can still comment on your posts).</p><p>Now you can click the Subscribe by RSS link on your page, and the RSS feed will not display the dreaded &#8220;Facebook Syndication Error&#8221;:</p><blockquote><p>You probably reached this page by entering the guide of a syndicated error message into the location bar of your browser. This probably means that you can’t see the feed that you were trying to access. This is probably because the owner of the feed changed his or her privacy settings or deleted content on the feed. You may be able to get access to the feed by contacting the owner of the content being syndicated in that feed.</p></blockquote><p>You will get a RSS URL: http://www.facebook.com/feeds/page.php?id=195534004499&amp;format=rss20</p><div
class="woo-sc-box note">If your feed&#8217;s language needs to be adjusted, for instance if your site is hosted in Netherlands but your audience is in U.S., you will need to add a locale parameter to the feed URL: http://www.facebook.com/feeds/page.php?id=195534004499&amp;format=rss20&amp;locale-en_US</div><p>Try it in Firefox or NetNewsWire or any RSS Reader to see if you get a valid feed. If you see Facebook Syndication Error, then go back and edit your page&#8217;s permissions (see above).</p><div
class="woo-sc-box note">If your site is hosted in a locale different from the locale of your Facebook page (e.g. your host is located in Europe, but your Facebook page is for North America), then you should use the resolved IP address for Facebook for your locale. You can find this IP address from a terminal window with the ping command. Otherwise, Facebook.com will resolve to the IP address and language for your host server. This causes synchronization issues and may cause a sync timeout which can block your pages from loading.</div><h3>FeedWordPress Syndication</h3><p>OK, now you have a valid feed. Add it to FeedWordPress. The settings you may wish to change:</p><p><strong>Posts &amp; Links &gt;</strong></p><ul><li>Permalinks point to: The local copy on this website</li><li>Relative URIs: leave relative URIs unresolved</li><li>Formatting filters: Expose syndicated posts to formatting filters</li></ul><p>Now, you should have a valid RSS feed and a properly configured Syndication system.Log in to Facebook and go to the app or page (easy way is to type the name into Facebook search bar at top).Share a Link, paste the URL of the page you want to feature, e.g. http://www.extremevisionhomes.com/</p><p><img
class="alignnone size-full wp-image-488" title="Posting from Facebook to WordPress via RSS" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/07/Screen-Shot-2011-07-25-at-8.47.54-PM.png" alt="" width="527" height="468" /></p><p>Edit the fields in the Link content by clicking on them. Or, you can upload a photo or video. But be sure to add a tagline to &#8220;Say something about this…&#8221; This line becomes your Title in the RSS feed or WordPress post. Otherwise you will see a generic &#8220;Your Client&#8217;s Facebook Wall 07/12/2011 15:35:43&#8243; as the title.</p><p><img
class="alignnone size-full wp-image-489" title="Facebook WordPress Syndication RSS" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/07/Screen-Shot-2011-07-25-at-8.50.58-PM.png" alt="" width="515" height="199" /></p><p>And on the client&#8217;s site, you will see this:</p><p><a
href="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/07/Screen-Shot-2011-07-25-at-10.48.23-PM.png"><img
class="alignnone size-large wp-image-491" title="Facebook Wall Posts on WordPress Website via Facebook RSS" src="http://d1c0uje93yv0mr.cloudfront.net/wp-content/uploads/2011/07/Screen-Shot-2011-07-25-at-10.48.23-PM-1024x654.png" alt="" width="640" height="408" /></a></p><p>You may want to set up a WordPress Category for these posts. FeedWordPress can be configured to post to a specific Category, add Tags, etc. You might even separate these posts from the main blog page, or style them in your WordPress theme via CSS or a Category Template.</p> <strong
class="seo-searchterms">Incoming search terms for the article:</strong><ul
class="seo-searchterms"><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="rotating twitter feed">rotating twitter feed</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="facebook syndication error rss">facebook syndication error rss</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="from facebook to wordpress">from facebook to wordpress</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="import facebook wall to website">import facebook wall to website</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="fancybox watermark">fancybox watermark</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="inurl /wp-content/plugins/easy-comment-uploads/upload-form php">inurl /wp-content/plugins/easy-comment-uploads/upload-form php</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="landscape architecture portfolio layout">landscape architecture portfolio layout</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="powered by wordpress intitle: travel">powered by wordpress intitle: travel</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="publish from facebook to wordpress">publish from facebook to wordpress</a></li><li
class="seo-searchterms"><a
href="http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/" title="powered by wordpress intitle money">powered by wordpress intitle money</a></li></ul>]]></content:encoded> <wfw:commentRss>http://chrisgilligan.com/wordpress/remote-publishing-to-wordpress-from-facebook-via-rss/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
<!-- Served from: chrisgilligan.com @ 2012-05-19 08:45:15 by W3 Total Cache -->
