Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Intro to Nginx
Search
Martin Loy
July 06, 2013
Technology
2
200
Intro to Nginx
slides from my palestra @fisl14 on Porto Alegre
Martin Loy
July 06, 2013
Tweet
Share
More Decks by Martin Loy
See All by Martin Loy
NGINX for Fun & Profit
tombar
1
190
Other Decks in Technology
See All in Technology
DSPy入門
tomehirata
6
720
アウトプットから始めるOSSコントリビューション 〜eslint-plugin-vueの場合〜 #vuefes
bengo4com
3
1.9k
Amazon Athena で JSON・Parquet・Iceberg のデータを検索し、性能を比較してみた
shigeruoda
1
260
オブザーバビリティが育むシステム理解と好奇心
maruloop
3
1.7k
個人でデジタル庁の デザインシステムをVue.jsで 作っている話
nishiharatsubasa
3
5.3k
RemoteFunctionを使ったコロケーション
mkazutaka
1
160
知覚とデザイン
rinchoku
1
660
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
170
AI駆動で進める依存ライブラリ更新 ─ Vue プロジェクトの品質向上と開発スピード改善の実践録
sayn0
1
350
「タコピーの原罪」から学ぶ間違った”支援” / the bad support of Takopii
piyonakajima
0
160
GraphRAG グラフDBを使ったLLM生成(自作漫画DBを用いた具体例を用いて)
seaturt1e
1
170
Okta Identity Governanceで実現する最小権限の原則
demaecan
0
210
Featured
See All Featured
Building an army of robots
kneath
306
46k
Why Our Code Smells
bkeepers
PRO
340
57k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Faster Mobile Websites
deanohume
310
31k
RailsConf 2023
tenderlove
30
1.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
The Cult of Friendly URLs
andyhume
79
6.6k
Transcript
Just a friendly disclaimer before we start.
Que e isso cara? #Fisl14, @MartinLoy
$ ls -l /palestras/nx/topics/* - apropos nginx - diff apache
nginx - config && syntax; - locations - proxy module - upstream module - using (php|python|ruby|websockets|*) - good practices && debugging tips - extras
Rise up!
$ apropos nginx - Small, powerful, scalable web|proxy server. -
Russian engineering. - BSD license. - Market Share 14.3% - It's pronounced “engine X” - Also an e-mail (imap|pop3) proxy.
$ diff apache nginx Apache prefork|worker|events* Modular (a2enmod) .htaccess Nginx
Async I/O, Event Loop Recompile to add* Configuration syntax & Rewrite Rules
Config && syntax;
$ man nginx.conf 3 main contexts http | server |
location variables and methods are lowercases and only support a-z and underscore set $var foo; set_header X-Example bar; http://wiki.nginx.org/Http{X}Module#{method}
@ http://wiki.nginx.org/HttpCoreModule#server_name server { server_name example.com; server_name a.com b.com; server_name
*.test.com; server_name _; }
@ http://wiki.nginx.org/HttpCoreModule#listen server { server_name *.test.com; listen localhost:8000; listen 127.0.0.1:443
ssl; listen 8000 default; listen *:8000; listen unix:/tmp/nginx.sock; }
@ http://wiki.nginx.org/HttpCoreModule#root server { server_name *.test.com; listen 127.0.0.1:8000; root /var/www/test;
access_log /var/log/nginx/acces.log; }
Locations
@ http://wiki.nginx.org/HttpCoreModule#location location = /admin { ... } /admin location
/ { ... } /index.html /example/test.html /match.any location /docs { ... } /docs/example.html location ^~ /images { ... } /images/avatar.gif location ~* (jpg|gif|png) { ... } /docs/1.gif
$ locations > mod_rewrite location /imgs { if ($http_user_agent ~
MSIE) { rewrite ^ http://disney.com? permanent; } try_files $uri $uri/ /error.gif; }
Dynamic Content
$ Proxy Module location / { proxy_set_header Host $host; proxy_pass
http://myBackend/app; proxy_redirect /app /; proxy_read_timeout 30s; } @ http://wiki.nginx.org/HttpProxyModule
Caching with nginx location / { proxy_pass http://myBackend; proxy_cache_valid 200
301 302 2h; proxy_cache_valid any 1m; proxy_cache_bypass $nocache_cookie; proxy_cache_key "$user_cookie$host$uri"; proxy_ignore_headers Cache-Control; } proxy_cache_use_stale error | timeout | updating | http_500 | http_502 | http_503 | http_404
$ Upstream Module upstream myBackendFarm { server 10.0.1.1 weight=2; server
10.0.1.2 weight=10 keepalive=5; server 10.0.1.3 down; server 10.0.1.4 max_fails=3 fail_timeout=5s; server 10.0.1.5 backup; [ fair | hash | sticky | + ] } @ http://wiki.nginx.org/HttpUpstreamModule
$ use (php|python|ruby|*) proxy_pass | fastcgi_pass | uwsgi_pass .php php-fpm
5.3.2+ .py wsgi, passenger, gunicorn. .rb rack, passenger, unicorn, thin, goliath. .* (http|socket)
$ nginx && websockets location /chat { proxy_pass http://myBackend; proxy_http_version
1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } @ http://nginx.org/en/docs/http/websocket.html
Good Practices & Debugging tips
Configuration Tips $ /etc/init.d/nginx configtest # use some extra headers
to help you out add_header X-foo $var; # nginx built in debug_connection debug_connection 127.0.0.1; @ http://wiki.nginx.org/IfIsEvil
@ http://wiki.nginx.org/HttpLogModule#log_format log_format multidomain-multiproxy-geoip $host - { combined apache log
format } - Cache: $upstream_cache_status $upstream_status $upstream_response_time $upstream_addr - Geo: $geoip_city_country_code $geoip_region
Cli tools $ tail -f /var/log/nginx/*error.log $ w3m -dump_head http://myBackend/img/a.gif
Content-Type: image/gif Last-Modified: Fri, 28 Jun 2013 15:57:46 GMT Cache-Control: max-age=864000 ETag: "e4f5659cd8bfb08fec2dc98e8450c414" Expires: Wed, 10 Jul 2013 07:24:03 GMT $ wget http://127.0.0.1/nx_stub -O - Active connections: 2676 server accepts handled requests 84315896 84315896 189890279 Reading: 204 Writing: 13 Waiting: 2459
@ http://wiki.nginx.org/3rdPartyModules
# Cache Backends redis, memcache, mongo, purge # Security mod_security,
naxsi, http pam # Media image filter, mp4, thumb extractor # Misc php, form parser, rdd, download $ ls -l /nx/3rdPartyMods/* # Optimizers pagespeed, css, js min # Monitoring statsd, sflow, syslog # Real FUN ! lua, perl, python, javascript # more awesomeness openresty, upload, push/comet
ASK me Anything NGINX related! & GET /some-alfajores
contact me @martinloy | github.com/tombar
@martinloy github.com/tombar