what is Nginx?
primarily one of the fastest web servers but can also be used as a proxy, reverse proxy, API Gateway, content cache and load balancer.
Its usage as a reverse proxy and load balancer is what makes it stand out.
NGINX efficiently handles tasks that might slow down your web server, such as negotiating SSL/TLS or compressing and caching content to improve performance.
Elements of Nginx configuration file
Nginx is very simple to install and once installed you can start by editing the config file which will usually exist in /etc/nginx or /usr/local/etc/nginx
nginx.conf is the text-based configuration file for Nginx.
-
It contains elements called Directives and Contexts. Directives are written like key-value pairs on each line ending with semicolons(;) Context on the other hand are top-level directives that apply to different kinds of incoming traffic.
Some directives use { } to group directives together these are called blocks. One of such important directives is the
Location [modifier] [URI]{ ... }
this directive is used to route the incoming traffic to various file systems.Examples of a few directives are given below.
# These are directives key value; like pairs
user nobody;
error_log logs/error.log notice;
worker_processes 1;
- Every time you make any changes to the nginx.conf , the nginx must be reloaded to take effect. you can use the command nginx -s reload
Few important directives to discuss
-
include directive: This directive includes another file inside the config file. include mime.types is one of the popular usages, a web server needs to know what kind of data is incoming, and this data is embedded into the headers of the incoming requests. nginx, suggest using this directive to break down your config files into simpler manageable files.
http { include mime.types; server { . . . } }
-
location block:This directive routes the requests to the correct location within the file system by matching the URI against the parameter . It is one of the most important directives to learn. each URL is matched against the location block to determine what content it will serve.
# the uri : / is the parameter to the location block. # users visiting localhost:8080/ would be served content from this block http { server { . . location / { ... } . . } }
-
root directive: The parameter
/draft
gets appended to the root location folder.URL gets matched against
/draft
here and then nginx serves content from the location/users/rocky/site/draft/
# users visiting localhost:8080/draft would be served content from this block http { server { . . location /draft { root /users/rocky/site; } . . } }
-
alias directive: The parameter
/test
gets dropped and the nginx serves content from/users/rocky/site/draft
. It allows us to remap URLs to a different directory completely other than the root location. It is useful for serving static files from a different directory
# users visiting localhost:8080/test would be served content from this block http { server { . . location /test { alias /users/rocky/site/draft; } . . } }
-
try_files directive: This directive recursively search for files in a specific order and serves the file located first. we've mentioned here
=404
meaning we don't let it run forever, if the server doesn't find the index.html in a single pass, it would throw the error 404.
# users visiting localhost:8080/draft would be served content from this block http { server { . . location /draft { try_files /drafts/index.html /default/index.html =404; } . . } }
-
redirect and rewrite directives: if a user wants to go to
/final
but we want the page to redirect to/draft
it is very simple to do. Look at the below example to achieve this.
http { server { . . location /final { # 307 is a http redirect code # we are redirecting from final to draft # users visting localhost:8080/final # would be redirected to localhost:8080/draft return 307 /draft } . . } }
In the previous example if you observe the URL changes from
/final
to/draft
but what if we don't want the URL to change, this kind of behaviour is where we can make use of therewrite
directive. Look at the below example to achieve this
http { server { . . # anybody visiting localhost:8080/final # will be redirected to /draft # but the url will remain the same i.e. localhost:8080/final rewrite ^/final? /draft break; location /draft { ... } . . } }
These are just a few of the directives to get you a bit familiar with nginx. Users can go through the nginx docs to learn in-depth about the intricacies of the nginx here
Top comments (0)