view xml/en/index.xml @ 3033:e3116677300f

Updated with Netcraft January 2024 Web Server Survey stats.
author Yaroslav Zhuravlev <yar@nginx.com>
date Tue, 23 Jan 2024 13:00:29 +0000
parents cd1d5312e47c
children 2be49a02a2e3
line wrap: on
line source

<!--
  Copyright (C) Igor Sysoev
  Copyright (C) Nginx, Inc.
  -->

<!DOCTYPE article SYSTEM "../../dtd/article.dtd">

<article name="nginx"
         link="/en/"
         lang="en"
         rev="162">


<section>

<para>
nginx [engine x] is an HTTP and reverse proxy server,
a mail proxy server,
and a generic TCP/UDP proxy server,
originally written by <link url="http://sysoev.ru/en/">Igor Sysoev</link>.
For a long time, it has been running
on many heavily loaded Russian sites including
<link url="http://www.yandex.ru">Yandex</link>,
<link url="http://mail.ru">Mail.Ru</link>,
<link url="http://vk.com">VK</link>, and
<link url="http://www.rambler.ru">Rambler</link>.
According to Netcraft, nginx served or proxied
<link url="https://www.netcraft.com/blog/january-2024-web-server-survey/">20.71%
busiest sites in January 2024</link>.
Here are some of the success stories:
<link url="https://blogs.dropbox.com/tech/2017/09/optimizing-web-servers-for-high-throughput-and-low-latency/">Dropbox</link>,
<link url="https://openconnect.netflix.com/en/software/">Netflix</link>,
<link url="https://www.nginx.com/case-studies/nginx-wordpress-com/">Wordpress.com</link>,
<link url="http://blog.fastmail.fm/2007/01/04/webimappop-frontend-proxies-changed-to-nginx/">FastMail.FM</link>.
</para>

<para>
The sources and documentation are distributed under the
<link url="../LICENSE">2-clause BSD-like license</link>.
</para>

<para>
Commercial support is available from
<link url="https://www.nginx.com">Nginx, Inc.</link>
</para>

</section>


<section id="basic_http_features"
        name="Basic HTTP server features">

<para>
<list type="bullet">

<listitem>
Serving static and
<link doc="docs/http/ngx_http_index_module.xml">index</link>
files,
<link doc="docs/http/ngx_http_autoindex_module.xml">autoindexing</link>;
<link doc="docs/http/ngx_http_core_module.xml"
       id="open_file_cache">open file descriptor cache</link>;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_proxy_module.xml">Accelerated
reverse proxying with caching</link>;
<link doc="docs/http/ngx_http_upstream_module.xml">load balancing
and fault tolerance</link>;
</listitem>

<listitem>
Accelerated support with caching of
<link doc="docs/http/ngx_http_fastcgi_module.xml">FastCGI</link>,
<link doc="docs/http/ngx_http_uwsgi_module.xml">uwsgi</link>,
<link doc="docs/http/ngx_http_scgi_module.xml">SCGI</link>, and
<link doc="docs/http/ngx_http_memcached_module.xml">memcached</link>
servers;
<link doc="docs/http/ngx_http_upstream_module.xml">load balancing
and fault tolerance</link>;
</listitem>

<listitem>
Modular architecture.
Filters include
<link doc="docs/http/ngx_http_gzip_module.xml">gzipping</link>,
byte ranges, chunked responses,
<link doc="docs/http/ngx_http_xslt_module.xml">XSLT</link>,
<link doc="docs/http/ngx_http_ssi_module.xml">SSI</link>,
and <link doc="docs/http/ngx_http_image_filter_module.xml">image
transformation</link> filter.
Multiple SSI inclusions within a single page can be processed in
parallel if they are handled by proxied or FastCGI/uwsgi/SCGI servers;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_ssl_module.xml">SSL and
TLS SNI support</link>;
</listitem>

<listitem>
Support for <link doc="docs/http/ngx_http_v2_module.xml">HTTP/2</link>
with weighted and dependency-based prioritization;
</listitem>

<listitem>
Support for <link doc="docs/http/ngx_http_v3_module.xml">HTTP/3</link>.
</listitem>

</list>
</para>

</section>


<section id="other_http_features"
        name="Other HTTP server features">

<para>
<list type="bullet">

<listitem>
Name-based and IP-based
<link doc="docs/http/request_processing.xml">virtual servers</link>;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_core_module.xml"
       id="keepalive_timeout">Keep-alive</link>
