  
<div id="snippet_389" class="snippet">
  <h2><a href="/snippets/389-How-to-set-the-Expires-header-with-Apache-2-and-mod-expires" title="How to set the Expires header with Apache 2 and mod_expires - Apache - apache, expires, mod_expires, header, caching">How to set the Expires header with Apache 2 and mod_expires</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/8-Apache">
      Apache</a> posted 5 months ago by christian
          
  </div>

  <div class="body">
    <p>First you need to enable the mod_expires module:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> a2enmod expires
</pre></p>
<p>Next add this to your configuration:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="NamedConstant">ExpiresActive</span> On
<span class="line-numbers">   2 </span> <span class="LineComment"><span class="LineComment">#</span> Set Expires header to current time by default</span>
<span class="line-numbers">   3 </span> <span class="NamedConstant">ExpiresDefault</span> A0
<span class="line-numbers">   4 </span> 
<span class="line-numbers">   5 </span> <span class="TagContainer"><span class="TagContainer">&lt;</span><span class="TagName">FilesMatch</span> &quot;\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$&quot;<span class="TagContainer">&gt;</span></span>
<span class="line-numbers">   6 </span>   <span class="NamedConstant">ExpiresDefault</span> <span class="String"><span class="String">&quot;</span>access plus 30 days<span class="String">&quot;</span></span>
<span class="line-numbers">   7 </span> <span class="TagContainer"><span class="TagContainer">&lt;/</span><span class="TagName">FilesMatch</span><span class="TagContainer">&gt;</span></span>
<span class="line-numbers">   8 </span> 
<span class="line-numbers">   9 </span> <span class="TagContainer"><span class="TagContainer">&lt;</span><span class="TagName">FilesMatch</span> &quot;\.(jpg|jpeg|png|gif|swf|bmp|)$&quot;<span class="TagContainer">&gt;</span></span>
<span class="line-numbers">  10 </span>   <span class="NamedConstant">ExpiresDefault</span> <span class="String"><span class="String">&quot;</span>access plus 7 days<span class="String">&quot;</span></span>
<span class="line-numbers">  11 </span> <span class="TagContainer"><span class="TagContainer">&lt;/</span><span class="TagName">FilesMatch</span><span class="TagContainer">&gt;</span></span>
<span class="line-numbers">  12 </span> 
<span class="line-numbers">  13 </span> <span class="TagContainer"><span class="TagContainer">&lt;</span><span class="TagName">FilesMatch</span> &quot;\.(txt|xml|js|css)$&quot;<span class="TagContainer">&gt;</span></span>
<span class="line-numbers">  14 </span>   <span class="NamedConstant">ExpiresDefault</span> <span class="String"><span class="String">&quot;</span>access plus 1 day<span class="String">&quot;</span></span>
<span class="line-numbers">  15 </span> <span class="TagContainer"><span class="TagContainer">&lt;/</span><span class="TagName">FilesMatch</span><span class="TagContainer">&gt;</span></span>
</pre></p>
<p>Now restart Apache:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> $ sudo /etc/init.d/apache2 force-reload
</pre></p>
<p>Check that the proper headers are set with Firebug, Yahoo YSlow or Google Page speed.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/205-apache">apache</a>, <a href="/tags/827-expires">expires</a>, <a href="/tags/828-mod-expires">mod_expires</a>, <a href="/tags/591-header">header</a>, <a href="/tags/748-caching">caching</a>
    
    
  </div>
</div>



  
<div id="snippet_346" class="snippet">
  <h2><a href="/snippets/346-Paperclip-plugin-Phusion-Passenger-path-problem" title="Paperclip plugin + Phusion Passenger + path problem - Ruby - paperclip, apache, phusion, passenger">Paperclip plugin + Phusion Passenger + path problem</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted 9 months ago by christian
          
  </div>

  <div class="body">
    <p>In config/initializers/paperclip.rb put:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">if</span> <span class="Variable">RAILS_ENV</span> <span class="Operator">==</span> <span class="String"><span class="String">&quot;</span>development<span class="String">&quot;</span></span>
