== link:index.html[Index] -> link:other.html[Other information] Other: Cherokee goodies ----------------------- There are several important features of Cherokee that really do make a difference in real-world production environments. [[cherokee-admin]] Cherokee-Admin ~~~~~~~~~~~~~~ Cherokee bundles a one of a kind GUI to set up every available feature without the need of editing any configuration files by hand. It is a modern and easy to manage web application that allows to set up the server with speed and ease. The interface is thoroughly documented throughout Cherokee's documentation. Several security measures prevent non authorized personnel from accessing the application, and one-time passwords are generated each time the program is launched. This can be used to give temporary access to a remote administrator. [[cherokee-tweak]] Cherokee-Tweak ~~~~~~~~~~~~~~ The Swiss-army knife of the Cherokee bundle. This little tool enables you, among other things, to rotate the logs with absolutely no downtime at all. No connections are lost. No delay happens. It can also be used to trace Cherokee's state on the fly, even remotely and on production servers. This tool has its own documentation under the link:other_bundle_cherokee-tweak.html[cherokee-tweak] section. [[x-sendfile]] X-Sendfile ~~~~~~~~~~ X-Sendfile is a special, non-standard HTTP header that has been supported by Cherokee for a while. At first you might think it is no big deal, but think again.It can be enabled in any CGI, FastCGI, SCGI, or uWSGI backend. Basically its job is to instruct the web server to ignore the content of the response and replace it by whatever is specified in the header. The main advantage of this is that it will be Cherokee the one serving the file, making use of all its optimizations. It is useful for processing script-output of e.g. php, perl, ruby or any cgi. This is particularly useful because it hands the load to Cherokee, all the response headers from the backend are forwarded, the whole application uses a lot less resources and performs several times faster not having to worry about a task best suited for a web server. You retain the ability to check for special privileges or dynamically deciding anything contemplated by your backend's logic, you speed up things a lot while having more resources freed, and you can even specify the delivery of files outside of the web server's document root path. Of course, this is to be done solely in controlled environments. In short, it offers a huge performance gain at absolutely no cost. Note that the X-Sendfile feature also supports `X-Accel-Redirect` header, a similar feature offered by other web servers. This is to allow the migration of applications supporting it without having to make major code rewrites. Of course, this feature can be enabled or disabled in a per-rule basis, so you can have several rules and handlers on your virtual servers with the feature ON or OFF according to your needs. [[zero-downtime]] Zero Downtime Updates, AKA "Graceful restart" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cherokee has an ability hardly ever seen in any service delivering application, be it web content, multimedia streaming or almost any other server you can think of. Whenever a configuration change is applied, it is immediately reflected in the web server with no downtime requirements to restart the server. Of course the connections that are already being served will continue normally with the same parameters that where negotiated with the requesting clients, but they will not be shut down just to perform a menial task such as restarting the server. It's a bit like changing the tires on your car while still driving. In fact, this mechanism is not only limited to configuration updates. Cherokee is so smart that it can even apply this to perform full program upgrades. This means you can completely replace the binaries for new ones, launch the enhanced versions and yet not suffer any downtime. Zero connection losses, no lag associated. Guaranteed. This might seem as just another cool feature, but is in fact huge. Just think about it: an extremely high traffic site cannot afford to be down. Ever. Not to upgrade the webserver. Not to enhance it. Not to reflect a new configuration setting. Thousands of hits per second depend on it. With Cherokee you can cope with this and much more. With Cherokee, it's easier done than said. [[ssl-vhosts]] SSL Virtual Hosts ~~~~~~~~~~~~~~~~~ A problem arises when virtual hosts and SSL must be used simultaneously. This is due to the fact that a web server cannot see the hostname header when the SSL request is being processed. The first thing that the server has to do is to connect with the other end by using SSL/TLS. The user entered host part of the URI must match the Common Name (CN) provided by the certificate. Since virtual hosts are in use, the CN of the first available certificate may or may not match the one specified in the early stages of TLS negotiation. //// You might have been told elsewhere that named virtual hosts in SSL cannot be supported without SNI (Server Name Indication) because a web server cannot see the hostname header when the SSL request is being processed. Technically this might have been correct in the past. The first thing that the server has to do is to connect with the other end by using SSL/TLS. The user entered host part of the URI must match the Common Name (CN) provided by the certificate. Since virtual hosts are in use, the CN of the first available certificate may or may not match the one specified in the early stages of TLS negotiation. However, nothing is forever.. and that applies to SSL/TLS connections as well. Cherokee elegantly respins the SSL layer once it knows the virtual server, and the magic occurs: SSL supporting several certificates on the same IP address and port. //// Cherokee supports the clean and standard method of dealing with this issue called link:http://en.wikipedia.org/wiki/Server_Name_Indication[Server Name Indication] (SNI) that sends the name of the virtual host during the TLS negotiation. If link:http://tools.ietf.org/html/rfc4366#section-3.1[SNI] is supported by your SSL/TLS library, the SSL layer does not need to be restarted. Since the host info can be put in the SSL handshake, things will simply work as long as there is a web browser with SNI support at the other side. Currently every modern web browser supports this, and Cherokee has TLS SNI support for the OpenSSL backends. Note that for SNI to work, client support is required. Web browsers known to support it are Mozilla Firefox 2.0+ and Opera 8.0+ in all its variants, Safari 3.2.1+ on OS X and Vista, Internet Explorer 7+ (Vista, not XP) or later, and Google Chrome (Vista, not XP). When using SNI is not possible, other workarounds can still be used. Check the link:cookbook_ssl.html[SSL recipe] of our link:cookbook.html[cookbook] for more details. [[dbslayer]] Database load balancing ~~~~~~~~~~~~~~~~~~~~~~~ Ever heard of the *DB Access Layer*, AKA link:http://code.nytimes.com/projects/dbslayer/[DBSlayer]? In case you haven't, DBSlayer is a database abstraction and pooling layer designed to be simple to use (it's a DB abstraction layer for the web age built on top of HTTP and JSON). Well, Cherokee ships our very own link:modules_handlers_dbslayer.html[DBSlayer] handler that provides the fastest implementation in existence. It also provides several interesting enhancements. The usage of this balancing mechanism is a blessing when you wish to scale connection growth against the database layer without replicating your databases to every web server. It is also useful when you have problems like local connections overwhelming a local slave, local slave database failures, or replication failures. This feature delivers connection pooling, database abstraction to enable easier migrations and administration, load balancing and automatic fail over. [[reverse_proxy]] Reverse Proxy ~~~~~~~~~~~~~ Yes, that too! Cherokee also provides a state of the art link:modules_handlers_proxy.html[HTTP reverse proxy] module. Check the documentation for more details and give it a try. And if that is not enough, you can always take a look at the rest of the link:modules.html[modules] bundled with Cherokee. [[streaming]] Audio and video streaming ~~~~~~~~~~~~~~~~~~~~~~~~~ Both audio and video streaming are supported, intelligently handling the available bandwidth to maximize service. Are you planning on being the next Youtube? Take a look at the link:modules_handlers_streaming.html[Streaming handler]. [[secure_downloads]] Secure downloads ~~~~~~~~~~~~~~~~ A pretty nifty feature that has been having great acceptance is Cherokee's capability of generating temporal URLs to serve hidden file. The link:modules_handlers_secdownload.html[Hidden Downloads] handler is exactly what you need if, for instance, you plan on serving lots of files and want to be protected against automatic download scripts. Of course that is not the sole use of this. Cherokee only implements the security. From there on, the sky is the limit. [[boolean_rules]] AND, OR and NOT rule types ~~~~~~~~~~~~~~~~~~~~~~~~~~ These rule types have been fully implemented for a long time. The things achievable by these rules are at the same time very powerful and very complex. You can combine them with as much flexibility as you want. [[wizards]] Configuration Wizards ~~~~~~~~~~~~~~~~~~~~~ Another interesting feature is a project aimed at providing configuration wizards as an easy way to deploy a set of standard applications. The idea is to select an application from the list and let the wizard configure Cherokee to be able to run such application -say Wordpress, for instance-. Even though the obtained configuration could not be perfect, it will always be a good starting point to play with for further tuning. [[slowloris]] Slowloris resilient ~~~~~~~~~~~~~~~~~~~ Slowloris is the name of a perl-based HTTP client that can be used to perform DOS attacks on web servers. It uses a minimal amount of TCP traffic to do so, and quite frankly the attack has been running amok out in the wild with devastating effects for a lot of servers. Guess what? Cherokee is resilient to Slowloris and is recommended as an effective defense on many security guides, such as the link:http://www.funtoo.org/en/security/slowloris/[Slowloris DOS Mitigation Guide]. [[rrdtool]] Statistics and usage graphs ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cherokee-Admin uses RRDtool to collect and display statistical data. If this feature is enabled, you will access a wide variety of information. Check the link:other_graphs.html[usage graphs] section for more details. [[templating]] Template subsystem ~~~~~~~~~~~~~~~~~~~ There is an advanced template subsystem used for both the link:config_virtual_servers_evhost.html[Advanced Virtual Hosting] module and the link:modules_loggers_custom.html[Custom logger]. These modules can perform macro substitution to provide fine-grained control over their capabilities. The template subsystem provides slicing support in pretty much the same way the Python syntax does, so it can basically allow to use portion of the replacement strings instead of the whole thing. You can read more about the specifics of the syntax and practical examples on the config_virtual_servers_evhost.html#slicing[Slicing] section of the link:config_virtual_servers_evhost.html[Advanced Virtual Hosting] documentation. [[caching]] Front-line Cache ~~~~~~~~~~~~~~~~ Cherokee has built-in support for efficient caching mechanisms. These allow it to cache anything that passes by (whether static or dynamic content), without having to depend on an additional caching layer such as Squid or Varnish. Typically such layers inherently introduce latency due to the round-trips associated to checking whether or not the contents have already been cached. Since Cherokee can process all of this on its own, this overhead can be totally avoided. Check out the link:other_front_line_cache.html[Front-line Cache] documentation.