Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intro to Nginx

Intro to Nginx

slides from my palestra @fisl14 on Porto Alegre

Martin Loy

July 06, 2013
Tweet

More Decks by Martin Loy

Other Decks in Technology

Transcript

  1. $ 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
  2. $ 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.
  3. $ diff apache nginx Apache prefork|worker|events* Modular (a2enmod) .htaccess Nginx

    Async I/O, Event Loop Recompile to add* Configuration syntax & Rewrite Rules
  4. $ 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}
  5. @ 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
  6. $ locations > mod_rewrite location /imgs { if ($http_user_agent ~

    MSIE) { rewrite ^ http://disney.com? permanent; } try_files $uri $uri/ /error.gif; }
  7. $ 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
  8. 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
  9. $ 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
  10. $ 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)
  11. $ 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
  12. 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
  13. @ 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
  14. 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
  15. # 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