<span class="line-numbers">   2 </span>   <span class="LibraryClassType">Paperclip</span>.<span class="FunctionName">options</span>[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>command_path</span>] <span class="Operator">=</span> <span class="String"><span class="String">'</span>/opt/local/bin/<span class="String">'</span></span>
<span class="line-numbers">   3 </span> <span class="Keyword">else</span>
<span class="line-numbers">   4 </span>   <span class="LibraryClassType">Paperclip</span>.<span class="FunctionName">options</span>[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>command_path</span>] <span class="Operator">=</span> <span class="String"><span class="String">'</span>/usr/bin/<span class="String">'</span></span>
<span class="line-numbers">   5 </span> <span class="Keyword">end</span>
</pre></p>
<p>Note image_magick_path is deprecated alias of command_path.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/567-paperclip">paperclip</a>, <a href="/tags/205-apache">apache</a>, <a href="/tags/592-phusion">phusion</a>, <a href="/tags/593-passenger">passenger</a>
    
    
  </div>
</div>



  
<div id="snippet_335" class="snippet">
  <h2><a href="/snippets/335-How-to-parse-Apache-logs-with-Ruby" title="How to parse Apache logs with Ruby - Ruby - apache, statistics, logs, ruby, combined, format">How to parse Apache logs with Ruby</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted 10 months ago by christian
          
  </div>

  <div class="body">
    <p>Only supports the combined format at the moment&#8230;</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">class</span> <span class="TypeName">ApacheLog</span>
<span class="line-numbers">   2 </span>   <span class="Variable">FORMATS</span> <span class="Operator">=</span> {
<span class="line-numbers">   3 </span>     <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>combined</span> =&gt; <span class="String"><span class="String">%r{</span>^<span class="String"><span class="String">(</span><span class="UserDefinedConstant">\S</span>+<span class="String">)</span></span> - - <span class="UserDefinedConstant">\[</span><span class="String"><span class="String">(</span><span class="UserDefinedConstant">\S</span>+ <span class="UserDefinedConstant">\+</span><span class="UserDefinedConstant">\d</span><span class="String"><span class="String">{</span>4<span class="String">}</span></span><span class="String">)</span></span><span class="UserDefinedConstant">\]</span> &quot;<span class="String"><span class="String">(</span><span class="UserDefinedConstant">\S</span>+ <span class="UserDefinedConstant">\S</span>+ <span class="String"><span class="String">[</span>^&quot;<span class="String">]</span></span>+<span class="String">)</span></span>&quot; <span class="String"><span class="String">(</span><span class="UserDefinedConstant">\d</span><span class="String"><span class="String">{</span>3<span class="String">}</span></span><span class="String">)</span></span> <span class="String"><span class="String">(</span><span class="UserDefinedConstant">\d</span>+|-<span class="String">)</span></span> &quot;<span class="String"><span class="String">(</span>.*?<span class="String">)</span></span>&quot; &quot;<span class="String"><span class="String">(</span><span class="String"><span class="String">[</span>^&quot;<span class="String">]</span></span>+<span class="String">)</span></span>&quot;$<span class="String">}</span></span>
<span class="line-numbers">   4 </span>   }
<span class="line-numbers">   5 </span>   
<span class="line-numbers">   6 </span>   <span class="Keyword">class</span> <span class="TypeName"><span class="Variable"><span class="Variable">&lt;&lt;</span> self</span></span>
<span class="line-numbers">   7 </span>     <span class="Keyword">def</span> <span class="FunctionName">each_line</span>(<span class="FunctionArgument">log_file<span class="FunctionArgument">,</span> log_format <span class="Operator">=</span> <span class="Variable">FORMATS</span><span class="FunctionArgument">[</span><span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>combined</span><span class="FunctionArgument">]</span></span>)
<span class="line-numbers">   8 </span> 
<span class="line-numbers">   9 </span>       f <span class="Operator">=</span> <span class="LibraryClassType">File</span>.<span class="FunctionName">open</span>(log_file, <span class="String"><span class="String">&quot;</span>r<span class="String">&quot;</span></span>)
<span class="line-numbers">  10 </span> 
<span class="line-numbers">  11 </span>       f.<span class="FunctionName">each_line</span> <span class="Keyword">do</span>|<span class="Variable">line</span>|
<span class="line-numbers">  12 </span>         data <span class="Operator">=</span> line.<span class="FunctionName">scan</span>(log_format).<span class="FunctionName">flatten</span>
<span class="line-numbers">  13 </span> 
<span class="line-numbers">  14 </span>         <span class="Keyword">if</span> data.<span class="FunctionName">empty?</span>
<span class="line-numbers">  15 </span>           p <span class="String"><span class="String">&quot;</span>Line didn't match pattern: <span class="String"><span class="String">#{</span>line<span class="String">}</span></span><span class="String">&quot;</span></span>
<span class="line-numbers">  16 </span> 
<span class="line-numbers">  17 </span>           <span class="Keyword">next</span>
<span class="line-numbers">  18 </span>         <span class="Keyword">end</span>
<span class="line-numbers">  19 </span> 
<span class="line-numbers">  20 </span>         <span class="Keyword">yield</span> data
<span class="line-numbers">  21 </span>       <span class="Keyword">end</span>
<span class="line-numbers">  22 </span>     <span class="Keyword">end</span>
<span class="line-numbers">  23 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  24 </span> <span class="Keyword">end</span>
<span class="line-numbers">  25 </span> 
<span class="line-numbers">  26 </span> 
<span class="line-numbers">  27 </span> log_file   <span class="Operator">=</span> <span class="Variable">ARGV</span>[<span class="Number">0</span>]
<span class="line-numbers">  28 </span> 
<span class="line-numbers">  29 </span> <span class="LibraryClassType">ApacheLog</span>.<span class="FunctionName">each_line</span>(log_file) <span class="Keyword">do </span>|<span class="Variable">data</span>|
<span class="line-numbers">  30 </span>   host, date, url_with_method, status, size, referrer, agent <span class="Operator">=</span> data
<span class="line-numbers">  31 </span> <span class="Keyword">end</span>
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/205-apache">apache</a>, <a href="/tags/737-statistics">statistics</a>, <a href="/tags/738-logs">logs</a>, <a href="/tags/8-ruby">ruby</a>, <a href="/tags/739-combined">combined</a>, <a href="/tags/311-format">format</a>
    
    
  </div>
