<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: webservers</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/webservers.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2012-10-14T15:21:00+00:00</updated><author><name>Simon Willison</name></author><entry><title>How can I learn more about server-side technologies?</title><link href="https://simonwillison.net/2012/Oct/14/how-can-i-learn/#atom-tag" rel="alternate"/><published>2012-10-14T15:21:00+00:00</published><updated>2012-10-14T15:21:00+00:00</updated><id>https://simonwillison.net/2012/Oct/14/how-can-i-learn/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-can-I-learn-more-about-server-side-technologies/answer/Simon-Willison"&gt;How can I learn more about server-side technologies?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Get yourself a VPS, set it up from scratch and run some non-critical websites on it (nothing with private user data since you can't be sure you'll set it up securely). Both Slicehost and Linode offer a good set of guides to a whole host of common tasks:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;a href="http://articles.slicehost.com/"&gt;http://articles.slicehost.com/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href="http://library.linode.com/"&gt;http://library.linode.com/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Running a server "live" on the internet is the best way to learn, provided you do so responsibly. Even better, start by running virtual machine servers on your own computer using VMWare or VirtualBox.

&lt;p&gt;Getting Django set up is an excellent learning project :)&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/servers"&gt;servers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="programming"/><category term="servers"/><category term="webservers"/><category term="quora"/></entry><entry><title>I would like to setup a web-server which will be used solely by myself. What would be the safest way to do so in terms of confidentiality of the contents?</title><link href="https://simonwillison.net/2012/Sep/4/i-would-like-to/#atom-tag" rel="alternate"/><published>2012-09-04T16:26:00+00:00</published><updated>2012-09-04T16:26:00+00:00</updated><id>https://simonwillison.net/2012/Sep/4/i-would-like-to/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/I-would-like-to-setup-a-web-server-which-will-be-used-solely-by-myself-What-would-be-the-safest-way-to-do-so-in-terms-of-confidentiality-of-the-contents/answer/Simon-Willison"&gt;I would like to setup a web-server which will be used solely by myself. What would be the safest way to do so in terms of confidentiality of the contents?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I haven't configured them myself, but it might be worth looking in to client SSL certificates for this. That way your server won't communicate with any browser that hasn't installed a certificate which you generate. I believe the BBC used to use this for a lot of their important servers which they wanted to be accessible only by their own developers from across the internet (I don't know if they still do).&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sysadmin"&gt;sysadmin&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="security"/><category term="sysadmin"/><category term="webservers"/><category term="quora"/></entry><entry><title>What is the difference between a web server and a web framework?</title><link href="https://simonwillison.net/2012/Jan/20/what-is-the-difference/#atom-tag" rel="alternate"/><published>2012-01-20T13:17:00+00:00</published><updated>2012-01-20T13:17:00+00:00</updated><id>https://simonwillison.net/2012/Jan/20/what-is-the-difference/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-difference-between-a-web-server-and-a-web-framework/answer/Simon-Willison"&gt;What is the difference between a web server and a web framework?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A "web framework" offers a set of APIs for writing your own custom code in such a way that it can be called via the Web. Usually a framework will deal with common details such as HTTP header parsing, URL routing and so forth.&lt;/p&gt;

&lt;p&gt;A web server is a piece of software which listens on a network port for incoming HTTP requests and responds to them. Most web servers have a default mode where they will interpret the incoming request as a path on the filesystem and return the file at that path, but they can usually be configured to do something else with the request instead (pass it to a CGI script, proxy it to another server, run some custom module code etc).&lt;/p&gt;

&lt;p&gt;If you squint at Apache or nginx (commonly referred to as web servers) you might be able to describe them as web frameworks as well, since both offer extensive configuration options and a C module API for writing custom code. Most people won't call them that though.&lt;/p&gt;

&lt;p&gt;Likewise, if you consider node.js to be a framework (which I think is a reasonable interpretation, but others may disagree with me) you could also consider it a web server, since it comes with a reasonably robust HTTP server implementation that can be started using a single function call.&lt;/p&gt;

&lt;p&gt;The problem here is really that the concept of a "web framework" doesn't lend itself to a rock-tight definition.&lt;/p&gt;

