annotate xml/en/docs/beginners_guide.xml @ 936:99f8165723ca

Beginner's guide.
author Ruslan Ermilov <ru@nginx.com>
date Tue, 25 Jun 2013 10:39:32 +0400
parents
children 8acfa16dd6ef
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
99f8165723ca Beginner's guide.
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
344 include own <literal>root</literal> directive.
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>