</div>



  
<div id="snippet_330" class="snippet">
  <h2><a href="/snippets/330-How-to-hide-X-Powered-By-and-Server-headers" title="How to hide X-Powered-By and Server headers - Apache - servertokens, server, x-powered-by, mod_rails, passenger, apache, apache2, headers">How to hide X-Powered-By and Server headers</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/8-Apache">
      Apache</a> posted 11 months ago by christian
          
  </div>

  <div class="body">
    <p>First enable the mod_headers module:<br />
<pre class="active4d"><span class="line-numbers">   1 </span> sudo a2enmod headers
</pre></p>
<p>Then add this to your apache2.conf:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="LineComment"><span class="LineComment">#</span> Hide X-Powered-By and Server headers</span>
<span class="line-numbers">   2 </span> <span class="NamedConstant">Header</span> always unset <span class="String"><span class="String">&quot;</span>X-Powered-By<span class="String">&quot;</span></span>
<span class="line-numbers">   3 </span> <span class="NamedConstant">ServerTokens</span> Prod
<span class="line-numbers">   4 </span> <span class="NamedConstant">ServerSignature</span> Off
</pre></p>
<p>Now restart Apache:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> /etc/init.d/apache2 force-reload
</pre></p>
<p>This is security through obscurity at it&#8217;s finest&#8230;</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/726-servertokens">servertokens</a>, <a href="/tags/100-server">server</a>, <a href="/tags/727-x-powered-by">x-powered-by</a>, <a href="/tags/706-mod-rails">mod_rails</a>, <a href="/tags/593-passenger">passenger</a>, <a href="/tags/205-apache">apache</a>, <a href="/tags/589-apache2">apache2</a>, <a href="/tags/296-headers">headers</a>
    
    
  </div>
