nginx-usage-sample
nginx
nginx can be used as light web server(serve request directly), reverse proxy(http) and proxy server(stream) for Pop3 and IMAP.
nginx as a light static web server
put your website at /var/www/html
1 | http { |
nginx as static content server(file server)
1 | location /images/ { |
root directive
The root directive specifies the root directory that will be used to search for a file. To obtain the path of a requested file, NGINX appends the request URI to the path specified by the root directive. The directive can be placed on any level within the http {}, server {}, or location {} contexts. In the example below, the root directive is defined for a virtual server. It applies to all location {} blocks where the root directive is not included to explicitly redefine the root:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16http {
server {
listen 1.1.1.1;
# only for this server
root /www/data;
location / {
}
location /images/ {
}
location ~ \.(mp3|mp4) {
root /www/media;
}
}Here, NGINX searches for a URI that starts with /images/ in the /www/data/images/ directory in the file system. But if the URI ends with the .mp3 or .mp4 extension, NGINX instead searches for the file in the /www/media/ directory because it is defined in the matching location block.
If a request ends with a slash, NGINX treats it as a request for a directory and tries to find an index file in the directory.
index directive
The index directive defines the index file’s name (the default value is index.html). To continue with the example, if the request URI is /images/some/path/, NGINX delivers the file /www/data/images/some/path/index.html if it exists. If it does not, NGINX returns HTTP code 404 (Not Found) by default. To configure NGINX to return anautomatically generated directory listing instead
, include the on parameter to theautoindex directive
1
2
3
4
5
6
7# you can also put these at server level or http level
# so that it serve as a whole file server not the /images part only
location /images/ {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
}You can list more than one filename in the index directive. NGINX searches for files in the specified order and returns the first one it finds.
1
2
3location / {
index index.$geo.html index.htm index.html;
}try directive
The try_files directive can be used to check whether the specified file or directory exists; NGINX makes an internal redirect if it does, or returns a specified status code if it doesn’t. For example, to check the existence of a file corresponding to the request URI, use the try_files directive and the $uri variable as follows:1
2
3
4
5
6
7server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}The file is specified in the form of the URI, which is processed using the root or alias directives set in the context of the current location or virtual server. In this case, if the file corresponding to the original URI doesn’t exist, NGINX makes an internal redirect to the URI specified by the last parameter, returning /www/data/images/default.gif.
The last parameter can also be a status code (directly preceded by the equals sign) or the name of a location. In the following example, a 404 error is returned if none of the parameters to the try_files directive resolve to an existing file or directory.
1
2
3location / {
try_files $uri $uri/ $uri.html =404;
}In the next example, if neither the original URI nor the URI with the appended trailing slash resolve into an existing file or directory, the request is redirected to the named location which passes it to a backend server.
1
2
3
4
5
6location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://backend.example.com;
}
Optimizing Performance for Serving Content
1 | location /mp3 { |
nginx as a proxy(for same app)
1 | http { |
nginx as a load balancer(for same app)
load balancer means for the same application, there are several deployed backend servers!, choose one for serving
1 | http { |
nginx as https server
1 | server { |
nginx as proxy for different apps
different websites uri
1 | http { |
proxy_pass/fastcgi/scgi/uwsgi
proxy_pass is for http(s) between backend, nginx also supports other transport(high level above layer 4) protocol with backend like fastcgi, scgi, uwsgi.
1 | server { |