and pipelined connections support;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_log_module.xml" id="log_format">Access
log formats</link>,
<link doc="docs/http/ngx_http_log_module.xml" id="access_log">buffered
log writing</link>,
<link doc="docs/control.xml" id="logs">fast log rotation</link>, and
<link doc="docs/syslog.xml">syslog logging</link>;
</listitem>

<listitem>
3xx-5xx error codes
<link doc="docs/http/ngx_http_core_module.xml"
       id="error_page">redirection</link>;
</listitem>

<listitem>
The rewrite module:
<link doc="docs/http/ngx_http_rewrite_module.xml">URI changing
using regular expressions</link>;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_rewrite_module.xml" id="if">Executing
different functions</link> depending on the
<link doc="docs/http/ngx_http_geo_module.xml">client address</link>;
</listitem>

<listitem>
Access control based on
<link doc="docs/http/ngx_http_access_module.xml">client IP address</link>,
<link doc="docs/http/ngx_http_auth_basic_module.xml">by password (HTTP
Basic authentication)</link> and by the
<link doc="docs/http/ngx_http_auth_request_module.xml">result of
subrequest</link>;
</listitem>

<listitem>
Validation of
<link doc="docs/http/ngx_http_referer_module.xml">HTTP referer</link>;
</listitem>

<listitem>
The <link doc="docs/http/ngx_http_dav_module.xml">PUT, DELETE, MKCOL, COPY,
and MOVE</link> methods;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_flv_module.xml">FLV</link>
and
<link doc="docs/http/ngx_http_mp4_module.xml">MP4</link>
streaming;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_core_module.xml"
       id="limit_rate">Response rate limiting</link>;
</listitem>

<listitem>
Limiting the number of simultaneous
<link doc="docs/http/ngx_http_limit_conn_module.xml">connections</link>
or
<link doc="docs/http/ngx_http_limit_req_module.xml">requests</link>
coming from one address;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_geoip_module.xml">IP-based geolocation</link>;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_split_clients_module.xml">A/B testing</link>;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_mirror_module.xml">Request mirroring</link>;
</listitem>

<listitem>
Embedded <link doc="docs/http/ngx_http_perl_module.xml">Perl</link>;
</listitem>

<listitem>
<link doc="docs/njs/index.xml">njs</link> scripting language.
</listitem>

</list>
</para>

</section>


<section id="mail_proxy_server_features"
        name="Mail proxy server features">

<para>
<list type="bullet">

<listitem>
User redirection to
<link doc="docs/mail/ngx_mail_imap_module.xml">IMAP</link>
or
<link doc="docs/mail/ngx_mail_pop3_module.xml">POP3</link>
server using an external HTTP
<link doc="docs/mail/ngx_mail_auth_http_module.xml">authentication</link>
server;
</listitem>

<listitem>
User authentication using an external HTTP
<link doc="docs/mail/ngx_mail_auth_http_module.xml">authentication</link>
server and connection redirection to an internal
<link doc="docs/mail/ngx_mail_smtp_module.xml">SMTP</link> server;
</listitem>

<listitem>
Authentication methods:

<list type="bullet">

<listitem>
<link doc="docs/mail/ngx_mail_pop3_module.xml" id="pop3_auth">POP3</link>:
USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
</listitem>

<listitem>
<link doc="docs/mail/ngx_mail_imap_module.xml" id="imap_auth">IMAP</link>:
LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
</listitem>

<listitem>
<link doc="docs/mail/ngx_mail_smtp_module.xml" id="smtp_auth">SMTP</link>:
AUTH LOGIN/PLAIN/CRAM-MD5;
</listitem>

</list>
</listitem>

<listitem>
<link doc="docs/mail/ngx_mail_ssl_module.xml">SSL</link> support;
</listitem>

<listitem>
<link doc="docs/mail/ngx_mail_ssl_module.xml" id="starttls">STARTTLS
and STLS</link> support.
</listitem>

</list>
</para>

</section>


<section id="generic_proxy_server_features"
        name="TCP/UDP proxy server features">

<para>
<list type="bullet">

<listitem>
<link doc="docs/stream/ngx_stream_proxy_module.xml">Generic proxying</link>
of TCP and UDP;
</listitem>

<listitem>
<link doc="docs/stream/ngx_stream_ssl_module.xml">SSL</link> and
TLS <link doc="docs/stream/ngx_stream_ssl_preread_module.xml">SNI</link> support
for TCP;
</listitem>

<listitem>
<link doc="docs/stream/ngx_stream_upstream_module.xml">Load balancing
and fault tolerance</link>;
</listitem>