</div>



  
<div id="snippet_277" class="snippet">
  <h2><a href="/snippets/277-Configuring-Apache-to-be-a-forward-proxy" title="Configuring Apache to be a forward proxy - Apache - apache, forward, proxy, rewrite">Configuring Apache to be a forward proxy</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/8-Apache">
      Apache</a> posted about 1 year ago by christian
          
  </div>

  <div class="body">
    <p>This configuration makes Apache act as an <span class="caps">HTTP</span> proxy:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="TagContainer"><span class="TagContainer">&lt;</span><span class="TagName">VirtualHost</span> <span class="TagContainer">*:8080</span><span class="TagContainer">&gt;</span></span>
<span class="line-numbers">   2 </span> <span class="NamedConstant">ProxyRequests</span> On
<span class="line-numbers">   3 </span> <span class="NamedConstant">ProxyVia</span> On
<span class="line-numbers">   4 </span> <span class="LineComment"><span class="LineComment">#</span>ProxyRemote * http://...:8080 Uncomment to route requests through another proxy</span>
<span class="line-numbers">   5 </span> <span class="TagContainer"><span class="TagContainer">&lt;</span><span class="TagName">Proxy</span> *<span class="TagContainer">&gt;</span></span>
<span class="line-numbers">   6 </span> 	<span class="NamedConstant">Order</span> deny,allow
<span class="line-numbers">   7 </span> 	<span class="NamedConstant">Deny</span> from all
<span class="line-numbers">   8 </span> 	<span class="NamedConstant">Allow</span> from all <span class="LineComment"><span class="LineComment">#</span> Not a good idea, set to allowed IP ranges</span>
<span class="line-numbers">   9 </span> <span class="TagContainer"><span class="TagContainer">&lt;/</span><span class="TagName">Proxy</span><span class="TagContainer">&gt;</span></span> 
<span class="line-numbers">  10 </span> 	
<span class="line-numbers">  11 </span> <span class="NamedConstant">CacheRoot</span> <span class="String"><span class="String">&quot;</span>/tmp<span class="String">&quot;</span></span>
<span class="line-numbers">  12 </span> <span class="NamedConstant">CacheMaxExpire</span> 24
<span class="line-numbers">  13 </span> <span class="NamedConstant">CacheLastModifiedFactor</span> 0.1
<span class="line-numbers">  14 </span> <span class="NamedConstant">CacheDefaultExpire</span> 1
<span class="line-numbers">  15 </span> 
<span class="line-numbers">  16 </span> <span class="NamedConstant">ServerName</span> my-proxy
<span class="line-numbers">  17 </span> 
<span class="line-numbers">  18 </span> <span class="NamedConstant">ErrorLog</span> <span class="String"><span class="String">&quot;</span>/var/log/apache2/proxy-error.log<span class="String">&quot;</span></span>
<span class="line-numbers">  19 </span> <span class="NamedConstant">CustomLog</span> <span class="String"><span class="String">&quot;</span>/var/log/apache2/proxy-access.log<span class="String">&quot;</span></span> common
<span class="line-numbers">  20 </span> <span class="TagContainer"><span class="TagContainer">&lt;/</span><span class="TagName">VirtualHost</span><span class="TagContainer">&gt;</span></span>
</pre></p>
<p>Also read <a href="http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#access">this</a>.</p>
<h2>Tips</h2>
<p>You can use mod_rewrite to rewrite requests.  To rewrite root (/) to /temporary_outage you could use the following rewrite:</p>
<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="NamedConstant">RewriteCond</span> <span class="LibraryVariable"><span class="LibraryVariable">%{</span>HTTP_HOST}</span> <span class="String">^(www\.)?xxx\.com</span> 
<span class="line-numbers">   2 </span> <span class="NamedConstant">RewriteRule</span> <span class="String">/$</span> <span class="String">http://</span><span class="LibraryVariable"><span class="LibraryVariable">%{</span>HTTP_HOST}</span><span class="String">/temporary_outage/</span> <span class="String">[P,L]</span>
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/205-apache">apache</a>, <a href="/tags/616-forward">forward</a>, <a href="/tags/617-proxy">proxy</a>, <a href="/tags/145-rewrite">rewrite</a>
    
    
  </div>
</div>




<div class="pagination"><span class="disabled">&laquo; Previous</span> <span class="current">1</span> <a href="/tags/show/205-apache/page/2">2</a> <a href="/tags/show/205-apache/page/2">Next &raquo;</a></div>

