<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Linux, Solaris, Programming, Apache, Ubuntu Tips &#38; Tricks</title>
	<link>http://shahidz.com</link>
	<description>Passionate About Technology</description>
	<pubDate>Thu, 23 Oct 2008 16:12:17 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>ufw - Uncomplicated Firewall</title>
		<link>http://shahidz.com/ufw-uncomplicated-firewall/</link>
		<comments>http://shahidz.com/ufw-uncomplicated-firewall/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 16:12:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Iptables]]></category>

		<category><![CDATA[Linux Commands]]></category>

		<category><![CDATA[Tips &amp; Tricks]]></category>

		<category><![CDATA[]]></category>

		<category><![CDATA[firewall]]></category>

		<category><![CDATA[ufw]]></category>

		<guid isPermaLink="false">http://shahidz.com/ufw-uncomplicated-firewall/</guid>
		<description><![CDATA[Description
ufw is stands for Uncomplicated Firewall, this program is for managing a Linux firewall and aims to provide an easy to use interface for the user, as well as support package integration and dynamic-detection of open ports. ufw  is not intended to provide complete firewall functionality via its command interface, but instead provides an easy [...]]]></description>
			<content:encoded><![CDATA[<h3>Description</h3>
<p align="justify">ufw is stands for Uncomplicated Firewall, this program is for managing a Linux firewall and aims to provide an easy to use interface for the user, as well as support package integration and dynamic-detection of open ports. ufw  is not intended to provide complete firewall functionality via its command interface, but instead provides an easy way to  add  or  remove simple rules. It is currently mainly used for host-based firewalls.</p>
<h3 align="justify">Installation</h3>
<pre>$ sudo apt-get install ufw</pre>
<p>For help use</p>
<pre>$ man ufw</pre>
<p>To enable firewall</p>
<pre>$ sudo ufw enable</pre>
<p>When we enable the firewall it will set firewall with default settings, it will deny ssh ports, telnet and many other services. So when we enable firewall on the remort servers we must enable ssh ports first, this can done using.</p>
<pre>$ ufw allow proto tcp from any to any port 22</pre>
<p>To disable a firewall</p>
<pre>$ sudo sfw disable</pre>
<p>Examples</p>
<p>Deny all access to port 53:</p>
<pre>$ sudo ufw deny 53</pre>
<p>Allow all access to tcp port 80:</p>
<pre>$ sudo ufw allow 80/tcp</pre>
<p>Allow all access from RFC1918 networks to this host:</p>
<pre>$ sudo ufw allow from 10.0.0.0/8
$ sudo ufw allow from 172.16.0.0/12
$ sudo ufw allow from 192.168.0.0/16</pre>
<p>Deny access to udp port 514 from host 1.2.3.4:</p>
<pre>$ sudo ufw deny proto udp from 1.2.3.4 to any port 514</pre>
<p>Allow access to udp 1.2.3.4 port 5469 from 1.2.3.5 port 5469:</p>
<pre>$ sudo ufw allow proto udp from 1.2.3.5 port 5469 to 1.2.3.4 port 5469</pre>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/ufw-uncomplicated-firewall/feed/</wfw:commentRss>
		</item>
		<item>
		<title>URL Redirecting (301,302) in Varnish</title>
		<link>http://shahidz.com/url-redirecting-301302-in-varnish/</link>
		<comments>http://shahidz.com/url-redirecting-301302-in-varnish/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 17:37:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Apache]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Tips &amp; Tricks]]></category>

		<category><![CDATA[301]]></category>

		<category><![CDATA[302]]></category>

		<category><![CDATA[error]]></category>

		<category><![CDATA[rewrite]]></category>

		<category><![CDATA[url redirection]]></category>

		<category><![CDATA[varnish]]></category>

		<category><![CDATA[vcl]]></category>

		<guid isPermaLink="false">http://shahidz.com/url-redirecting-301302-in-varnish/</guid>
		<description><![CDATA[There is no straight forward method for 301/302 URL redirection as we did with rewrite rule. But there are some situations where we need to redirect a URL on a host to some URL on different host. In this situation we need to use 301/302 redirection.  There are two ways we can implement this.
First method [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">There is no straight forward method for 301/302 URL redirection as we did with <a href="http://shahidz.com/apache-url-rewriting/" title="Rewrite Rule" target="_blank">rewrite rule</a>. But there are some situations where we need to redirect a URL on a host to some URL on different host. In this situation we need to use 301/302 redirection.  There are two ways we can implement this.</p>
<p align="justify">First method is to use  <em>set req.http.host</em> and <em>set req.url</em> in the vcl.conf file. Using these two methods we perform normal redirection. Using these method we will redirect the url to some other URL on the same host. For example say the URL http://example.com/error500.php will be redirect to the URL http://example.com/redirect.php. We specify 301/302 redirection to the URL http://foo.com/index.php in the redirect.php file using header method.</p>
<ul>
<li>In the sub vcl_recv method use the following code.</li>
</ul>
<pre>sub vcl_recv {
   if (req.http.host ~ "example.com") {
      if (req.url ~ "error500.php") {
         set req.http.host = "example.com";
         set req.url = "/redirect.php";
      }
   }
}</pre>
<ul>
<li>In the redirect.php file use the following method.</li>
</ul>
<pre>&lt;?php
header("HTTP/1.1 302 Moved Temperarly");
header('Location:http://foo.com/index.php');
exit;
?&gt;</pre>
<p>Second method is to use <em>vcl_error</em> error method. In this error method we can specify HTML tags, so using meta tags we can implement redirection. This option is available with the latest version of varnish.</p>
<ul>
<li>In the sub vcl_recv method use the following code.</li>
</ul>
<pre>sub vcl_recv {
   if (req.http.host ~ "example.com") {
      if (req.url ~ "error500.php")
         error;
      }
   }
}
sub vcl_error {
        set obj.http.Content-Type = "text/html; charset=utf-8";
        if (req.http.host ~ "example.com") {
                if (req.url ~ "error500.php") {
                        synthetic {"
                                &lt;?xml version="1.0" encoding="utf-8"?&gt;
                                &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
                                &lt;html&gt;
                                        &lt;head&gt;
                                                &lt;meta http-equiv="refresh" content="0;url=http://foo.com/index.php"&gt;
                                        &lt;/head&gt;
                                &lt;/html&gt;
                        "};
                }
        }
        deliver;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/url-redirecting-301302-in-varnish/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Varnish Configuration and Settings</title>
		<link>http://shahidz.com/varnish-configuration-and-settings/</link>
		<comments>http://shahidz.com/varnish-configuration-and-settings/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 15:42:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[proxy]]></category>

		<category><![CDATA[reverse proxy]]></category>

		<category><![CDATA[varnish]]></category>

		<category><![CDATA[varnishd]]></category>

		<guid isPermaLink="false">http://shahidz.com/varnish-configuration-and-settings/</guid>
		<description><![CDATA[
!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } 	--> 	
Varnish is a reverse proxy or http accelerator that uses serverside caching to increase the speed of servicing HTTP requests for use in things such as websites. The varnishd daemon accepts HTTP requests from clients, passes them on to  [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css"></style>
<style type="text/css">!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } 	--> 	</style>
<p>Varnish is a <a href="http://swik.net/reverse-proxy">reverse proxy</a> or <a href="http://swik.net/http-accelerator">http accelerator</a><meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /> that uses serverside caching to increase the speed of servicing HTTP requests for use in things such as websites. The varnishd daemon accepts HTTP requests from clients, passes them on to  a backend server and caches the returned documents to better satisfy  future requests for the same document.</p>
<p style="margin-bottom: 0cm" align="justify">Varnish uses Varnish Configuration Language (VCL). The VCL language is a small domain-specific language designed to be used to define request handling and document caching policies for the Varnish HTTP accelerator. When a new configuration is loaded, the varnishd management process translates the VCL code to C and compiles it to a shared object which is then dynamically linked into the server process.</p>
<p align="justify">Varnish uses two configuration file one is VCL and another one contains the values which will be passed as parametes to the varnishd.</p>
<p align="justify">/etc/default/varnish</p>
<pre align="justify"># Configuration file for varnish

# Main configuration file. You probably want to change it <img src='http://shahidz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
VARNISH_VCL_CONF=/etc/varnish/vcl.conf

# Default address and port to bind to
VARNISH_LISTEN_ADDRESS=0.0.0.0
VARNISH_LISTEN_PORT=80

# Telnet admin interface listen address and port
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082

# The minimum number of threads to start
VARNISH_MIN_WORKER_THREADS=1

# Maximum number of worker threads or INF for unlimited
VARNISH_MAX_WORKER_THREADS=2048

# Timeout value in seconds for threads to return
VARNISH_WORKER_THREAD_TIMEOUT=5

# Hash algorithm to be used
VARNISH_HASHOPTION=classic

# Maximum size of the backend storagefile in bytes
VARNISH_BACKEND_STORAGE_SIZE=10240000
VARNISH_BACKEND_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin

# Backend storage specification
VARNISH_BACKEND_STORAGE="file,${VARNISH_BACKEND_STORAGE_FILE},${VARNISH_BACKEND_STORAGE_SIZE}"

# Set default ttl in secounds
VARNISH_TTL=120</pre>
<p>/etc/varnish/vcl.conf</p>
<pre>      backend default {
        # Our default backend, i.e. the web server
        # You can use more than 1. See docs.
        set backend.host = "0.0.0.0";
        set backend.port = "8080";  # Web Server Port
        }
        sub vcl_recv {
           if ((req.http.host ~ "^backend1..varnish.com") || (req.http.host ~ "^backend2.varnish.com")) {
             pass;
           } else {
             if (req.request != "GET" &amp;&amp; req.request != "HEAD") {
                 pipe;
             }
             if (req.request == "POST") {
                 pass;
             }
             if (req.request == "GET" &amp;&amp; req.url ~ "\.(jpg|jpeg|gif|ico)$") {
                 lookup;
             }
             if (req.request == "GET" &amp;&amp; req.url ~ "\.(css|js)$") {
                 lookup;
             }
             if (req.request == "GET" &amp;&amp; req.url ~ "\.(php|html)$") {
                 lookup;
             }
             if (req.request == "GET") {
                 lookup;
             }
             lookup;
          }
        }
         sub vcl_pipe {
             pipe;
         }

         sub vcl_pass {
             pass;
         }

         sub vcl_hit {
             if (!obj.cacheable) {
                 pass;
             }
             if (req.http.Cookie) {
                pass;
             }
             deliver;
         }

         sub vcl_miss {
             fetch;
         }

         sub vcl_fetch {
             if (!obj.valid) {
                 error;
             }
             if (!obj.cacheable) {
                 pass;
             }
             insert;
         }

         sub vcl_deliver {
             deliver;
         }

         sub vcl_timeout {
             discard;
         }

         sub vcl_discard {
             discard;
         }</pre>
<p>You can use varnishstat to see the status of varnish</p>
<pre>$ varnishstat
client_conn                 0         0.00 Client connections accepted
client_req                  0         0.00 Client requests received
cache_hit                   0         0.00 Cache hits
cache_hitpass               0         0.00 Cache hits for pass
cache_miss                  0         0.00 Cache misses
backend_conn                0         0.00 Backend connections success
backend_fail                0         0.00 Backend connections failures
backend_reuse               0         0.00 Backend connections reuses
backend_recycle             0         0.00 Backend connections recycles
backend_unused              0         0.00 Backend connections unused
n_srcaddr                   0          .   N struct srcaddr
n_srcaddr_act               0          .   N active struct srcaddr
n_sess_mem                  1          .   N struct sess_mem
n_sess                      1          .   N struct sess
n_object                    0          .   N struct object
n_objecthead                0          .   N struct objecthead
n_smf                       1          .   N struct smf
n_smf_frag                  0          .   N small free smf
n_smf_large                 1          .   N large free smf
n_vbe_conn                  0          .   N struct vbe_conn
n_wrk                       0          .   N worker threads
n_wrk_create                0         0.00 N worker threads created
n_wrk_failed                0         0.00 N worker threads not created
n_wrk_max                   0         0.00 N worker threads limited
n_wrk_queue                 0         0.00 N queued work requests
n_wrk_overflow              0         0.00 N overflowed work requests
n_wrk_drop                  0         0.00 N dropped work requests
n_expired                   0          .   N expired objects
n_deathrow                  0          .   N objects on deathrow
losthdr                     0         0.00 HTTP header overflows
n_objsendfile               0         0.00 Objects sent with sendfile
n_objwrite                  0         0.00 Objects sent with write
s_sess                      0         0.00 Total Sessions
s_req                       0         0.00 Total Requests
s_pipe                      0         0.00 Total pipe
s_pass                      0         0.00 Total pass
s_fetch                     0         0.00 Total fetch
s_hdrbytes                  0         0.00 Total header bytes
s_bodybytes                 0         0.00 Total body bytes
sess_closed                 0         0.00 Session Closed
sess_pipeline               0         0.00 Session Pipeline
sess_readahead              0         0.00 Session Read Ahead
sess_herd                   0         0.00 Session herd
shm_records              3480         0.67 SHM records
shm_writes               3480         0.67 SHM writes
shm_cont                    0         0.00 SHM MTX contention
sm_nreq                     0         0.00 allocator requests
sm_nobj                     0          .   outstanding allocations
sm_balloc                   0          .   bytes allocated
sm_bfree             10240000          .   bytes free
backend_req                 0         0.00 Backend requests made</pre>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/varnish-configuration-and-settings/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to Log or mail Errors in PHP Code</title>
		<link>http://shahidz.com/how-to-log-or-mail-errors-in-php-code/</link>
		<comments>http://shahidz.com/how-to-log-or-mail-errors-in-php-code/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 17:21:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[]]></category>

		<category><![CDATA[error]]></category>

		<category><![CDATA[handling]]></category>

		<guid isPermaLink="false">http://shahidz.com/how-to-log-or-mail-errors-in-php-code/</guid>
		<description><![CDATA[There are a number of things that can go wrong in code and they bound to through errors, even if you&#8217;ve tested them hundreds of times. PHP provides some error handling methods such as error_reporting(), set_error_handler(), error_log(), restore_error_handler() for handling errors in the PHP code.
error_reporting - Sets which PHP errors are reported.
int error_reporting ([ int [...]]]></description>
			<content:encoded><![CDATA[<p>There are a number of things that can go wrong in code and they bound to through errors, even if you&#8217;ve tested them hundreds of times. PHP provides some <a href="http://in2.php.net/manual/en/ref.errorfunc.php">error handling</a> methods such as <em>error_reporting()</em>, <em>set_error_handler()</em>, <em>error_log(), restore_error_handler() </em>for handling errors in the PHP code.</p>
<p class="refpurpose"><a href="http://in2.php.net/manual/en/function.error-reporting.php"><strong><span class="refname">error_reporting</span></strong></a> - <span class="dc-title">Sets which PHP errors are reported.</span></p>
<pre class="refpurpose"><span class="type">int</span> <span class="methodname"><strong><strong>error_reporting</strong></strong></span> ([ <span class="methodparam"><span class="type">int</span> <tt class="parameter">$level</tt></span>] )</pre>
<p><a href="http://in2.php.net/manual/en/errorfunc.constants.php" target="_blank">error_reporting() level constants</a></p>
<pre>&lt;?php error_reportinng(E_ALL);?&gt;</pre>
<p class="refpurpose"><a href="http://" target="_blank"><strong><span class="refname">error_log</span></strong></a> - Sends an error message to the web server&#8217;s error log, a    <acronym title="Transmission Control Protocol">TCP</acronym> port or to a file.</p>
<pre class="refpurpose"><span class="type">bool</span> <span class="methodname"><strong><strong>error_log</strong></strong></span> ( <span class="methodparam"><span class="type">string</span> <tt class="parameter">$message</tt></span>  [, <span class="methodparam"><span class="type">int</span> <tt class="parameter">$message_type</tt></span>  [, <span class="methodparam"><span class="type">string</span> <tt class="parameter">$destination</tt></span>  [, <span class="methodparam"><span class="type">string</span> <tt class="parameter">$extra_headers</tt></span> ]]] )</pre>
<p class="refpurpose"><strong>Parameters</strong></p>
<p class="refpurpose">$message - The error message that should be logged.</p>
<p class="refpurpose">$message_type - Says where the error should go. The possible message types are as         follows:</p>
<p class="refpurpose">$extra_headers - The extra headers. It&#8217;s used when the <em><tt class="parameter">message_type</tt></em>         parameter is set to <em>1</em>.        This message type uses the same internal function as         <a href="http://in2.php.net/manual/en/function.mail.php" target="_blank" class="function">mail()</a> does.</p>
<p class="refpurpose"><a href="http://in2.php.net/manual/en/function.restore-error-handler.php" target="_blank"><strong><span class="refname">restore_error_handler</span></strong></a> - <span class="dc-title">Restores the previous error handler function</span></p>
<pre class="refpurpose"><span class="type">bool</span> <span class="methodname"><strong><strong>restore_error_handler</strong></strong></span> ( <span class="methodparam">void</span> )</pre>
<pre>&lt;?phprestore_error_handler();?&gt;</pre>
<p class="refpurpose"><a href="http://in2.php.net/manual/en/function.set-error-handler.php"><span class="refname">set_error_handler</span></a> - <span class="dc-title">Sets a user-defined error handler function</span></p>
<pre ><a href="http://" target="_blank"><span class="type"></span></a><a class="type mixed">mixed</a> <span class="methodname"><strong><strong>set_error_handler</strong></strong></span> ( <span class="methodparam"><a href="http://" target="_blank"><span class="type"></span></a><a class="type callback">callback</a></span> <tt class="parameter">$error_handler</tt>  [, <span class="methodparam"><span class="type">int</span> <tt class="parameter">$error_types</tt></span>] )</pre>
<p>Example:</p>
<pre> &lt;?php 
error_reporting(E_ALL); 
function on_error($num, $str, $file, $line) {
    print "Encountered error $num in $file, line $line: $str\n"; 
    error_log("Error: Encountered error $num in $file, line $line: $st",1,  "dev@gmail.com","From: sys@gmail.com"); 
} 
set_error_handler("on_error"); 
restore_error_handler();?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/how-to-log-or-mail-errors-in-php-code/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to synchronize the System Times</title>
		<link>http://shahidz.com/how-to-synchronize-the-time-of-a-system/</link>
		<comments>http://shahidz.com/how-to-synchronize-the-time-of-a-system/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 18:51:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Tips &amp; Tricks]]></category>

		<category><![CDATA[clock]]></category>

		<category><![CDATA[date]]></category>

		<category><![CDATA[ntpdate-debian]]></category>

		<category><![CDATA[openntpd]]></category>

		<category><![CDATA[synchronize]]></category>

		<guid isPermaLink="false">http://shahidz.com/how-to-synchronize-the-time-of-a-system/</guid>
		<description><![CDATA[Introduction
OpenNTPD is a Unix system daemon implementing the Network Time Protocol to synchronize the local clock of a computer system with remote NTP servers.
OpenNTPD is primarily developed by Henning Brauer as part of the OpenBSD project. Its design goals include being secure (non-exploitable), easy to configure, accurate enough for most purposes and with source code [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p><a href="http://www.openntpd.org/" title="http://www.openntpd.org/"><em>OpenNTPD</em></a> is a Unix system daemon implementing the Network Time Protocol to synchronize the local clock of a computer system with remote NTP servers.</p>
<p>OpenNTPD is primarily developed by <a href="http://en.wikipedia.org/w/index.php?title=Henning_Brauer&amp;action=edit&amp;redlink=1" class="new" title="Henning Brauer (page does not exist)">Henning Brauer</a> as part of the <a href="http://en.wikipedia.org/wiki/OpenBSD" title="OpenBSD">OpenBSD</a> project. Its design goals include being secure (<a href="http://en.wikipedia.org/wiki/Exploit_%28computer_security%29" title="Exploit (computer security)">non-exploitable</a>), easy to configure, accurate enough for most purposes and with <a href="http://en.wikipedia.org/wiki/Source_code" title="Source code">source code</a> that can be distributed under a <a href="http://en.wikipedia.org/wiki/BSD_license" class="mw-redirect" title="BSD license">BSD license</a>.</p>
<p>This tool helped me a lot. Using openntpd we can set the same time on multiple system.</p>
<h3>Installation</h3>
<pre>$ sudo apt-get install openntpd</pre>
<p>Openntp configuration file /etc/openntpd/ntpd.conf</p>
<p>To set the time use the command <strong>ntpdate-debian</strong></p>
<pre>$ sudo ntpdate-debian
[sudo] password for shahid:
 7 Aug 00:20:33 ntpdate[26597]: adjust time server 59.165.131.82 offset -0.089443 sec</pre>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/how-to-synchronize-the-time-of-a-system/feed/</wfw:commentRss>
		</item>
		<item>
		<title>website performance testing using httperf</title>
		<link>http://shahidz.com/website-performance-testing-using-httperf/</link>
		<comments>http://shahidz.com/website-performance-testing-using-httperf/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 18:00:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[example]]></category>

		<category><![CDATA[httperf]]></category>

		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://shahidz.com/website-performance-testing-using-httperf/</guid>
		<description><![CDATA[Introduction
httperf is a tool to measure web server  performance.
Example
$ httperf --server haproxy.com --port=80 --uri /frontend_dev.php --num-conns=25
httperf --client=0/1 --server=haproxy.com --port=80 --uri=/frontend_dev.php --send-buffer=4096 --recv-buffer=16384 --num-conns=25 --num-calls=1
Maximum connect burst length: 1

Total: connections 25 requests 25 replies 25 test-duration 0.528 s

Connection rate: 47.4 conn/s (21.1 ms/conn, &#60;=1 concurrent connections)
Connection time [ms]: min 4.9 avg 21.1 max 408.2 median 4.5 [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>httperf is a tool to measure web server  performance.</p>
<h3>Example</h3>
<pre>$ httperf --server haproxy.com --port=80 --uri /frontend_dev.php --num-conns=25
httperf --client=0/1 --server=haproxy.com --port=80 --uri=/frontend_dev.php --send-buffer=4096 --recv-buffer=16384 --num-conns=25 --num-calls=1
Maximum connect burst length: 1

Total: connections 25 requests 25 replies 25 test-duration 0.528 s

Connection rate: 47.4 conn/s (21.1 ms/conn, &lt;=1 concurrent connections)
Connection time [ms]: min 4.9 avg 21.1 max 408.2 median 4.5 stddev 80.6
Connection time [ms]: connect 0.3
Connection length [replies/conn]: 1.000

Request rate: 250 req/s (3.1 ms/req)
Request size [B]: 78.0

Reply rate [replies/s]: min 250 avg 319.6 max 250 stddev 0.0 (1 samples)
Reply time [ms]: response 0.7 transfer 5.1
Reply size [B]: header 487.0 content 34774.0 footer 0.0 (total 35261.0)
Reply status: 1xx=0 2xx=25 3xx=0 4xx=0 5xx=0

CPU time [s]: user 0.07 system 0.42 (user 12.9% system 80.4% total 93.2%)
Net I/O: 2124.7 KB/s (17.4*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0</pre>
<p>In the above output you can see the line &#8221;</p>
<pre>Total: connections 25 requests 25 replies 25 test-duration 0.528 s</pre>
<p align="justify">This line means httperf gave request  for 25 connection (means 25 connections) and it get replies for all the 25 request. And time took to 25 request and 25 replies is the test-duration and in the above example it took 0.528 seconds.</p>
<p align="justify">The bellow line means</p>
<pre>Reply rate [replies/s]: min 250 avg 250 max 250 stddev 0.0 (1 samples)</pre>
<p align="justify">Replay rate gives various statistics for the  reply  rate.   In  the  example  above,  the minimum  (‘‘min’’)  reply  rate was 250 replies per second, the verage (‘‘avg’’) was 250  replies per second,  and  the  maximum (‘‘max’’) rate was 250 replies per second.  The standard deviation was 0.3 replies per second.  The number enclosed in parentheses  shows  that  60  reply  rate  samples were acquired.</p>
<p align="justify">You can test whether the Replay rates where correct by using the argument <em>&#8211;rate</em> with the httperf command.</p>
<pre>$ httperf --server haproxy.com --port=80 --uri /frontend_dev.php --num-conns=25 --rate 250</pre>
<p align="justify">The the line Replay Time means</p>
<pre>Reply time [ms]: response 0.7 transfer 5.1</pre>
<p align="justify">The line labeled ‘‘Reply Time’’ gives information on how long it took for the server to respond and how long it took  to  receive the  reply. In the above example, it took on average 0.7 milliseconds between sending the first byte of the request and receiving  the first byte of the reply.  The time  to ‘‘transfer’’, or read, the reply was 5.1 milliseconds.</p>
<p align="justify">For more help</p>
<p align="justify">$ man  httperf</p>
<p align="justify"><a href="http://www.hpl.hp.com/research/linux/httperf/" title="httperf">httperf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/website-performance-testing-using-httperf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>iptables port forwarding on ubuntu</title>
		<link>http://shahidz.com/iptables-port-forwarding-on-ubuntu/</link>
		<comments>http://shahidz.com/iptables-port-forwarding-on-ubuntu/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 05:31:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Iptables]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Securities]]></category>

		<category><![CDATA[port forwarding]]></category>

		<guid isPermaLink="false">http://shahidz.com/iptables-port-forwarding-on-ubuntu/</guid>
		<description><![CDATA[What is Port Forwarding?
Port forwarding is a feature of the IPTables system.  It allows one computer to forward connections made to it so that another computer can actually process the request.  If you want a very simple metaphor you can think of it as mail forwarding.  Each computer has a number of [...]]]></description>
			<content:encoded><![CDATA[<h3>What is Port Forwarding?</h3>
<p align="justify">Port forwarding is a feature of the IPTables system.  It allows one computer to forward connections made to it so that another computer can actually process the request.  If you want a very simple metaphor you can think of it as mail forwarding.  Each computer has a number of addresses called ports, and IPTables allows connections to these ports to be sent to another computer. With port forwarders, you can redirect data connections from the Internet to  an internal, privately addressed machine behind your IP MASQ server.  This  forwarding ability includes network protocols such as TELNET, WWW, and SMTP.  Protocols such as FTP, legacy ICQ, and others require special handling via kernel modules.</p>
<h3 align="justify">Setup</h3>
<p>On Ubuntu you need to enable port forwarding. For doing this you have to be the root user.</p>
<pre>root@shahid-laptop:~# echo 1 &gt; /proc/sys/net/ipv4/ip_forward</pre>
<p>After this you need to write iptable rule.</p>
<pre>root@shahid-laptop:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
root@shahid-laptop:~# iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.0.10 --dport 555 -j DNAT --to 192.168.0.12:22
root@shahid-laptop:~# iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.12 --dport 22 -j ACCEPT</pre>
<p align="justify">In this rule, when we tries to connect to the IP 192.168.0.10 through the port 555 this system redirects the connection to the IP and 192.168.0.12 and port 22.</p>
<p>To see the iptables rule use the command &#8216;iptables -L&#8217;</p>
<pre>root@shahid-laptop:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             192.168.0.12        tcp dpt:ssh 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination</pre>
<h3>Saving Data</h3>
<p align="justify">When you reboot the system the iptables rules will be removed from the kernel module , so either you need to use <em>iptables-save</em> and <em>iptables-restore</em>for saving and restoring iptable rules or you need to write a script which will execut on every boot for enabling and create the iptable rule.</p>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/iptables-port-forwarding-on-ubuntu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bandwidth Monitoring Using Iptables</title>
		<link>http://shahidz.com/bandwidth-monitoring-using-iptables/</link>
		<comments>http://shahidz.com/bandwidth-monitoring-using-iptables/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 09:56:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Iptables]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[bandwidth monitoring]]></category>

		<guid isPermaLink="false">http://shahidz.com/bandwidth-monitoring-using-iptables/</guid>
		<description><![CDATA[In Linux there has a number of useful bandwidth monitoring tools such as nload, netwatch, iftop, trafshow, bandwidthd, vnstat. If all you need is a basic overview of your total bandwidth usage, iptables is all you really need. Usually we use iptables for setting firewall and port forwardings, but iptables also provides packet and byte [...]]]></description>
			<content:encoded><![CDATA[<p>In Linux there has a number of useful bandwidth monitoring tools such as <strong>nload, netwatch, iftop, trafshow, bandwidthd, vnstat.</strong> If all you need is a basic overview of your total bandwidth usage, <a href="http://www.netfilter.org/">iptables</a> is all you really need. Usually we use iptables for setting firewall and port forwardings, but iptables also provides packet and byte counters.</p>
<h3>Writting iptables rules</h3>
<p>The IP addresses in this article are modified from the real addresses. We&#8217;ll use the private IP space 192.168.0.0/16, subnetted into smaller blocks.</p>
<p>In this example, the FORWARD chain will only provide the global counters.</p>
<pre>$ sudo iptables -N system-1</pre>
<p>The rule will match any source and any destination. Everything that is being passed through this router matches this rule and will provide the total of combined downloaded and uploaded data.</p>
<pre># System-1 Downloads
  iptables -A FORWARD -d 192.168.1.0/26 -j system-1
# System-1 Uploads
  iptables -A FORWARD -s 192.168.1.0/26 -j system-1</pre>
<p>The rules created above give us separate totals for all downloads to and uploads for system-1. This is accomplished by matching the source and destination of all traffic through the router for target-1&#8217;s specific subnet. After a rule is matched, the <code>-j</code> option invokes a jump to one of the custom chains. These custom chains can then be used to add additional rules pertaining to the subnet. For instance, rules can be created for each individual IP address in that subnet to track bandwidth on a per-host basis:</p>
<pre># Town A, Host 192.168.1.10 Download
  iptables -A town-a -d 192.168.1.10
# Town A, Host 192.168.1.10 Upload
  iptables -A town-a -s 192.168.1.10</pre>
<p>You could repeat this process for every IP address for all systems within the subnet.</p>
<h3>Bandwidth statistics</h3>
<p>Viewing the current bandwidth usage is a matter of running iptables with the <code>-L</code> and <code>-v</code> options. The <code>-L</code> outputs the statistics for a chain (or all chains if none is provided). The <code>-v</code> option provides verbose output, including the packet and byte counters that we are interested in. I recommend using the <code>-n</code> option as well to prevent DNS lookups, meaning iptables will show the IP addresses without attempting to resolve the hostnames for the IP addresses, which would put additional and unnecessary load on the router.</p>
<pre>$ sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 311K packets, 48M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 system-1   all  --  *      *       0.0.0.0/0            192.168.1.0/26
    0     0 system-1   all  --  *      *       192.168.1.0/26       0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 325K packets, 29M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain system-1 (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0            all  --  *      *       0.0.0.0/0            192.168.1.10
    0     0            all  --  *      *       192.168.1.10         0.0.0.0/0</pre>
<h3>Saving data across reboots</h3>
<p>If you reboot the machine or remove the iptables kernel modules, you&#8217;ll lose all of your packet and byte counters. So you want to make backups of the running counters, and in the event of a reboot, restore the counters rather than starting from zero.</p>
<p>The iptables package comes with two programs that aid in this: <code>iptables-save</code> and <code>iptables-restore</code>. Both programs need to be told to explicitly use the packet and byte counters during backup and restore using the <code>-c</code> command line option.</p>
<p>The backup and restore process is fairly straightforward. To back up your iptables data, use</p>
<pre>$ sudo iptables-save -c &gt; iptables-backup.txt.</pre>
<p>To restore the data, after reboot, use <code></code></p>
<pre>$ sudo iptables-restore -c &lt; iptables-backup.txt.</pre>
<h3>Conclution</h3>
<p>The flexibility and power of iptables allows for more complex onitoring scenarios. You can create rules to not only track different subnets, but also to track specific ports and protocols, which lets you rack exactly how much of each customer&#8217;s traffic is Web, email, file<br />
sharing, etc.</p>
<p>In addition, these bandwidth monitoring rules can also become blocking rules. If a host has used too much bandwidth, its rule in a town&#8217;s specific chain can be modified by adding <code>-j DROP</code> to both the download and upload rules. This effectively stops traffic being routed to and from that host.</p>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/bandwidth-monitoring-using-iptables/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Logrotate in linux</title>
		<link>http://shahidz.com/logrotate-in-linux/</link>
		<comments>http://shahidz.com/logrotate-in-linux/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 06:17:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Apache]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[]]></category>

		<category><![CDATA[logrotate]]></category>

		<guid isPermaLink="false">http://shahidz.com/logrotate-in-linux/</guid>
		<description><![CDATA[Logrotate
Log files are important for Linux system security and trouble shooting.  Log files tend to grow, and if a log grows too much you compress it and takes the backup. Logrotate enables you to do this in a much better way. The process that is in charge of compressing and rotating these logfiles is called [...]]]></description>
			<content:encoded><![CDATA[<h2>Logrotate</h2>
<p>Log files are important for Linux system security and trouble shooting.  Log files tend to grow, and if a log grows too much you compress it and takes the backup.<span style="font-size: 85%"><span style="font-family: arial"></span></span> Logrotate enables you to do this in a much better way. The process that is in charge of compressing and <em>rotating</em> these logfiles is called <tt>logrotate</tt> and it is executed once per day upon Debian installations.</p>
<p>Here you will find the <tt>logrotate</tt> driver script. Every day this script runs and examines two things:</p>
<ul>
<li>The configuration file <em><tt>/etc/logrotate.conf</tt></em></li>
<li>The configuration directory <em><tt>/etc/logrotate.d/</tt></em></li>
</ul>
<p>A typical logrotate configuration file looks like this:</p>
<pre>/var/log/apache/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if [ -f /var/run/apache.pid ]; then
                        /etc/init.d/apache restart &gt; /dev/null
                fi
        endscript
}</pre>
<p>If you want to add new log rotate for any other file you can new <em>logrotate</em> configuration file to <em>/etc/logrotate.d</em> <em><tt> </tt></em></p>
<p>Assuming we have a new service &#8220;mon&#8221; which produces its output in <tt>/var/log/mon/mon.log</tt> we can cause this to be rotated every day with a script like this:</p>
<pre>/var/log/mon/*.log {
  daily
  missingok
  rotate 7
  compress
  delaycompress
  create 640 mon mon
  sharedscripts
     /etc/init.d/mon restart
  endscript
}</pre>
<p>For more help <em>man logrotate</em></p>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/logrotate-in-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apache Load Balance Using Haproxy</title>
		<link>http://shahidz.com/apache-load-balance-using-haproxy/</link>
		<comments>http://shahidz.com/apache-load-balance-using-haproxy/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 17:25:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Apache]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[acl]]></category>

		<category><![CDATA[apache load balance]]></category>

		<category><![CDATA[haproxy]]></category>

		<category><![CDATA[load balance]]></category>

		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://shahidz.com/apache-load-balance-using-haproxy/</guid>
		<description><![CDATA[Haproxy
HAProxy is a free, very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It is particularly suited for web sites crawling under very high loads while needing persistence or Layer7 processing. Supporting tens of thousands of connections is clearly realistic with todays hardware. Its mode of operation [...]]]></description>
			<content:encoded><![CDATA[<h1><strong>Haproxy</strong></h1>
<p>HAProxy is a free, very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It is particularly suited for web sites crawling under very high loads while needing persistence or Layer7 processing. Supporting tens of thousands of connections is clearly realistic with todays hardware. Its mode of operation makes its integration into existing architectures very easy and riskless, while still offering the possibility not to expose fragile web servers to the Net.</p>
<h2><strong>1. Preperation</strong></h2>
<p>For configuring haproxy you need the following setups. Here I used ACL.</p>
<h3>1.1. Using ACL</h3>
<p>The use of Access Control Lists (ACL) provides a flexible solution to perform content switching and generally to take decisions based on content extracted from the request, the response or any environmental status. The principle is simple</p>
<h3>1.2. Load Balancer</h3>
<p>Hostname: <span class="system">lb.example.com</span></p>
<p>IP: <span class="system">192.168.0.110</span></p>
<h3>1.3 Web Server 1</h3>
<p>Hostname: <span class="system">http1.example.com</span></p>
<p>IP: <span class="system">192.168.0.111</span><span class="system"></span></p>
<h3>1.4. Web Server 2</h3>
<p>Hostname: <span class="system">http2.example.com</span></p>
<p>IP: <span class="system">192.168.0.112</span></p>
<h3>1.5. First download and install haproxy</h3>
<p>To get latest version click <a href="http://haproxy.1wt.eu/#down" title="Download Haproxy" target="_blank">here </a></p>
<pre>$ wget  http://haproxy.1wt.eu/download/1.2/src/haproxy-1.2.18.tar.gz
$ tar -xzvf haproxy-1.2.18.tar.gz
$ cd  haproxy-1.2.18
$ sudo make  TARGET=linux24</pre>
<h3><strong> 1.6. Configuring Load Balancer System IP : <span class="system">192.168.0.110</span></strong></h3>
<p>set <em><strong><span class="system">E</span></strong><span class="system">NABLED</span></em> to <em><span class="system">1</span></em> in <em><span class="system">/etc/default/haproxy</span></em></p>
<pre> $ sudo vim /etc/default/haproxy</pre>
<pre># Set ENABLED to 1 if you want the init script to start haproxy.

ENABLED=1

# Add extra flags here.
#EXTRAOPTS="-de -m 16"</pre>
<p>We back up the original <span class="system">/etc/haproxy.cfg</span> and create a new one like this</p>
<pre>cp /etc/haproxy.cfg /etc/haproxy.cfg_orig
cat /dev/null &gt; /etc/haproxy.cfg
vi /etc/haproxy.cfg</pre>
<p>Sample haproxy configuration file<strong> /etc/haproxy.cfg</strong> which uses ACL. In the below example if you use the domain <em>example.com</em> haproxy always uses <strong>web server 1</strong>,if you use <em>loadbalancer.com</em></p>
<pre>global
global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        pidfile /var/run/haproxy.pid
        daemon
#       debug           # If you want to start haproxy in debugging mode uncomment this line and comment the above line.
        nbproc      4   # Number of processing cores. Dual Dual-core Opteron i    s 4 cores for example.
defaults
        log     global
        mode    http
        option  httplog
        option  httpchk
        option  dontlognull
        retries 3
        option          redispatch
        maxconn 2000
        contimeout      50000
        clitimeout      500000
        srvtimeout      500000

backend back_std
        balance roundrobin
        option redispatch
        cookie JSESSIONID prefix
        option httpclose
        option forwardfor
        option httpchk HEAD /check.txt HTTP/1.0
        server ws4 192.168.0.111:82 weight 1 check
#      stats uri /status   # Custom status URI
        stats auth username:password
        stats enable
        stats refresh 10

backend back_lb
        balance roundrobin
        option redispatch
        cookie JSESSIONID prefix nocache indirect
        option httpchk HEAD /check.txt HTTP/1.0
        server ws1 192.168.0.111:81 cookie ws1 weight 1 check
        server ws2 192.168.0.112:81 cookie ws2 weight 1 check
        option httpclose
        option forwardfor
        stats enable
        stats refresh 10

frontend http-in
        bind :80
        acl hosts_std hdr_end(host) -i example1..com          # Which is not load balanced
        acl hosts_std hdr_end(host) -i example1.com:80

        acl hosts_lb hdr_end(host) -i loadbalancer.com      # Which is load balanced
        acl hosts_lb hdr_end(host) -i loadbalancer.com:80

        use_backend back_std if hosts_std       # If requests comes to the domain which is in <em>host_std</em> then that URL will use <em>back_std</em>
        use_backend back_lb if hosts_lb          # If requests comes to <em>the domain which is in host_lb</em> then that URL will use <em>back_lb</em></pre>
<p>To allow HAProxy to bind to the shared IP address, we add the following line to <span class="system">/etc/sysctl.conf</span>:</p>
<pre>$ sudo vim /etc/sysctl.conf</pre>
<pre>[...]
net.ipv4.ip_nonlocal_bind=1
[...]</pre>
<p>and run</p>
<pre>$ sudo sysctl -p</pre>
<h3>1.7 Start haproxy</h3>
<pre>$ sudo /etc/init.d/haproxy start</pre>
<h3><strong>1.8. Configuring </strong><strong>Web Server 1 &amp; </strong><strong>Web Server2</strong></h3>
<p>We will configure HAProxy as a transparent proxy, i.e., it will pass on the original user&#8217;s IP address in a field called <span class="system">X-Forwarded-For</span> to the backend web servers. Of course, the backend web servers should log the original user&#8217;s IP address in their access logs instead of the IP addresses of our load balancers. Therefore we must modify the <span class="system">LogFormat</span> line in <span class="system">/etc/apache2/apache2.conf</span> and replace <span class="system">%h</span> with <span class="system">%{X-Forwarded-For}i</span>:</p>
<pre> $ sudo vim /etc/apache2/apache2.conf</pre>
<pre>#LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common
#LogFormat "%{Referer}i -&gt; %U" referer
#LogFormat "%{User-agent}i" agentLogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %&gt;s %b" common
LogFormat "%{Referer}i -&gt; %U" referer
LogFormat "%{User-agent}i" agent</pre>
<p>Also, we will configure HAProxy to check the backend servers health by continuously requesting the file <span class="system">check.txt</span> (translates to <span class="system">/var/www/check.txt</span> if <span class="system">/var/www</span> is your document root) from the backend servers. Of course, these requests would totally bloat the access logs and mess up your page view statistics (if you use a tool like Webalizer or AWstats that generates statistics based on the access logs).</p>
<p>Therefore we open our virtualhost configuration (in this example it&#8217;s in <span class="system">/etc/apache2/sites-available/default</span>) and put these two lines into it (comment out all other <span class="system">CustomLog</span> directives in your vhost configuration):</p>
<pre>$ sudo touch /var/www/check.txt
$ sudo vi /etc/apache2/sites-available/default</pre>
<pre>[...]
SetEnvIf Request_URI "^/check\.txt$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog
[...]</pre>
<p>Adds the ports to <em>/etc/apache2/ports.conf</em> file.</p>
<pre>Listen 81
Listen 82
&lt;IfModule mod_ssl.c&gt;
    Listen 443
&lt;/IfModule&gt;</pre>
<p>Afterwards we restart Apache:</p>
<pre>$ sudo /etc/init.d/apache2 restart</pre>
<p>Now to check the status of haproxy use the custom URI or use <em>http://example1.com/haproxy?stats</em></p>
<p>I hope it helped, a comment with your questions are welcome  <img src='http://shahidz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://shahidz.com/apache-load-balance-using-haproxy/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
