SlideShare a Scribd company logo
1 of 26
Download to read offline
NginX - Good practices, tips
and advanced techniques
Claudio Filho
<claudio.filho@locaweb.com.br>
About me
+14 years experience with Linux/Unix.
Technical Operations Leader at Locaweb.
I can handle myself in different languages such as
Python, Perl, PHP, Bash, Lua, C and I'm learning
Ruby.
USF4 Player (PSN ID: but3k4 or piupiu_monstro).
A brief description about NginX
NginX (pronounced "engine X”) is an
OpenSource HTTP and reverse proxy server,
a mail proxy server, and a load balancing
server.
Currently it is the second most popular web
server on the Internet.
Good Practices
NginX is flexible, it allows to do the same thing
in different ways, but, good practices can save
resources and increase the performance
(such as good programming techniques).
try_files is basically a replacement for the typical mod_rewrite
style file/directory existence check.
If possible, avoid to use “if (-f …), it is a bad practice(according
to author of NginX)., ex:
bad:
if (-f $request_filename) {
…………….
}
good:
location / {
try_files $uri $uri/ = 404;
}
try_files instead of if
Using the return directive we can completely
avoid evaluation of regular expression.
bad:
rewrite ^/(.*)$ http://domain.com/$1 permanent;
also bad:
rewrite ^ http://domain.com$request_uri? permanent;
good:
return 301 http://domain.com$request_uri;
return instead of rewrite
Avoid proxy everything. The try_files directive tries files in a specific
order. This means that NginX can first look for a number of static
files to serve and if not found move on to a user defined fallback.
proxy everything
bad:
location / {
proxy_pass http://upstream_servers;
}
good:
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass http://upstream_servers;
}
You can include any configuration files for what ever
purpose you want. The include directive also supports
filename globbing. The examples below show how the
nginx.conf file already uses includes by default:
include files
include /etc/nginx/conf.d/*.conf;
or
include conf.d/*.conf;
Tips
NginX has dozen of modules (native or third-
party), each module has a lot of directive,
each directive has its own peculiarities.
core module
core module has a lot of directives, among of them, there are
interested directives:
http2
location
limit_rate
error_page
resolver
try_files
http rewrite module
This module makes it possible to change URI using Perl
Compatible Regular Expressions (PCRE), and to redirect and
select configuration depending on variables. This cycle can be
repeated up to 10 times, after which Nginx returns a 500 error.
server_name ~^(?P<subdomain>[wd-]+.)?(?P<domain>[wd-]+).(?P<cctld>[w.]+)$;
set $docroot "default";
if ($domain) {
set $docroot $domain;
}
root /srv/$docroot/www;
gzip log files
If you want, you can specify compression of the log files. If the gzip
parameter is used, then the buffered data will be compressed before
writing to the file.
Since the data is compressed in atomic blocks, the log file can be
decompressed or read by "zcat" at any time.
format:
access_log location format gzip;
ex:
access_log /var/log/nginx/access.log.gz combined gzip;
http map module
The http map module enable to create variables whose values
depend on values of other variables. You can create new
variable whose value depends on values of one or more of the
source variables specified in the first parameter.
map $http_user_agent $bad_user_agent {
default 0;
~*wget 1;
~*curl 1;
~*libwww-perl 1;
~*python-urllib 1;
~*PycURL 1;
}
http echo module
This module wraps lots of Nginx internal APIs for
streaming input and output, parallel/sequential
subrequests, timers and sleeping, as well as various
meta data accessing.
location /echo {
default_type text/html;
echo -n "<html>n<head><title>echo</title></head>n<body><h1>echo</h1></body>n</html>
n";
}
http lua module
This module embeds Lua, via the standard Lua 5.1
interpreter or LuaJIT 2.0/2.1, into Nginx and by leveraging
Nginx's subrequests, allows the integration of the powerful
Lua threads (Lua coroutines) into the Nginx event model.
location /lua {
default_type text/plain;
content_by_lua “nginx.say(‘hello, world!’)“;
}
http perl module
The ngx_http_perl_module module is used to
implement location and variable handlers in
Perl and insert Perl calls into SSI.
http Live Streaming (HLS) module
The ngx_http_hls_module module provides HTTP Live
Streaming (HLS) server-side support for MP4 and MOV media
files. Such files typically have the .mp4, .m4v, .m4a, .mov, or .qt
filename extensions. The module supports H.264 video codec,
AAC and MP3 audio codecs.
http://www.claudioborges.org/sf4.mp4.m3u8?offset=1.000&start=1.000&end=2.200
http://www.claudioborges.org/sf4.mp4.m3u8?len=8.000
http://www.claudioborges.org/sf4.mp4.ts?start=1.000&end=2.200
third-party modules
These modules are not officially supported and may not
be compatible across versions of Nginx. If you check this
(http://wiki.nginx.org/3rdPartyModules) you can find
interested things. Enjoy at your own risk.
To compile a third-party module, from the Nginx source
directory, type:
./configure --add-module=/path/to/module1/source 
--add-module=/path/to/module2/source
Advanced techniques
NginX is a powerful web server with a lot of
features. But, it has a few limitations. For
example, it doesn’t have nested ifs, but, you
can use a different way to do that.
nested if statement - part 1
Like I said, NginX doesn't allow nested if
statements, for example, you can't do
something like:
if ($http_refer ~* “.*claudioborges.*" && $args ~* “execute”) {
rewrite ^/things$ /another_thing break;
}
nested if statement part - 2
But, you can do using a different way:
set $result "";
if ($http_refer ~* ".*claudioborges.*") {
set $result 1;
}
if ($args ~* "execute") {
set $result 2;
}
if ($result = 2) {
rewrite ^/things$ /another_thing break;
}
Dynamic virtual host
You can use dynamic virtual hosts in NginX. I mean, you can
create just one file for many websites. It works similar to Apache
mod_vhost_alias.
server {
listen 80;
server_name ~^(?P<subdomain>[wd-]+.)?(?P<domain>[wd-]+).(?P<cctld>[w.]+)$;
index index.html;
set $docroot “default";
if ($domain) {
set $docroot $domain;
}
root /srv/$docroot/www;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/$domain-access.log main;
error_log /var/log/nginx/error.log;
}
HTTP and HTTPS in the same
virtual host - part 1
Unlike Apache, NginX allows to use the same
virtual host for both HTTP and HTTPS. Its
configuration is pretty easy and using it avoid
duplicate configurations.
HTTP and HTTPS in the same
virtual host - part 2
To do that, you need to merge the HTTP and HTTPS virtual host file
in a unique file. The only detail is: You need to omit the "SSL on"
option. This directive in modern versions is thus discouraged.
The example below shows an unique virtual host that handles both
HTTP and HTTPS requests:
server {
listen 80;
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
...
}
References
http://nginx.org
http://wiki.nginx.org/Pitfalls
http://wiki.nginx.org/IfIsEvil
http://wiki.nginx.org/3rdPartyModules
http://w3techs.com/technologies/cross/
web_server/ranking
Thanks for you attention!
Any questions?
Claudio Filho
<claudio.filho@locaweb.com.br>
@but3k4
http://www.claudioborges.org
https://github.com/but3k4

More Related Content

What's hot

Nginx internals
Nginx internalsNginx internals
Nginx internalsliqiang xu
 
NGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX, Inc.
 
Learn nginx in 90mins
Learn nginx in 90minsLearn nginx in 90mins
Learn nginx in 90minsLarry Cai
 
Massively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHPMassively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHPDemin Yin
 
Nginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse ProxyNginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse ProxyAmit Aggarwal
 
Using NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content CacheUsing NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content CacheKevin Jones
 
Clug 2012 March web server optimisation
Clug 2012 March   web server optimisationClug 2012 March   web server optimisation
Clug 2012 March web server optimisationgrooverdan
 
Introduction to NGINX web server
Introduction to NGINX web serverIntroduction to NGINX web server
Introduction to NGINX web serverMd Waresul Islam
 
Rate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusRate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusNGINX, Inc.
 
under the covers -- chef in 20 minutes or less
under the covers -- chef in 20 minutes or lessunder the covers -- chef in 20 minutes or less
under the covers -- chef in 20 minutes or lesssarahnovotny
 
Apache Traffic Server & Lua
Apache Traffic Server & LuaApache Traffic Server & Lua
Apache Traffic Server & LuaKit Chan
 
Supercharging Content Delivery with Varnish
Supercharging Content Delivery with VarnishSupercharging Content Delivery with Varnish
Supercharging Content Delivery with VarnishSamantha Quiñones
 
Varnish Configuration Step by Step
Varnish Configuration Step by StepVarnish Configuration Step by Step
Varnish Configuration Step by StepKim Stefan Lindholm
 

What's hot (19)

Nginx internals
Nginx internalsNginx internals
Nginx internals
 
Nginx
NginxNginx
Nginx
 
Nginx dhruba mandal
Nginx dhruba mandalNginx dhruba mandal
Nginx dhruba mandal
 
NGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA Broadcast
 
Learn nginx in 90mins
Learn nginx in 90minsLearn nginx in 90mins
Learn nginx in 90mins
 
Massively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHPMassively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHP
 
Nginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse ProxyNginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse Proxy
 
Using NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content CacheUsing NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content Cache
 
Clug 2012 March web server optimisation
Clug 2012 March   web server optimisationClug 2012 March   web server optimisation
Clug 2012 March web server optimisation
 
Introduction to NGINX web server
Introduction to NGINX web serverIntroduction to NGINX web server
Introduction to NGINX web server
 
Rate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusRate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX Plus
 
Nginx
NginxNginx
Nginx
 
under the covers -- chef in 20 minutes or less
under the covers -- chef in 20 minutes or lessunder the covers -- chef in 20 minutes or less
under the covers -- chef in 20 minutes or less
 
Apache Traffic Server & Lua
Apache Traffic Server & LuaApache Traffic Server & Lua
Apache Traffic Server & Lua
 
Supercharging Content Delivery with Varnish
Supercharging Content Delivery with VarnishSupercharging Content Delivery with Varnish
Supercharging Content Delivery with Varnish
 
Fluentd and WebHDFS
Fluentd and WebHDFSFluentd and WebHDFS
Fluentd and WebHDFS
 
Varnish SSL / TLS
Varnish SSL / TLSVarnish SSL / TLS
Varnish SSL / TLS
 
Varnish Configuration Step by Step
Varnish Configuration Step by StepVarnish Configuration Step by Step
Varnish Configuration Step by Step
 
ReplacingSquidWithATS
ReplacingSquidWithATSReplacingSquidWithATS
ReplacingSquidWithATS
 

Similar to NginX - good practices, tips and advanced techniques

The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09Bastian Feder
 
PHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckPHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckrICh morrow
 
Gr8conf EU 2018 - Bring you infrastructure under control with Infrastructor
Gr8conf EU 2018 - Bring you infrastructure under control with InfrastructorGr8conf EU 2018 - Bring you infrastructure under control with Infrastructor
Gr8conf EU 2018 - Bring you infrastructure under control with InfrastructorStanislav Tiurikov
 
JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)
JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)
JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)PROIDEA
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.jsSu Zin Kyaw
 
The Beauty and the Beast
The Beauty and the BeastThe Beauty and the Beast
The Beauty and the BeastBastian Feder
 
ITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin JonesITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin JonesOrtus Solutions, Corp
 
Eclipse HandsOn Workshop
Eclipse HandsOn WorkshopEclipse HandsOn Workshop
Eclipse HandsOn WorkshopBastian Feder
 
Capistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient wayCapistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient waySylvain Rayé
 
Aucklug slides - desktop tips and tricks
Aucklug slides - desktop tips and tricksAucklug slides - desktop tips and tricks
Aucklug slides - desktop tips and tricksGlen Ogilvie
 
Lua tech talk
Lua tech talkLua tech talk
Lua tech talkLocaweb
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to AnsibleCédric Delgehier
 

Similar to NginX - good practices, tips and advanced techniques (20)

The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09
 
NodeJS
NodeJSNodeJS
NodeJS
 
PHP from soup to nuts Course Deck
PHP from soup to nuts Course DeckPHP from soup to nuts Course Deck
PHP from soup to nuts Course Deck
 
Gr8conf EU 2018 - Bring you infrastructure under control with Infrastructor
Gr8conf EU 2018 - Bring you infrastructure under control with InfrastructorGr8conf EU 2018 - Bring you infrastructure under control with Infrastructor
Gr8conf EU 2018 - Bring you infrastructure under control with Infrastructor
 
JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)
JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)
JDD 2017: Nginx + Lua = OpenResty (Marcin Stożek)
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
The Beauty and the Beast
The Beauty and the BeastThe Beauty and the Beast
The Beauty and the Beast
 
Basics PHP
Basics PHPBasics PHP
Basics PHP
 
Php
PhpPhp
Php
 
ITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin JonesITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin Jones
 
Eclipse HandsOn Workshop
Eclipse HandsOn WorkshopEclipse HandsOn Workshop
Eclipse HandsOn Workshop
 
Catalyst MVC
Catalyst MVCCatalyst MVC
Catalyst MVC
 
Capistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient wayCapistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient way
 
Php
PhpPhp
Php
 
Get your teeth into Plack
Get your teeth into PlackGet your teeth into Plack
Get your teeth into Plack
 
PHP Development Tools
PHP  Development ToolsPHP  Development Tools
PHP Development Tools
 
Aucklug slides - desktop tips and tricks
Aucklug slides - desktop tips and tricksAucklug slides - desktop tips and tricks
Aucklug slides - desktop tips and tricks
 
Easy native wrappers with SWIG
Easy native wrappers with SWIGEasy native wrappers with SWIG
Easy native wrappers with SWIG
 
Lua tech talk
Lua tech talkLua tech talk
Lua tech talk
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible
 

Recently uploaded

定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一Fs
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一z xss
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsThierry TROUIN ☁
 
Complet Documnetation for Smart Assistant Application for Disabled Person
Complet Documnetation   for Smart Assistant Application for Disabled PersonComplet Documnetation   for Smart Assistant Application for Disabled Person
Complet Documnetation for Smart Assistant Application for Disabled Personfurqan222004
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Roomdivyansh0kumar0
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一Fs
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Roomdivyansh0kumar0
 
Denver Web Design brochure for public viewing
Denver Web Design brochure for public viewingDenver Web Design brochure for public viewing
Denver Web Design brochure for public viewingbigorange77
 
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一3sw2qly1
 
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Lucknow
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...
Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...
Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...akbard9823
 

Recently uploaded (20)

定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
办理(UofR毕业证书)罗切斯特大学毕业证成绩单原版一比一
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
Complet Documnetation for Smart Assistant Application for Disabled Person
Complet Documnetation   for Smart Assistant Application for Disabled PersonComplet Documnetation   for Smart Assistant Application for Disabled Person
Complet Documnetation for Smart Assistant Application for Disabled Person
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls KolkataLow Rate Call Girls Kolkata Avani 🤌  8250192130 🚀 Vip Call Girls Kolkata
Low Rate Call Girls Kolkata Avani 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
young call girls in Uttam Nagar🔝 9953056974 🔝 Delhi escort Service
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With RoomVIP Kolkata Call Girl Dum Dum 👉 8250192130  Available With Room
VIP Kolkata Call Girl Dum Dum 👉 8250192130 Available With Room
 
Denver Web Design brochure for public viewing
Denver Web Design brochure for public viewingDenver Web Design brochure for public viewing
Denver Web Design brochure for public viewing
 
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
定制(CC毕业证书)美国美国社区大学毕业证成绩单原版一比一
 
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja VipCall Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
Call Girls Service Adil Nagar 7001305949 Need escorts Service Pooja Vip
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...
Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...
Sushant Golf City / best call girls in Lucknow | Service-oriented sexy call g...
 

NginX - good practices, tips and advanced techniques

  • 1. NginX - Good practices, tips and advanced techniques Claudio Filho <claudio.filho@locaweb.com.br>
  • 2. About me +14 years experience with Linux/Unix. Technical Operations Leader at Locaweb. I can handle myself in different languages such as Python, Perl, PHP, Bash, Lua, C and I'm learning Ruby. USF4 Player (PSN ID: but3k4 or piupiu_monstro).
  • 3. A brief description about NginX NginX (pronounced "engine X”) is an OpenSource HTTP and reverse proxy server, a mail proxy server, and a load balancing server. Currently it is the second most popular web server on the Internet.
  • 4. Good Practices NginX is flexible, it allows to do the same thing in different ways, but, good practices can save resources and increase the performance (such as good programming techniques).
  • 5. try_files is basically a replacement for the typical mod_rewrite style file/directory existence check. If possible, avoid to use “if (-f …), it is a bad practice(according to author of NginX)., ex: bad: if (-f $request_filename) { ……………. } good: location / { try_files $uri $uri/ = 404; } try_files instead of if
  • 6. Using the return directive we can completely avoid evaluation of regular expression. bad: rewrite ^/(.*)$ http://domain.com/$1 permanent; also bad: rewrite ^ http://domain.com$request_uri? permanent; good: return 301 http://domain.com$request_uri; return instead of rewrite
  • 7. Avoid proxy everything. The try_files directive tries files in a specific order. This means that NginX can first look for a number of static files to serve and if not found move on to a user defined fallback. proxy everything bad: location / { proxy_pass http://upstream_servers; } good: location / { try_files $uri $uri/ @proxy; } location @proxy { proxy_pass http://upstream_servers; }
  • 8. You can include any configuration files for what ever purpose you want. The include directive also supports filename globbing. The examples below show how the nginx.conf file already uses includes by default: include files include /etc/nginx/conf.d/*.conf; or include conf.d/*.conf;
  • 9. Tips NginX has dozen of modules (native or third- party), each module has a lot of directive, each directive has its own peculiarities.
  • 10. core module core module has a lot of directives, among of them, there are interested directives: http2 location limit_rate error_page resolver try_files
  • 11. http rewrite module This module makes it possible to change URI using Perl Compatible Regular Expressions (PCRE), and to redirect and select configuration depending on variables. This cycle can be repeated up to 10 times, after which Nginx returns a 500 error. server_name ~^(?P<subdomain>[wd-]+.)?(?P<domain>[wd-]+).(?P<cctld>[w.]+)$; set $docroot "default"; if ($domain) { set $docroot $domain; } root /srv/$docroot/www;
  • 12. gzip log files If you want, you can specify compression of the log files. If the gzip parameter is used, then the buffered data will be compressed before writing to the file. Since the data is compressed in atomic blocks, the log file can be decompressed or read by "zcat" at any time. format: access_log location format gzip; ex: access_log /var/log/nginx/access.log.gz combined gzip;
  • 13. http map module The http map module enable to create variables whose values depend on values of other variables. You can create new variable whose value depends on values of one or more of the source variables specified in the first parameter. map $http_user_agent $bad_user_agent { default 0; ~*wget 1; ~*curl 1; ~*libwww-perl 1; ~*python-urllib 1; ~*PycURL 1; }
  • 14. http echo module This module wraps lots of Nginx internal APIs for streaming input and output, parallel/sequential subrequests, timers and sleeping, as well as various meta data accessing. location /echo { default_type text/html; echo -n "<html>n<head><title>echo</title></head>n<body><h1>echo</h1></body>n</html> n"; }
  • 15. http lua module This module embeds Lua, via the standard Lua 5.1 interpreter or LuaJIT 2.0/2.1, into Nginx and by leveraging Nginx's subrequests, allows the integration of the powerful Lua threads (Lua coroutines) into the Nginx event model. location /lua { default_type text/plain; content_by_lua “nginx.say(‘hello, world!’)“; }
  • 16. http perl module The ngx_http_perl_module module is used to implement location and variable handlers in Perl and insert Perl calls into SSI.
  • 17. http Live Streaming (HLS) module The ngx_http_hls_module module provides HTTP Live Streaming (HLS) server-side support for MP4 and MOV media files. Such files typically have the .mp4, .m4v, .m4a, .mov, or .qt filename extensions. The module supports H.264 video codec, AAC and MP3 audio codecs. http://www.claudioborges.org/sf4.mp4.m3u8?offset=1.000&start=1.000&end=2.200 http://www.claudioborges.org/sf4.mp4.m3u8?len=8.000 http://www.claudioborges.org/sf4.mp4.ts?start=1.000&end=2.200
  • 18. third-party modules These modules are not officially supported and may not be compatible across versions of Nginx. If you check this (http://wiki.nginx.org/3rdPartyModules) you can find interested things. Enjoy at your own risk. To compile a third-party module, from the Nginx source directory, type: ./configure --add-module=/path/to/module1/source --add-module=/path/to/module2/source
  • 19. Advanced techniques NginX is a powerful web server with a lot of features. But, it has a few limitations. For example, it doesn’t have nested ifs, but, you can use a different way to do that.
  • 20. nested if statement - part 1 Like I said, NginX doesn't allow nested if statements, for example, you can't do something like: if ($http_refer ~* “.*claudioborges.*" && $args ~* “execute”) { rewrite ^/things$ /another_thing break; }
  • 21. nested if statement part - 2 But, you can do using a different way: set $result ""; if ($http_refer ~* ".*claudioborges.*") { set $result 1; } if ($args ~* "execute") { set $result 2; } if ($result = 2) { rewrite ^/things$ /another_thing break; }
  • 22. Dynamic virtual host You can use dynamic virtual hosts in NginX. I mean, you can create just one file for many websites. It works similar to Apache mod_vhost_alias. server { listen 80; server_name ~^(?P<subdomain>[wd-]+.)?(?P<domain>[wd-]+).(?P<cctld>[w.]+)$; index index.html; set $docroot “default"; if ($domain) { set $docroot $domain; } root /srv/$docroot/www; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/$domain-access.log main; error_log /var/log/nginx/error.log; }
  • 23. HTTP and HTTPS in the same virtual host - part 1 Unlike Apache, NginX allows to use the same virtual host for both HTTP and HTTPS. Its configuration is pretty easy and using it avoid duplicate configurations.
  • 24. HTTP and HTTPS in the same virtual host - part 2 To do that, you need to merge the HTTP and HTTPS virtual host file in a unique file. The only detail is: You need to omit the "SSL on" option. This directive in modern versions is thus discouraged. The example below shows an unique virtual host that handles both HTTP and HTTPS requests: server { listen 80; listen 443 ssl http2; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ... }
  • 26. Thanks for you attention! Any questions? Claudio Filho <claudio.filho@locaweb.com.br> @but3k4 http://www.claudioborges.org https://github.com/but3k4