Nginx – webserver bez vláken

21.09.2009, 21:47
Tagy: Web

Nginx je malý HTTP server, který dokáže snadno obsloužit velké množství příchozích požadavků a paralelních spojení. Pro jednotlivé požadavky nevytváří nová vlákna, vše obsluhuje v jednom pracovním vlákně (event polling). Vlákna podporuje také, ale ty slouží hlavně k běhu na více procesorech.

Server se hodí například na servírování statického obsahu, ale ani dynamické stránky přes PHP/Python/Perl nejsou problém. Konfigurační soubory jsou v Debianu uspořádány do adresářů sites-available / sitest-enabled stejně jako u Apache.

Nejčastější nasazení Nginx je jako reverzní proxy server před Apache. Původní domény můžeme přesměrovat zpět do Apache (běžícím na portu 8001), nové nakonfigurovat již přímo pomocí Nginx.

server {
    listen 80;
    server_name  *.example.com *.neco.cz;

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect false;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:8001;
    }
}

Direktiva server_name může obsahovat více domén a také masky. Doména z HTTP požadavku je pak uložena v proměnné $http_host.

Zajímavou konfigurací je Tornado web server bežící za Nginx. Tornado je HTTP server a framework pro vytváření dynamických webových aplikací v Pythonu. Obsahuje všechny důležité komponenty, a co chybí v Tornadu, najdeme jistě jako nezávislý modul pro Python. Za projektem stojí Facebook (překvapil :). Stejně jako Nginx používá i Tornado event polling a sám běží jako plnohodnotný web server, takže opět stačí proxy.

server {
    listen 80;
    server_name example.com www.example.com;

    # remove www
    if ($host ~* www\.(.*)) {
        set $host_without_www $1;
        rewrite ^(.*)$ http://$host_without_www$1 permanent;
    }

    location ^~ /static/ {
        root /var/www/example;
        if ($query_string) {
            expires max;
        }
    }
    location = /favicon.ico {
        rewrite (.*) /static/favicon.ico;
    }
    location = /robots.txt {
        rewrite (.*) /static/robots.txt;
    }

    access_log  /var/log/nginx/dungame.access.log;

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect false;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:8082;
    }
}

V této konfigurací také vidíme jak přepsat adresu s www na adresu bez. Syntaxe přepisování adres v Nginx je docela povedená – přehledná a konzistentní.

Jak zprovoznit PHP přes FastCGI si již snadno najdete na internetu.

Závěrem dodám, že na dedikovaném serveru může Nginx bez problému nahradit Apache. Horší je to s webhostingy, kde je vyžadována uživatelská konfigurace v .htaccess (mod_rewrite apod.). V této oblasti bude jistě nadále neohroženě vládnout Apache :-)

Komentáře

Zobrazení: prosté / vlákna
Díky, uvítal bych více info o nasazení jako reverzní proxy... :)
05.02.2010, 15:19 | Link | Odpovědět
Přidat komentář
Odpovídáte na komentář .
Vaše stránka. Nepovinné.
**tučné** //skloňené// ''kód''
* seznam pol. 1
* seznam pol. 2
  * vnořený seznam
# číslovaný seznam
{{{
předformátovaný text
}}}
[[http://devl.cz link]]