PacktLib: Nginx 1 Web Server Implementation Cookbook

Nginx 1 Web Server Implementation Cookbook


About the Author

About the Reviewers


The Core HTTP Module


Installing new modules and compiling Nginx

Running Nginx in debug mode

Easy reloading of Nginx using the CLI

Splitting configuration files for better management

Setting up multiple virtual hosts

Setting up a default catch-all virtual host

Using wildcards in virtual hosts

Setting up the number of worker processes correctly

Increasing the size of uploaded files

Using dynamic SSI for simple sites

Adding content before and after a particular page

Enabling auto indexing of a directory

Serving any random web page from a directory

Serving cookies for identifying and logging users

Re-encoding the response to another encoding

Enabling Gzip compression on some content types

Setting up 404 and other error pages

All About Rewrites: The Rewrite Module


Setting up a simple redirect

Using variables in your rewrite

Using cookies for your rewrites

Using browser agents for your rewrites

Using rate limits as a condition for rewrites

Blocking requests based on HTTP referrers

Serving maintenance page when deploying

Setting up a WordPress site with static file serving

Setting up a Drupal site with static file serving

Setting up a Magento site with static file serving

Converting your Apache's .htaccess into Nginx rewrites

Using maps to make configurations cleaner

Get It All Logged: The Logging Module


Setting up error log path and levels

Logging it like Apache

Disabling logging of 404 in error logs

Using different logging profiles in the same setup

Enabling a log file cache

Utilizing separate error logs per virtual host

Setting up log rotation

Enabling remote logging with syslog-ng

Setting up your custom logs for easy parsing

Slow Them Down: Access and Rate Limiting Module


Limiting requests for any given session

Blocking and allowing access using IP

Setting up simple rate limiting for a download directory

Rate limiting search engine bots

Setting up GeoIP using the MaxMind country database

Using the GeoIP module to set up access and rate control

Let's be Secure: Security Modules


Setting up HTTP auth for access control

Generating a secure link for files

Setting up HTTPS for a simple site

Using non standard error codes for debugging SSL setup

Using wildcard certificates with multiple servers

Using Nginx SSL variables for rewrite rules

Setting Up Applications: FCGI and WSGI Modules


Setting up a PHP FCGI site

Setting up a Python site using uWSGI

Modifying FCGI timeouts

Utilizing FCGI cache to speed it up

Using multiple FCGI backends

Nginx as a Reverse Proxy


Using Nginx as a simple reverse proxy

Setting up a rails site using Nginx as a reverse proxy

Setting up correct reverse proxy timeouts

Setting up caching on the reverse proxy

Using multiple backends for the reverse proxy

Serving CGI files using thttpd and Nginx

Setting up load balancing with reverse proxy

Splitting requests based on various conditions using split-clients

Improving Performance and SEO Using Nginx


Setting up TCP options correctly for optimizing performance

Reducing the keep-alives to free up Nginx workers

Using Memcached as the cache backend

Configuring the right event model and file limits

Setting max-age expiry headers for client-side caching

Blocking scrapers, bots, and spiders to save bandwidth

Redirection of www to non-www domain for SEO

Removing all white space from response

Setting up server status for monitoring

Setting up Munin for 24x7 Nginx monitoring

Enabling GZIP pre-compression

Preventing hotlinking using Nginx

Using embedded Perl to minify JavaScript files

Using embedded Perl to minify CSS files

Using embedded Perl to serve sitemaps (SEO)

Setting up Boost module on Drupal with Nginx

Setting up streaming for Flash files

Utilizing the 1x1 GIF serving module to do offline processing

Using Other Third-party Modules


Setting up an IMAP/POP3 proxy server

Setting up authentication for mail services

Setting up SSL for mail authentication

Using Nginx as a WEBDAV reverse proxy

Dynamic image resizing using Nginx

Replacing and searching text in Nginx response

Assembling ZIP files on the fly

Using Nginx as a HTTP publish-subscribe server

Transforming XML responses using XSLT templates

Setting up Etags for static content

Easy logging of page load times

Streaming of MP4/H.264 files

Setting up SCGI sites

Setting up expiring links

Some More Third-party Modules


Configuring a fair load balancing

Setting up health checks for backend servers

Tracking and reporting file upload progress

Generating circles for round edges using Nginx

Running Python using Phusion Passenger

Generating graphs directly from RRDtool in Nginx

Using Google performance tools

Serving content directly from GridFS

Configuring Basic HTTP auth using PAM

Configuring Basic HTTP auth using Kerberos