&lt;p&gt;I imagine this answer is more confusing than it is helpful, for which I apologise.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="webservers"/><category term="quora"/></entry><entry><title>What server do I need to handle 1000+ users simultaneously while they can post messages, upload pictures, and other similar stuff on a website based on PHP and mySQL?</title><link href="https://simonwillison.net/2012/Jan/10/what-server-do-i/#atom-tag" rel="alternate"/><published>2012-01-10T09:37:00+00:00</published><updated>2012-01-10T09:37:00+00:00</updated><id>https://simonwillison.net/2012/Jan/10/what-server-do-i/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-server-do-I-need-to-handle-1000+-users-simultaneously-while-they-can-post-messages-upload-pictures-and-other-similar-stuff-on-a-website-based-on-PHP-and-mySQL/answer/Simon-Willison"&gt;What server do I need to handle 1000+ users simultaneously while they can post messages, upload pictures, and other similar stuff on a website based on PHP and mySQL?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You don't need to handle 1,000 users simultaneously: you need to build something and ship it and start the process of discovering what you can build that will attract that many users. Seriously: don't even start worrying about that kind of scale until you know you're going to need it.&lt;/p&gt;

&lt;p&gt;(That said, there's no harm in keeping scaling issues in mind while you're building the software - try to avoid making dumb architectural decisions that will be impossible to scale later. But deciding on your 1,000+ simultaneous user serving architecture before you've Built Something People Want is a huge waste of your time).&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/concurrency"&gt;concurrency&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tornado"&gt;tornado&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="concurrency"/><category term="nodejs"/><category term="tornado"/><category term="webservers"/><category term="quora"/></entry><entry><title>Which web server suits Django best? Apache, Nginx or something else?</title><link href="https://simonwillison.net/2011/Jan/25/which-web-server-suits/#atom-tag" rel="alternate"/><published>2011-01-25T14:13:00+00:00</published><updated>2011-01-25T14:13:00+00:00</updated><id>https://simonwillison.net/2011/Jan/25/which-web-server-suits/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Which-web-server-suits-Django-best-Apache-Nginx-or-something-else/answer/Simon-Willison"&gt;Which web server suits Django best? Apache, Nginx or something else?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm still a big fan of a stripped down Apache+mod_wsgi running behind nginx.&lt;/p&gt;

&lt;p&gt;Nginx handles static files, gzip, trickling to slow clients, load balancing and having a configuration language that's actually pleasant to work with.&lt;/p&gt;

&lt;p&gt;Apache just sits there serving up dynamic Python pages via mod_wsgi, using the shortest possible config.&lt;/p&gt;

&lt;p&gt;The reason I like Apache for this is I don't need to babysit the process at all, unlike if I was using FastCGI or running a separate Python app server.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="webservers"/><category term="quora"/></entry><entry><title>How can I determine which web server a particular website is using (Apache, IIS, Nginx, etc)?</title><link href="https://simonwillison.net/2011/Jan/5/how-can-i-determine/#atom-tag" rel="alternate"/><published>2011-01-05T13:37:00+00:00</published><updated>2011-01-05T13:37:00+00:00</updated><id>https://simonwillison.net/2011/Jan/5/how-can-i-determine/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-can-I-determine-which-web-server-a-particular-website-is-using-Apache-IIS-Nginx-etc/answer/Simon-Willison"&gt;How can I determine which web server a particular website is using (Apache, IIS, Nginx, etc)?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you're on Linux or OS X, use curl with the -I option (to make a HEAD request and see the HTTP headers):&lt;/p&gt;

&lt;p&gt;$ curl -I &lt;span&gt;&lt;a href="http://www.op3intl.com"&gt;www.op3intl.com&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;HTTP/1.1 200 OK&lt;br /&gt;Date: Thu, 06 Jan 2011 03:31:28 GMT&lt;br /&gt;Server: Microsoft-IIS/6.0&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/apache"&gt;apache&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iis"&gt;iis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nginx"&gt;nginx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/servers"&gt;servers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="apache"/><category term="iis"/><category term="nginx"/><category term="servers"/><category term="web-development"/><category term="webservers"/><category term="quora"/></entry><entry><title>What are the advantages of running Apache behind nginx as opposed to just Apache by itself?</title><link href="https://simonwillison.net/2010/Oct/12/what-are-the-advantages/#atom-tag" rel="alternate"/><published>2010-10-12T14:09:00+00:00</published><updated>2010-10-12T14:09:00+00:00</updated><id>https://simonwillison.net/2010/Oct/12/what-are-the-advantages/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-advantages-of-running-Apache-behind-nginx-as-opposed-to-just-Apache-by-itself/answer/Simon-Willison"&gt;What are the advantages of running Apache behind nginx as opposed to just Apache by itself?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I do this for all of my Django stuff - I have Django running on modwsgi on a stripped down Apache (almost no configuration except for the modwsgi stuff), then I put an nginx on port 80 which serves the static files directly and proxies dynamic requests back to Apache.&lt;/p&gt;

&lt;p&gt;There are a few advantages to this. Firstly, I use non-threaded Apache so each Apache worker process tends to be pretty big (having a full Python interpreter + Django application running in it). It's a horrible waste of resources for one of those fat processes to sit around serving up a static file instead of serving a dynamic request. Secondly, nginx deals with slow connections for me - if someone on a modem (or 3G phone) hits my site I don't tie up an Apache process for several seconds to respond to their request. Instead, nginx sucks the response in from Apache in a few ms and then spools it out to the slow client at whatever rate they can handle. Since nginx is evented it can handle hundreds or even thousands of slow clients at once using very little memory.&lt;/p&gt;

&lt;p&gt;Finally, if I'm running an nginx proxy at the "front" of my stack it's trivial for me to start load balancing to more than one Apache servers if I need to.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/apache"&gt;apache&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nginx"&gt;nginx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="apache"/><category term="nginx"/><category term="webservers"/><category term="quora"/></entry><entry><title>What is the largest production deployment of Server Side JavaScript?</title><link href="https://simonwillison.net/2010/Aug/27/what-is-the-largest/#atom-tag" rel="alternate"/><published>2010-08-27T12:24:00+00:00</published><updated>2010-08-27T12:24:00+00:00</updated><id>https://simonwillison.net/2010/Aug/27/what-is-the-largest/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-largest-production-deployment-of-Server-Side-JavaScript/answer/Simon-Willison"&gt;What is the largest production deployment of Server Side JavaScript?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I believe Flickr used to use Rhino for scripting the image processing (resizing, thumbnailing, sharpening) that was applied to every single uploaded photo. No idea if that's still the case though.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/flickr"&gt;flickr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="flickr"/><category term="javascript"/><category term="webapps"/><category term="web-development"/><category term="webservers"/><category term="quora"/></entry><entry><title>What is the best way to learn about setting up server software for Python based web apps?</title><link href="https://simonwillison.net/2010/Aug/25/what-is-the-best/#atom-tag" rel="alternate"/><published>2010-08-25T16:23:00+00:00</published><updated>2010-08-25T16:23:00+00:00</updated><id>https://simonwillison.net/2010/Aug/25/what-is-the-best/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-best-way-to-learn-about-setting-up-server-software-for-Python-based-web-apps/answer/Simon-Willison"&gt;What is the best way to learn about setting up server software for Python based web apps?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm a big fan of Fabric for automated deployment scripts. Start by reading this tutorial: &lt;span&gt;&lt;a href="http://morethanseven.net/2009/07/27/fabric-django-git-apache-mod/wsgi-virtualenv-and-p.html"&gt;http://morethanseven.net/2009/07...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="python"/><category term="web-development"/><category term="webservers"/><category term="quora"/></entry><entry><title>Opera Unite</title><link href="https://simonwillison.net/2009/Jun/16/unite/#atom-tag" rel="alternate"/><published>2009-06-16T11:00:31+00:00</published><updated>2009-06-16T11:00:31+00:00</updated><id>https://simonwillison.net/2009/Jun/16/unite/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://unite.opera.com/"&gt;Opera Unite&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Opera’s big announcement: a developer preview (“labs release”) of their new web-server-in-your-browser feature, Unite. Includes an Opera-hosted proxy to help break through your firewall. The web server can be customised using server-side JavaScript running in an Opera Widget.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/opera"&gt;opera&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/operaunite"&gt;operaunite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unite"&gt;unite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/widgets"&gt;widgets&lt;/a&gt;&lt;/p&gt;



</summary><category term="javascript"/><category term="opera"/><category term="operaunite"/><category term="unite"/><category term="webservers"/><category term="widgets"/></entry><entry><title>FAPWS3-0.2 (WSGI server based on libev)</title><link href="https://simonwillison.net/2009/Feb/25/williamosy/#atom-tag" rel="alternate"/><published>2009-02-25T22:21:44+00:00</published><updated>2009-02-25T22:21:44+00:00</updated><id>https://simonwillison.net/2009/Feb/25/williamosy/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://william-os4y.livejournal.com/6485.html"&gt;FAPWS3-0.2 (WSGI server based on libev)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Another strong contender for Python’s answer to Mongrel—3500 requests/s for static files, 43 for a simple dynamic (Django powered) pages and 4.8 for a heavy SQL query—all benchmarked with 300 concurrent requests.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fapws"&gt;fapws&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mongrel"&gt;mongrel&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webservers"&gt;webservers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="fapws"/><category term="mongrel"/><category term="python"/><category term="webservers"/><category term="wsgi"/></entry></feed>