<listitem>
Access control based on
<link doc="docs/stream/ngx_stream_access_module.xml">client address</link>;
</listitem>

<listitem>
Executing different functions depending on the
<link doc="docs/stream/ngx_stream_geo_module.xml">client address</link>;
</listitem>

<listitem>
Limiting the number of simultaneous
<link doc="docs/stream/ngx_stream_limit_conn_module.xml">connections</link>
coming from one address;
</listitem>

<listitem>
<link doc="docs/stream/ngx_stream_log_module.xml" id="log_format">Access
log formats</link>,
<link doc="docs/stream/ngx_stream_log_module.xml" id="access_log">buffered
log writing</link>,
<link doc="docs/control.xml" id="logs">fast log rotation</link>, and
<link doc="docs/syslog.xml">syslog logging</link>;
</listitem>

<listitem>
<link doc="docs/stream/ngx_stream_geoip_module.xml">IP-based geolocation</link>;
</listitem>

<listitem>
<link doc="docs/stream/ngx_stream_split_clients_module.xml">A/B testing</link>;
</listitem>

<listitem>
<link doc="docs/njs/index.xml">njs</link> scripting language.
</listitem>

</list>
</para>

</section>


<section id="architecture_and_scalability"
        name="Architecture and scalability">

<para>
<list type="bullet">

<listitem>
One master and several worker processes;
worker processes run under an unprivileged user;
</listitem>

<listitem>
<link doc="docs/example.xml">Flexible configuration</link>;
</listitem>

<listitem>
<link doc="docs/control.xml" id="reconfiguration">Reconfiguration</link>
and <link doc="docs/control.xml" id="upgrade">upgrade of an
executable</link> without interruption of the client servicing;
</listitem>

<listitem>
<link doc="docs/events.xml">Support</link> for
kqueue (FreeBSD 4.1+),
epoll (Linux 2.6+),
/dev/poll (Solaris 7 11/99+), event ports (Solaris 10),
select, and poll;
</listitem>

<listitem>
The support of the various kqueue features including EV_CLEAR, EV_DISABLE
(to temporarily disable events), NOTE_LOWAT, EV_EOF, number of available data,
error codes;
</listitem>

<listitem>
The support of various epoll features including
EPOLLRDHUP (Linux 2.6.17+, glibc 2.8+) and
EPOLLEXCLUSIVE (Linux 4.5+, glibc 2.24+);
</listitem>

<listitem>
sendfile (FreeBSD 3.1+, Linux 2.2+, macOS 10.5+), sendfile64 (Linux 2.4.21+),
and sendfilev (Solaris 8 7/01+) support;
</listitem>

<listitem>
<link doc="docs/http/ngx_http_core_module.xml" id="aio">File AIO</link>
(FreeBSD 4.3+, Linux 2.6.22+);
</listitem>

<listitem>
<link doc="docs/http/ngx_http_core_module.xml" id="directio">DIRECTIO</link>
(FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, macOS);
</listitem>

<listitem>
Accept-filters (FreeBSD 4.1+, NetBSD 5.0+) and TCP_DEFER_ACCEPT (Linux 2.4+)
<link doc="docs/http/ngx_http_core_module.xml" id="listen">support</link>;
</listitem>

<listitem>
10,000 inactive HTTP keep-alive connections take about 2.5M memory;
</listitem>

<listitem>
Data copy operations are kept to a minimum.
</listitem>

</list>
</para>

</section>


<section id="tested_os_and_platforms"
        name="Tested OS and platforms">

<para>
<list type="bullet">

<listitem>
FreeBSD 3&mdash;12 / i386;
FreeBSD 5&mdash;12 / amd64;
FreeBSD 11 / ppc;
FreeBSD 12 / ppc64;
</listitem>

<listitem>
Linux 2.2&mdash;4 / i386;
Linux 2.6&mdash;5 / amd64;
Linux 3&mdash;4 / armv6l, armv7l, aarch64, ppc64le;
Linux 4&mdash;5 / s390x;
</listitem>

<listitem>
Solaris 9 / i386, sun4u;
Solaris 10 / i386, amd64, sun4v;
Solaris 11 / x86;
</listitem>

<listitem>
AIX 7.1 / powerpc;
</listitem>

<listitem>
HP-UX 11.31 / ia64;
</listitem>

<listitem>
macOS / ppc, i386, x86_64;
</listitem>

<listitem>
Windows XP,
Windows Server 2003,
Windows 7,
Windows 10.
</listitem>

</list>
</para>

</section>

</article>