Helgi Þormar Þorbjörnsson
PHP UK, London, 2013
Cranking
Nginx
To 11
Friday, 22 February 13
Slide 2
Slide 2 text
Co-founded Orchestra.io
Work at EngineYard
PEAR Developer
From Iceland
@h on Twitter
Helgi
Friday, 22 February 13
Slide 3
Slide 3 text
Nginx
Just a web server?
Friday, 22 February 13
Slide 4
Slide 4 text
✓ Web Server
✓ Proxy
✓ Cache
✓ Mail Proxy
✓ And more!
No! It’s so much more!
Friday, 22 February 13
Slide 5
Slide 5 text
Important for tweaking
Friday, 22 February 13
Slide 6
Slide 6 text
Always run configtest before
doing anything!
Friday, 22 February 13
Slide 7
Slide 7 text
Reload (HUP Signal)
Friday, 22 February 13
Slide 8
Slide 8 text
Reload (HUP Signal)
‣ Reloads config
‣ Starts up new workers
‣ Old workers stop listening
‣ Finish up any work they have
Friday, 22 February 13
Slide 9
Slide 9 text
Upgrade (USR2 Signal)
Friday, 22 February 13
Slide 10
Slide 10 text
Upgrade (USR2 Signal)
‣ Live upgrade of Nginx executable
‣ Starts up a new Master
‣ Run in parallel
‣ Old Workers gracefully shutdown
‣ Old Master can be brought back
Friday, 22 February 13
Slide 11
Slide 11 text
Requires --with-debug during build time
error_log /path/to/log debug;
Debugging
Friday, 22 February 13
Slide 12
Slide 12 text
events {
debug_connection 1.2.3.4;
debug_connection 1.2.3.0/24;
}
Connection Specific
Friday, 22 February 13
Slide 13
Slide 13 text
Rewrite Log entries are notice level
rewrite_log on;
error_log /path/to/log notice;
Debug Rewrite Rules
Friday, 22 February 13
Slide 14
Slide 14 text
Rewrite Module
Friday, 22 February 13
Slide 15
Slide 15 text
Regex (PCRE)
Friday, 22 February 13
Slide 16
Slide 16 text
Responsible for all if statements,
file exists checks, returns and more.
Friday, 22 February 13
Slide 17
Slide 17 text
Can work with most Nginx variables
such as $http_cookie,
$user_agent, $uri and countless
others.
Friday, 22 February 13
Slide 18
Slide 18 text
The power of SET
Text
set $helgi “Hi”;
Friday, 22 February 13
Slide 19
Slide 19 text
Forward Domains
server {
server_name www.helgi.ws;
return 301 $scheme://helgi.ws$request_uri;
}
Friday, 22 February 13
Slide 20
Slide 20 text
Load Balancing
Friday, 22 February 13
Slide 21
Slide 21 text
upstream web_workers {
server www1.example.com;
server www2.example.com;
server www3.example.com;
server www4.example.com;
}
Simple Round Robin
Friday, 22 February 13
Slide 22
Slide 22 text
upstream web_workers {
ip_hash;
server www1.example.com;
server www2.example.com;
server www3.example.com;
server www4.example.com;
}
Consistent IP Routing
Friday, 22 February 13
Slide 23
Slide 23 text
upstream web_workers {
server www1.example.com;
server www2.example.com
weight=2 max_fails=2 fail_timeout=15;
server www3.example.com
weight=4 max_fails=3;
server www4.example.com
weight=4 max_fails=4 fail_timeout=20;
keepalive 8;
}
Different Weights
weight and ip_hash can work
together in Nginx 1.3.1+
Friday, 22 February 13
cd /path/to/your/nginx/source
./configure --add-module=/usr/local/nginx/mod/headers-more/
make
make install
How to compile modules into nginx
Friday, 22 February 13
Slide 31
Slide 31 text
wiki.nginx.org/NginxHttpHeadersMoreModule
Introducing
Friday, 22 February 13