Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NGINX for Fun & Profit
Search
Martin Loy
May 31, 2014
Technology
1
190
NGINX for Fun & Profit
slides from my talk #phpDay 2014 on Buenos Aires
Martin Loy
May 31, 2014
Tweet
Share
More Decks by Martin Loy
See All by Martin Loy
Intro to Nginx
tombar
2
200
Other Decks in Technology
See All in Technology
子育てで想像してなかった「見えないダメージ」 / Unforeseen "hidden burdens" of raising children.
pauli
2
320
AI駆動開発ライフサイクル(AI-DLC)の始め方
ryansbcho79
0
180
日本Rubyの会: これまでとこれから
snoozer05
PRO
6
240
LayerX QA Night#1
koyaman2
0
260
テストセンター受験、オンライン受験、どっちなんだい?
yama3133
0
150
AIBuildersDay_track_A_iidaxs
iidaxs
4
1.3k
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
220
20251203_AIxIoTビジネス共創ラボ_第4回勉強会_BP山崎.pdf
iotcomjpadmin
0
140
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
370
AWS運用を効率化する!AWS Organizationsを軸にした一元管理の実践/nikkei-tech-talk-202512
nikkei_engineer_recruiting
0
170
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
940
20251219 OpenIDファウンデーション・ジャパン紹介 / OpenID Foundation Japan Intro
oidfj
0
500
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
190
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
94
New Earth Scene 8
popppiees
0
1.2k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
310
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
1
210
SEO for Brand Visibility & Recognition
aleyda
0
4.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.1k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
110
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
850
Abbi's Birthday
coloredviolet
0
3.8k
Transcript
for Fun & Profit #phpDay, @MartinLoy
$ whoami Martin Loy BOFH @ Batanga Media GuruHub CoFounder
CoOrganizer tech.meetup.uy meetups (devops|php|mysql) martinloy tombar martinloy
$ ls -l /nx/topics/* - nginx intro - config &&
syntax; - apache [ cache | load balancing ] - nginx + php - nginx modules - scenarios - tips
Rise up!
$ apropos nginx - Small, powerful, scalable web|proxy server. -
Russian engineering. - BSD license. - Market Share 14.3% | 38% top 1000 websites - It's pronounced “engine X” - Also an e-mail (imap|pop3) proxy.
$ diff apache nginx Nginx php-fpm 5.3.3+ Configuration syntax &
Rewrite Rules Recompile to add* Apache mod_php, php-fpm .htaccess Modular (a2enmod)
$ 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}
//config && syntax
@ http://wiki.nginx.org/HttpCoreModule#location server { server_name *.test.com www.test.com; listen 127.0.0.1:8000; access_log
/var/log/nginx/access.log; root /var/www/test; location / { <PHP> } }
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
location ~* (jpg|png|gif) { rewrite ^ http://disney.com? permanent; } location
/ { if ($geoip_city_country_code = "AR") { rewrite ^/$ http://example.org/ar redirect; } try_files $uri $uri/ /index.php?$args; } $ locations > mod_rewrite
$ Proxy Module location /paso-todo-para-apache { include /etc/nginx/proxy_params proxy_set_header Host
$host; proxy_pass http://myBackend/app; proxy_redirect /app /; proxy_read_timeout 30s; } @ http://wiki.nginx.org/HttpProxyModule
location /cache-2hs-los-pedidos { proxy_pass http://myBackend; proxy_cache_valid 200 301 302 2h;
proxy_cache_valid any 1m; proxy_cache_bypass $nocache_cookie; proxy_cache_key "$host$uri$args"; proxy_ignore_headers Cache-Control; } proxy_cache_use_stale error | timeout | updating | http_500 | http_502 | http_503 | http_404 Caching with nginx
$ Upstream Module upstream myBackendFarm { server 10.0.1.1 weight=2 down;
server 10.0.1.2 weight=10 keepalive=5; server unix:/path/to/socket 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
NGINX + PHP
$ apropos php-fpm Alternative PHP FastCGI implementation $ yum|apt-get install
php-fpm - use listen tcp instead of socket - slow.log - App pool
$ nginx + php location ~ \.php$ { include /etc/nginx/fastcgi_params
fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_pass phpBackend; } @ http://wiki.nginx.org/PHPFcgiExample
so far, so good?
@ 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, ruby # more awesomeness openresty, upload, push/comet
NGINX use cases
# per user cache proxy_cache_key "$user_cookie$host$uri"; # per country cache
proxy_cache_key "$geoip_city_country_code$host$uri"; proxy_cache_use_stale error | timeout | updating | http_500 | http_502 | http_503 | http_404 # remote caching proxy_pass https://api.remote.provider.com; $ ls -l /nx/scenarios/cache*
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 $ ls -l /nx/scenarios/logging
@ http://wiki.nginx.org/HttpLogModule#log_format log_format json_log '{' '"host": "$host", ' '"remote_addr": "$remote_addr",
' '"remote_user": "$remote_user", ' '"postdata": {' '"request_body": "$request_body", ' '"request_completion":"$request_completion"' ' },' '"cookie": {' '"userid": "$cookie_userid", ' ' } ' '}';
@ nginx fastcgi_param request_uuid $request_id; @ php-fpm /etc/php5/fpm/pool/default access.format =
… %{request_uuid}o ... @ php echo $ _SERVER["request_uuid"]; @ mysql -- uuid: {$request_uuid} $ ls -l /nx/scenarios/tracking
A/B testing
Abusing A/B testing
HTTP black boxing
@ ELK stack | http://www.elasticsearch.org/overview/
Moar questions?
We are recruiting >
[email protected]
tech.meetup.uy [ 15 november 2014, mvd UY ]
contact me @martinloy | github.com/tombar
@martinloy github.com/tombar