annotate xml/en/docs/beginners_guide.xml @ 2846:fdf1464e1977

Moved banner to the external file to make partial rollout possible. An idea is to have several banners and show them with different probability specified by split directive in the nginx.conf
author Sergey Budnevitch <sb@waeme.net>
date Tue, 10 May 2022 18:07:27 +0400
parents 8acfa16dd6ef
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
936
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
1 <!--
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
2 Copyright (C) Nginx, Inc.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
3 -->
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
4
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
5 <!DOCTYPE article SYSTEM "../../../dtd/article.dtd">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
6
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
7 <article name="Beginner’s Guide"
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
8 link="/en/docs/beginners_guide.html"
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
9 lang="en"
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
10 rev="1">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
11
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
12 <section>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
13
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
14 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
15 This guide gives a basic introduction to nginx and describes some
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
16 simple tasks that can be done with it.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
17 It is supposed that nginx is already installed on the reader’s machine.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
18 If it is not, see the <link doc="install.xml"/> page.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
19 This guide describes how to start and stop nginx, and reload its
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
20 configuration, explains the structure
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
21 of the configuration file and describes how to set up nginx
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
22 to serve out static content, how to configure nginx as a proxy
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
23 server, and how to connect it with a FastCGI application.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
24 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
25
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
26 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
27 nginx has one master process and several worker processes.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
28 The main purpose of the master process is to read and evaluate configuration,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
29 and maintain worker processes.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
30 Worker processes do actual processing of requests.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
31 nginx employs event-based model and OS-dependent mechanisms to efficiently
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
32 distribute requests among worker processes.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
33 The number of worker processes is defined in the configuration file and
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
34 may be fixed for a given configuration or automatically adjusted to the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
35 number of available CPU cores (see
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
36 <link doc="ngx_core_module.xml" id="worker_processes"/>).
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
37 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
38
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
39 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
40 The way nginx and its modules work is determined in the configuration file.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
41 By default, the configuration file is named <path>nginx.conf</path>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
42 and placed in the directory
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
43 <path>/usr/local/nginx/conf</path>,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
44 <path>/etc/nginx</path>, or
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
45 <path>/usr/local/etc/nginx</path>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
46 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
47
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
48 </section>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
49
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
50
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
51 <section id="control" name="Starting, Stopping, and Reloading Configuration">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
52
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
53 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
54 To start nginx, run the executable file.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
55 Once nginx is started, it can be controlled by invoking the executable
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
56 with the <literal>-s</literal> parameter.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
57 Use the following syntax:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
58 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
59 nginx -s <i>signal</i>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
60 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
61 Where <i>signal</i> may be one of the following:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
62 <list type="bullet">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
63 <listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
64 <literal>stop</literal>&mdash;fast shutdown
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
65 </listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
66 <listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
67 <literal>quit</literal>&mdash;graceful shutdown
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
68 </listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
69 <listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
70 <literal>reload</literal>&mdash;reloading the configuration file
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
71 </listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
72 <listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
73 <literal>reopen</literal>&mdash;reopening the log files
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
74 </listitem>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
75 </list>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
76 For example, to stop nginx processes with waiting for the worker processes
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
77 to finish serving current requests, the following command can be executed:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
78 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
79 nginx -s quit
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
80 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
81 <note>This command should be executed under the same user that
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
82 started nginx.</note>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
83 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
84
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
85 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
86 Changes made in the configuration file
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
87 will not be applied until the command to reload configuration is
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
88 sent to nginx or it is restarted.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
89 To reload configuration, execute:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
90 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
91 nginx -s reload
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
92 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
93 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
94
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
95 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
96 Once the master process receives the signal to reload configuration,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
97 it checks the syntax validity
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
98 of the new configuration file and tries to apply the configuration provided
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
99 in it.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
100 If this is a success, the master process starts new worker processes
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
101 and sends messages to old worker processes, requesting them to
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
102 shut down.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
103 Otherwise, the master process rolls back the changes and
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
104 continues to work with the old configuration.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
105 Old worker processes, receiving a command to shut down,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
106 stop accepting new connections and continue to service current requests until
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
107 all such requests are serviced.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
108 After that, the old worker processes exit.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
109 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
110
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
111 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
112 A signal may also be sent to nginx processes with the help of Unix tools
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
113 such as the <command>kill</command> utility.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
114 In this case a signal is sent directly to a process with a given process ID.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
115 The process ID of the nginx master process is written, by default, to the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
116 <path>nginx.pid</path> in the directory
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
117 <path>/usr/local/nginx/logs</path> or
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
118 <path>/var/run</path>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
119 For example, if the master process ID is 1628, to send the QUIT signal
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
120 resulting in nginx’s graceful shutdown, execute:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
121 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
122 kill -s QUIT 1628
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
123 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
124 For getting the list of all running nginx processes, the <command>ps</command>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
125 utility may be used, for example, in the following way:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
126 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
127 ps -ax | grep nginx
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
128 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
129 For more information on sending signals to nginx, see
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
130 <link doc="control.xml"/>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
131 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
132
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
133 </section>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
134
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
135
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
136 <section id="conf_structure" name="Configuration File’s Structure">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
137
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
138 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
139 nginx consists of modules which are controlled by directives specified
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
140 in the configuration file.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
141 Directives are divided into simple directives and block directives.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
142 A simple directive consists of the name and parameters separated by spaces
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
143 and ends with a semicolon (<literal>;</literal>).
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
144 A block directive has the same structure as a simple directive, but
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
145 instead of the semicolon it ends with a set of additional instructions
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
146 surrounded by braces (<literal>{</literal> and <literal>}</literal>).
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
147 If a block directive can have other directives inside braces,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
148 it is called a context (examples:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
149 <link doc="ngx_core_module.xml" id="events"/>,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
150 <link doc="http/ngx_http_core_module.xml" id="http"/>,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
151 <link doc="http/ngx_http_core_module.xml" id="server"/>,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
152 and
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
153 <link doc="http/ngx_http_core_module.xml" id="location"/>).
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
154 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
155
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
156 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
157 Directives placed in the configuration file outside
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
158 of any contexts are considered to be in the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
159 <link doc="ngx_core_module.xml">main</link> context.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
160 The <literal>events</literal> and <literal>http</literal> directives
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
161 reside in the <literal>main</literal> context, <literal>server</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
162 in <literal>http</literal>, and <literal>location</literal> in
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
163 <literal>server</literal>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
164 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
165
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
166 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
167 The rest of a line after the <literal>#</literal> sign is considered a comment.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
168 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
169
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
170 </section>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
171
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
172
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
173 <section id="static" name="Serving Static Content">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
174
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
175 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
176 An important web server task is serving out
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
177 files (such as images or static HTML pages).
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
178 You will implement an example where, depending on the request,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
179 files will be served from different local directories: <path>/data/www</path>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
180 (which may contain HTML files) and <path>/data/images</path>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
181 (containing images).
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
182 This will require editing of the configuration file and setting up of a
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
183 <link doc="http/ngx_http_core_module.xml" id="server"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
184 block inside the <link doc="http/ngx_http_core_module.xml" id="http"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
185 block with two <link doc="http/ngx_http_core_module.xml" id="location"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
186 blocks.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
187 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
188
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
189 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
190 First, create the <path>/data/www</path> directory and put an
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
191 <path>index.html</path> file with any text content into it and
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
192 create the <path>/data/images</path> directory and place some
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
193 images in it.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
194 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
195
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
196 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
197 Next, open the configuration file.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
198 The default configuration file already includes several examples of
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
199 the <literal>server</literal> block, mostly commented out.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
200 For now comment out all such blocks and start a new
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
201 <literal>server</literal> block:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
202 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
203 http {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
204 server {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
205 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
206 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
207 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
208 Generally, the configuration file may include several
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
209 <literal>server</literal> blocks
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
210 <link doc="http/request_processing.xml">distinguished</link> by ports on which
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
211 they <link doc="http/ngx_http_core_module.xml" id="listen">listen</link> to
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
212 and by
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
213 <link doc="http/server_names.xml">server names</link>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
214 Once nginx decides which <literal>server</literal> processes a request,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
215 it tests the URI specified in the request’s header against the parameters of the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
216 <literal>location</literal> directives defined inside the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
217 <literal>server</literal> block.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
218 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
219
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
220 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
221 Add the following <literal>location</literal> block to the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
222 <literal>server</literal> block:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
223 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
224 location / {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
225 root /data/www;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
226 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
227 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
228 This <literal>location</literal> block specifies the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
229 “<path>/</path>” prefix compared with the URI from the request.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
230 For matching requests, the URI will be added to the path specified in the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
231 <link doc="http/ngx_http_core_module.xml" id="root"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
232 directive, that is, to <path>/data/www</path>,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
233 to form the path to the requested file on the local file system.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
234 If there are several matching <literal>location</literal> blocks nginx
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
235 selects the one with the longest prefix.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
236 The <literal>location</literal> block above provides the shortest
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
237 prefix, of length one,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
238 and so only if all other <literal>location</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
239 blocks fail to provide a match, this block will be used.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
240 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
241
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
242 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
243 Next, add the second <literal>location</literal> block:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
244 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
245 location /images/ {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
246 root /data;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
247 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
248 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
249 It will be a match for requests starting with <literal>/images/</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
250 (<literal>location /</literal> also matches such requests,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
251 but has shorter prefix).
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
252 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
253
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
254 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
255 The resulting configuration of the <literal>server</literal> block should
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
256 look like this:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
257 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
258 server {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
259 location / {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
260 root /data/www;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
261 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
262
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
263 location /images/ {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
264 root /data;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
265 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
266 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
267 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
268 This is already a working configuration of a server that listens
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
269 on the standard port 80 and is accessible on the local machine at
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
270 <literal>http://localhost/</literal>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
271 In response to requests with URIs starting with <literal>/images/</literal>,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
272 the server will send files from the <path>/data/images</path> directory.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
273 For example, in response to the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
274 <literal>http://localhost/images/example.png</literal> request nginx will
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
275 send the <path>/data/images/example.png</path> file.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
276 If such file does not exist, nginx will send a response
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
277 indicating the 404 error.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
278 Requests with URIs not starting with <literal>/images/</literal> will be
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
279 mapped onto the <path>/data/www</path> directory.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
280 For example, in response to the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
281 <literal>http://localhost/some/example.html</literal> request nginx will
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
282 send the <path>/data/www/some/example.html</path> file.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
283 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
284
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
285 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
286 To apply the new configuration, start nginx if it is not yet started or
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
287 send the <literal>reload</literal> signal to the nginx’s master process,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
288 by executing:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
289 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
290 nginx -s reload
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
291 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
292 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
293
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
294 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
295 <note>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
296 In case something does not work as expected, you may try to find out
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
297 the reason in <path>access.log</path> and
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
298 <path>error.log</path> files in the directory
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
299 <path>/usr/local/nginx/logs</path> or
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
300 <path>/var/log/nginx</path>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
301 </note>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
302 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
303
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
304 </section>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
305
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
306
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
307 <section id="proxy" name="Setting Up a Simple Proxy Server">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
308
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
309 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
310 One of the frequent uses of nginx is setting it up as a proxy server, which
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
311 means a server that receives requests, passes them to the proxied servers,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
312 retrieves responses from them, and sends them to the clients.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
313 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
314
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
315 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
316 We will configure a basic proxy server, which serves requests of
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
317 images with files from the local directory and sends all other requests to a
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
318 proxied server.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
319 In this example, both servers will be defined on a single nginx instance.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
320 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
321
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
322 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
323 First, define the proxied server by adding one more <literal>server</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
324 block to the nginx’s configuration file with the following contents:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
325 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
326 server {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
327 listen 8080;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
328 root /data/up1;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
329
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
330 location / {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
331 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
332 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
333 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
334 This will be a simple server that listens on the port 8080
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
335 (previously, the <literal>listen</literal> directive has not been specified
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
336 since the standard port 80 was used) and maps
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
337 all requests to the <path>/data/up1</path> directory on the local
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
338 file system.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
339 Create this directory and put the <path>index.html</path> file into it.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
340 Note that the <literal>root</literal> directive is placed in the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
341 <literal>server</literal> context.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
342 Such <literal>root</literal> directive is used when the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
343 <literal>location</literal> block selected for serving a request does not
2782
8acfa16dd6ef Minor language correction in Beginner's Guide (trac #2256).
Yaroslav Zhuravlev <yar@nginx.com>
parents: 936
diff changeset
344 include its own <literal>root</literal> directive.
936
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
345 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
346
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
347 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
348 Next, use the server configuration from the previous section
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
349 and modify it to make it a proxy server configuration.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
350 In the first <literal>location</literal> block, put the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
351 <link doc="http/ngx_http_proxy_module.xml" id="proxy_pass"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
352 directive with the protocol, name and port of the proxied server specified
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
353 in the parameter (in our case, it is <literal>http://localhost:8080</literal>):
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
354 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
355 server {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
356 location / {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
357 proxy_pass http://localhost:8080;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
358 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
359
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
360 location /images/ {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
361 root /data;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
362 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
363 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
364 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
365 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
366
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
367 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
368 We will modify the second <literal>location</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
369 block, which currently maps requests with the <literal>/images/</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
370 prefix to the files under the <path>/data/images</path> directory,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
371 to make it match the requests of images with typical file extensions.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
372 The modified <literal>location</literal> block looks like this:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
373 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
374 location ~ \.(gif|jpg|png)$ {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
375 root /data/images;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
376 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
377 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
378 The parameter is a regular expression matching all URIs ending
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
379 with <path>.gif</path>, <path>.jpg</path>, or <path>.png</path>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
380 A regular expression should be preceded with <literal>~</literal>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
381 The corresponding requests will be mapped to the <path>/data/images</path>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
382 directory.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
383 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
384
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
385 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
386 When nginx selects a <literal>location</literal> block to serve a request
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
387 it first checks <link doc="http/ngx_http_core_module.xml" id="location"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
388 directives that specify prefixes, remembering <literal>location</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
389 with the longest prefix, and then checks regular expressions.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
390 If there is a match with a regular expression, nginx picks this
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
391 <literal>location</literal> or, otherwise, it picks the one remembered earlier.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
392 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
393
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
394 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
395 The resulting configuration of a proxy server will look like this:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
396 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
397 server {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
398 location / {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
399 proxy_pass http://localhost:8080/;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
400 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
401
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
402 location ~ \.(gif|jpg|png)$ {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
403 root /data/images;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
404 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
405 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
406 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
407 This server will filter requests ending with <path>.gif</path>,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
408 <path>.jpg</path>, or <path>.png</path>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
409 and map them to the <path>/data/images</path> directory (by adding URI to the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
410 <literal>root</literal> directive’s parameter) and pass all other requests
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
411 to the proxied server configured above.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
412 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
413
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
414 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
415 To apply new configuration, send the <literal>reload</literal> signal to
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
416 nginx as described in the previous sections.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
417 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
418
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
419 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
420 There are many <link doc="http/ngx_http_proxy_module.xml">more</link>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
421 directives that may be used to further configure a proxy connection.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
422 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
423
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
424 </section>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
425
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
426
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
427 <section id="fastcgi" name="Setting Up FastCGI Proxying">
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
428
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
429 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
430 nginx can be used to route requests to FastCGI servers which run
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
431 applications built with various frameworks and programming languages
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
432 such as PHP.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
433 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
434
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
435 <para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
436 The most basic nginx configuration to work with a FastCGI server
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
437 includes using the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
438 <link doc="http/ngx_http_fastcgi_module.xml" id="fastcgi_pass"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
439 directive instead of the <literal>proxy_pass</literal> directive,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
440 and <link doc="http/ngx_http_fastcgi_module.xml" id="fastcgi_param"/>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
441 directives to set parameters passed to a FastCGI server.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
442 Suppose the FastCGI server is accessible on <literal>localhost:9000</literal>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
443 Taking the proxy configuration from the previous section as a basis,
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
444 replace the <literal>proxy_pass</literal> directive with the
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
445 <literal>fastcgi_pass</literal> directive and change the parameter to
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
446 <literal>localhost:9000</literal>.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
447 In PHP, the <literal>SCRIPT_FILENAME</literal> parameter is used for
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
448 determining the script name, and the <literal>QUERY_STRING</literal>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
449 parameter is used to pass request parameters.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
450 The resulting configuration would be:
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
451 <programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
452 server {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
453 location / {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
454 fastcgi_pass localhost:9000;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
455 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
456 fastcgi_param QUERY_STRING $query_string;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
457 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
458
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
459 location ~ \.(gif|jpg|png)$ {
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
460 root /data/images;
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
461 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
462 }
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
463 </programlisting>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
464 This will set up a server that will route all requests except for
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
465 requests for static images to the proxied server operating on
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
466 <literal>localhost:9000</literal> through the FastCGI protocol.
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
467 </para>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
468
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
469 </section>
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
470
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
471 </article>