annotate xml/en/docs/http/request_processing.xml @ 2769:16f6fa718be2

Updated TLSv1.3 support notes. Previous notes described some early development snapshot of OpenSSL 1.1.1 with disabled TLSv1.3 by default. It was then enabled in the first alpha. Further, the updated text covers later major releases such as OpenSSL 3.0.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 30 Sep 2021 16:29:20 +0300
parents 130fad6dc1b4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
580
be54c443235a Added copyright markers to documentation sources.
Ruslan Ermilov <ru@nginx.com>
parents: 521
diff changeset
1 <!--
be54c443235a Added copyright markers to documentation sources.
Ruslan Ermilov <ru@nginx.com>
parents: 521
diff changeset
2 Copyright (C) Igor Sysoev
be54c443235a Added copyright markers to documentation sources.
Ruslan Ermilov <ru@nginx.com>
parents: 521
diff changeset
3 Copyright (C) Nginx, Inc.
be54c443235a Added copyright markers to documentation sources.
Ruslan Ermilov <ru@nginx.com>
parents: 521
diff changeset
4 -->
be54c443235a Added copyright markers to documentation sources.
Ruslan Ermilov <ru@nginx.com>
parents: 521
diff changeset
5
50
9d544687d02c Fixed DOCTYPE declaration.
Ruslan Ermilov <ru@nginx.com>
parents: 0
diff changeset
6 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
7
123
7db449e89e92 Unified the use of the "name" attribute instead of "title".
Ruslan Ermilov <ru@nginx.com>
parents: 121
diff changeset
8 <article name="How nginx processes a request"
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
9 link="/en/docs/http/request_processing.html"
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
10 lang="en"
589
764fbac1b8b4 Added document revision.
Ruslan Ermilov <ru@nginx.com>
parents: 580
diff changeset
11 rev="1"
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
12 author="Igor Sysoev"
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
13 editor="Brian Mercer">
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
14
121
49443032011c Unified <section> syntax for "article" and "module" documents.
Ruslan Ermilov <ru@nginx.com>
parents: 74
diff changeset
15 <section name="Name-based virtual servers">
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
16
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
17 <para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
18 nginx first decides which <i>server</i> should process the request.
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
19 Let’s start with a simple configuration
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
20 where all three virtual servers listen on port *:80:
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
21 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
22 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
23 listen 80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
24 server_name example.org www.example.org;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
25 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
26 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
27
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
28 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
29 listen 80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
30 server_name example.net www.example.net;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
31 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
32 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
33
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
34 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
35 listen 80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
36 server_name example.com www.example.com;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
37 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
38 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
39 </programlisting>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
40
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
41 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
42
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
43 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
44 In this configuration nginx tests only the request’s header field
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
45 <header>Host</header> to determine which server the request should be routed to.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
46 If its value does not match any server name,
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
47 or the request does not contain this header field at all,
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
48 then nginx will route the request to the default server for this port.
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
49 In the configuration above, the default server is the first
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
50 one&mdash;which is nginx’s standard default behaviour.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
51 It can also be set explicitly which server should be default,
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
52 with the <literal>default_server</literal> parameter
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
53 in the <link doc="ngx_http_core_module.xml" id="listen"/> directive:
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
54 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
55 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
56 listen 80 <b>default_server</b>;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
57 server_name example.net www.example.net;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
58 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
59 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
60 </programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
61
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
62 <note>
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
63 The <literal>default_server</literal> parameter has been available since
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
64 version 0.8.21.
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
65 In earlier versions the <literal>default</literal> parameter should be used
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
66 instead.
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
67 </note>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
68 Note that the default server is a property of the listen port
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
69 and not of the server name.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
70 More about this later.
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
71 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
72
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
73 </section>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
74
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
75
121
49443032011c Unified <section> syntax for "article" and "module" documents.
Ruslan Ermilov <ru@nginx.com>
parents: 74
diff changeset
76 <section id="how_to_prevent_undefined_server_names"
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
77 name="How to prevent processing requests with undefined server names">
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
78
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
79 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
80 If requests without the <header>Host</header> header field should not be
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
81 allowed, a server that just drops the requests can be defined:
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
82 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
83 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
84 listen 80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
85 server_name "";
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
86 return 444;
73
6327603448e2 Updated the "How to prevent processing requests with undefined server names"
Ruslan Ermilov <ru@nginx.com>
parents: 50
diff changeset
87 }
6327603448e2 Updated the "How to prevent processing requests with undefined server names"
Ruslan Ermilov <ru@nginx.com>
parents: 50
diff changeset
88 </programlisting>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
89 Here, the server name is set to an empty string that will match
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
90 requests without the <header>Host</header> header field,
73
6327603448e2 Updated the "How to prevent processing requests with undefined server names"
Ruslan Ermilov <ru@nginx.com>
parents: 50
diff changeset
91 and a special nginx’s non-standard code 444
6327603448e2 Updated the "How to prevent processing requests with undefined server names"
Ruslan Ermilov <ru@nginx.com>
parents: 50
diff changeset
92 is returned that closes the connection.
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
93 <note>
73
6327603448e2 Updated the "How to prevent processing requests with undefined server names"
Ruslan Ermilov <ru@nginx.com>
parents: 50
diff changeset
94 Since version 0.8.48, this is the default setting for the
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
95 server name, so the <literal>server_name ""</literal> can be omitted.
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
96 In earlier versions, the machine’s <i>hostname</i> was used as
73
6327603448e2 Updated the "How to prevent processing requests with undefined server names"
Ruslan Ermilov <ru@nginx.com>
parents: 50
diff changeset
97 a default server name.
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
98 </note>
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
99 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
100
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
101 </section>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
102
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
103
121
49443032011c Unified <section> syntax for "article" and "module" documents.
Ruslan Ermilov <ru@nginx.com>
parents: 74
diff changeset
104 <section id="mixed_name_ip_based_servers"
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
105 name="Mixed name-based and IP-based virtual servers">
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
106
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
107 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
108 Let’s look at a more complex configuration
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
109 where some virtual servers listen on different addresses:
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
110 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
111 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
112 listen 192.168.1.1:80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
113 server_name example.org www.example.org;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
114 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
115 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
116
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
117 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
118 listen 192.168.1.1:80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
119 server_name example.net www.example.net;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
120 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
121 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
122
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
123 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
124 listen 192.168.1.2:80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
125 server_name example.com www.example.com;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
126 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
127 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
128 </programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
129 In this configuration, nginx first tests the IP address and port
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
130 of the request against the
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
131 <link doc="ngx_http_core_module.xml" id="listen"/> directives
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
132 of the
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
133 <link doc="ngx_http_core_module.xml" id="server"/> blocks.
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
134 It then tests the <header>Host</header>
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
135 header field of the request against the
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
136 <link doc="ngx_http_core_module.xml" id="server_name"/>
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
137 entries of the
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
138 <link doc="ngx_http_core_module.xml" id="server"/>
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
139 blocks that matched
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
140 the IP address and port.
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
141 If the server name is not found, the request will be processed by
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
142 the default server.
593
130fad6dc1b4 Replaced the uses of "url" element with "literal".
Ruslan Ermilov <ru@nginx.com>
parents: 589
diff changeset
143 For example, a request for <literal>www.example.com</literal> received on
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
144 the 192.168.1.1:80 port will be handled by the default server
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
145 of the 192.168.1.1:80 port, i.e., by the first server,
593
130fad6dc1b4 Replaced the uses of "url" element with "literal".
Ruslan Ermilov <ru@nginx.com>
parents: 589
diff changeset
146 since there is no <literal>www.example.com</literal> defined for this port.
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
147 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
148
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
149 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
150 As already stated, a default server is a property of the listen port,
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
151 and different default servers may be defined for different ports:
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
152 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
153 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
154 listen 192.168.1.1:80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
155 server_name example.org www.example.org;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
156 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
157 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
158
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
159 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
160 listen 192.168.1.1:80 <b>default_server</b>;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
161 server_name example.net www.example.net;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
162 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
163 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
164
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
165 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
166 listen 192.168.1.2:80 <b>default_server</b>;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
167 server_name example.com www.example.com;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
168 ...
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
169 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
170 </programlisting>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
171
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
172 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
173
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
174 </section>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
175
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
176
121
49443032011c Unified <section> syntax for "article" and "module" documents.
Ruslan Ermilov <ru@nginx.com>
parents: 74
diff changeset
177 <section id="simple_php_site_configuration"
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
178 name="A simple PHP site configuration">
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
179
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
180 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
181 Now let’s look at how nginx chooses a <i>location</i> to process a request
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
182 for a typical, simple PHP site:
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
183 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
184 server {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
185 listen 80;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
186 server_name example.org www.example.org;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
187 root /data/www;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
188
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
189 location / {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
190 index index.html index.php;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
191 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
192
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
193 location ~* \.(gif|jpg|png)$ {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
194 expires 30d;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
195 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
196
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
197 location ~ \.php$ {
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
198 fastcgi_pass localhost:9000;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
199 fastcgi_param SCRIPT_FILENAME
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
200 $document_root$fastcgi_script_name;
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
201 include fastcgi_params;
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
202 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
203 }
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
204 </programlisting>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
205
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
206 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
207
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
208 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
209 nginx first searches for the most specific prefix location given by
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
210 literal strings regardless of the listed order.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
211 In the configuration above
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
212 the only prefix location is “<literal>/</literal>” and since it matches
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
213 any request it will be used as a last resort.
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
214 Then nginx checks locations given by
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
215 regular expression in the order listed in the configuration file.
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
216 The first matching expression stops the search and nginx will use this
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
217 location.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
218 If no regular expression matches a request, then nginx uses
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
219 the most specific prefix location found earlier.
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
220 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
221
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
222 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
223 Note that locations of all types test only a URI part of request line
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
224 without arguments.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
225 This is done because arguments in the query string may be given in
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
226 several ways, for example:
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
227 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
228 /index.php?user=john&amp;page=1
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
229 /index.php?page=1&amp;user=john
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
230 </programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
231 Besides, anyone may request anything in the query string:
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
232 <programlisting>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
233 /index.php?page=1&amp;something+else&amp;user=john
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
234 </programlisting>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
235
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
236 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
237
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
238 <para>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
239 Now let’s look at how requests would be processed
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
240 in the configuration above:
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
241 <list type="bullet" compact="no">
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
242
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
243 <listitem>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
244 A request “<literal>/logo.gif</literal>” is matched by the prefix location
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
245 “<literal>/</literal>” first and then by the regular expression
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
246 “<literal>\.(gif|jpg|png)$</literal>”,
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
247 therefore, it is handled by the latter location.
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
248 Using the directive “<literal>root&nbsp;/data/www</literal>” the request
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
249 is mapped to the file <path>/data/www/logo.gif</path>, and the file
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
250 is sent to the client.
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
251 </listitem>
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
252
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
253 <listitem>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
254 A request “<literal>/index.php</literal>” is also matched by the prefix location
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
255 “<literal>/</literal>” first and then by the regular expression
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
256 “<literal>\.(php)$</literal>”.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
257 Therefore, it is handled by the latter location
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
258 and the request is passed to a FastCGI server listening on localhost:9000.
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
259 The
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
260 <link doc="ngx_http_fastcgi_module.xml" id="fastcgi_param"/>
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
261 directive sets the FastCGI parameter
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
262 <literal>SCRIPT_FILENAME</literal> to “<literal>/data/www/index.php</literal>”,
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
263 and the FastCGI server executes the file.
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
264 The variable <var>$document_root</var> is equal to
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
265 the value of the
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
266 <link doc="ngx_http_core_module.xml" id="root"/>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
267 directive and the variable <var>$fastcgi_script_name</var> is equal to
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
268 the request URI, i.e. “<literal>/index.php</literal>”.
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
269 </listitem>
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
270
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
271 <listitem>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
272 A request “<literal>/about.html</literal>” is matched by the prefix location
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
273 “<literal>/</literal>” only, therefore, it is handled in this location.
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
274 Using the directive “<literal>root /data/www</literal>” the request is mapped
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
275 to the file <path>/data/www/about.html</path>, and the file is sent
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
276 to the client.
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
277 </listitem>
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
278
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
279 <listitem>
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
280 Handling a request “<literal>/</literal>” is more complex.
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
281 It is matched by the prefix location “<literal>/</literal>” only,
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
282 therefore, it is handled by this location.
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
283 Then the
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
284 <link doc="ngx_http_index_module.xml" id="index"/>
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
285 directive tests for the existence
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
286 of index files according to its parameters and
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
287 the “<literal>root /data/www</literal>” directive.
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
288 If the file <path>/data/www/index.html</path> does not exist,
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
289 and the file <path>/data/www/index.php</path> exists,
271
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
290 then the directive does an internal redirect to “<literal>/index.php</literal>”,
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
291 and nginx searches the locations again
4c6d2c614d2c Cleaned up XML tag mess:
Ruslan Ermilov <ru@nginx.com>
parents: 148
diff changeset
292 as if the request had been sent by a client.
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
293 As we saw before, the redirected request will eventually be handled
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
294 by the FastCGI server.
461
6135f3c95bf6 Unified markup for lists.
Ruslan Ermilov <ru@nginx.com>
parents: 271
diff changeset
295 </listitem>
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
296
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
297 </list>
521
3481a91d46ab Minor revision in preparation for translation.
Ruslan Ermilov <ru@nginx.com>
parents: 490
diff changeset
298
0
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
299 </para>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
300
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
301 </section>
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
302
61e04fc01027 Initial import of the nginx.org website.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
303 </article>