SlideShare uma empresa Scribd logo
1 de 54
Boost your website by running
PHP on Nginx
Tips and tricks for high performance websites
Harald Zeitlhofer @HZeitlhofer
harald.zeitlhofer@dynatrace.com
Harald Zeitlhofer
• Technology Strategist at Dynatrace
• Database and Web Development
• Love to discover new things
Tips and tricks for high performance websites
Once upon a time...
performance matters !!!
performance matters !!!
performance matters !!!
Modern Web Pages: lots of static content
434 Resources in total on that page:
230 JPEGs, 75 PNGs, 50 GIFs, …
more than 20MB page size
Fifa.com during Worldcup 2014
http://blog.dynatrace.com/2014/05/21/is-the-fifa-world-cup-website-ready-for-the-tournament/
largest item on page:
favicon.ico with 370 KB!!!
but also some heavyweight
CSS and JS files with up to 288 KB!!!
• Expires
• Last-Modified
• Etag
• Cache-Control
cached content
can still create roundtrips
to the network!
Web Request handling
Web Request handling
PHP-FPM
FastCGI Process Manager
Available since 5.3.3
Stable since 5.4.1
PHP-FPM
• Installation
• Pool configuration
/etc/php/7.0/fpm/pool.d/www.conf
[www]
user = www-data
group = www-data
listen = 127.0.0.1:9000# for Unix socket: unix:/var/run/php7.0-fpm.sock;
root@hzvm01:/etc/nginx/sites-enabled# ps -ef | grep php
root 6435 1 0 14:39 ? 00:00:32 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
spelix 6439 6435 0 14:39 ? 00:00:00 php-fpm: pool batch
spelix 6440 6435 0 14:39 ? 00:00:00 php-fpm: pool batch
www-data 10576 6435 1 18:45 ? 00:00:48 php-fpm: pool www
www-data 10920 6435 1 18:47 ? 00:00:47 php-fpm: pool www
www-data 10927 6435 1 18:47 ? 00:00:46 php-fpm: pool www
sudo apt-get install php7.0-fpm
Nginx
Lightweight HTTP server
Event based request handling
Open Source project (BSD)
Development started in 2002 by Igor Sysoev to solve the c10k problem
Commercial version NGINX Plus
Leading among
top 100.000 websites
/etc/nginx/nginx.conf
# max_clients = worker_processes * worker_connections
worker_processes 8; # number of CPUs
pcre_jit on; # enable JIT for regex
events {
worker_connections 1024;
multi_accept on;
}
Integration
• Static content served by Nginx
• Dynamic requests sent to PHP
server {
listen 80;
server_name www.yourdomain.com;
root /var/www/test;
index index.php index.html index.htm;
location ~* .(html|js|css|gif|jpg|jpe|jpeg|png|bmp|tif|pdf|ico)$ {
try_files $uri =404;
}
location / {
try_files $uri $uri/ =404;
}
location ~* .php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
}
Communication via sockets
• TCP vs Unix
• Unix slightly faster when used on localhost
• Use TCP for high load
location ~* .php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
fastcgi_pass unix:/var/run/php7.0-fpm.sock;
Transaction flow
URL rewrite
...
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php
...
http://www.mysite.com/news/browse/2014
 to be processed by index.php
URL rewrite
server {
listen 80;
root /var/www;
index index.php index.html index.htm;
server_name www.mysite.com;
location / {
try_files $uri $uri/ @missing;
}
location @missing {
rewrite (.*) /index.php;
}
location ~ .php$ {
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
http://www.mysite.com/news/browse/2014
 to be processed by index.php
URL rewrite
using Nginx/PHP-FPM there’s a better way:
server {
listen 80;
root /var/www;
index index.php index.html index.htm;
server_name www.mysite.com;
location /images {
try_files $uri =404;
}
location /scripts {
try_files $uri =404;
}
location / {
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
<?php
$params = explode('/', $_SERVER["DOCUMENT_URI"]);
...
Finish Web Request
<?php
do_some_processing();
render_page();
fastcgi_finish_request();
do_slower_stuff(Array(
‘convert_uploaded_videos’,
‘post_to_social_media_platforms’,
‘backup_data’,
‘much more’
));
?>
Nginx and Caching
Nginx FastCGI cache
• Part of Nginx' FastCGI module
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=APPKEY:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
location ~* .php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_cache APPKEY;
fastcgi_cache_valid 200 60m;
}
FastCGI cache in action
<?php
echo time()."n";
?>
FastCGI cache in action
<?php
echo time()."n";
?>
FastCGI cache in action
<?php
echo time()."n";
?>
Full page cache with Memcached
<?php
...
function __construct () {
$this->c = new Memcached();
$this->c->addServer('localhost',11211);
}
function setCache ($key, $content) {
$this->c->set($key, $content);
}
...
// get HTML content
$html = $this->renderPage();
$this->setCache($_SERVER['REQUEST_URI'], $html);
echo $html;
...
?>
Data cache with Memcached
<?php
...
function __construct () {
$this->c = new Memcached();
$this->c->addServer('localhost',11211);
}
function setCache ($key, $content) {
$this->c->set($key, $content);
}
...
// get data structure
$newslist = $this->getNewsList();
$this->setCache('/data/news/getlist', json_encode($newslist));
...
?>
Full page / data cache with Nginx and Memcached
• ngx_http_memcached_module
server {
location / {
set $memcached_key "$uri";
memcached_pass localhost:11211;
error_page 404 502 504 = @notincache;
}
location @notincache {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
PHP, 5k requests, concurrency 100
0
1
2
3
4
5
6
7
8
Apache+PHP Nginx+PHP Nginx+Memcached
<?php
echo "Hello World";
?>
7,28 4,6 3,05
totaltimeinsec
Caching Static Content
• set HTTP response expires header
location ~ .(html|js|css|gif|jpg|jpe|jpeg|png|bmp|tif|pdf|ico)$ {
expires 365d;
access_log off;
error_log off;
log_not_found off;
add_header Cache-Control "public";
try_files $uri =404;
}
Filehandle Caching
• keep handlers for requested static files open
open_file_cache max=1000 inactive=5m;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
FastCGI request forwarding
server {
listen 80;
root /var/www/mysite;
server_name www.mysite.com;
location / {
try_files $uri =405;
}
location ~ .php$ {
fastcgi_pass 192.168.56.12:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
FastCGI request forwarding
upstream php {
server 192.168.56.12:9000;
}
server {
listen 80;
root /var/www/mysite;
server_name www.mysite.com;
location / {
try_files $uri =405;
}
location ~ .php$ {
fastcgi_pass php;
fastcgi_index index.php;
include fastcgi_params;
}
}
Load balancing
upstream php {
ip_hash;
server unix:/var/run/php5-fpm.sock weight=5;
server 192.168.56.12:9000 weight=2;
server 192.168.56.13:9000;
server 192.168.56.14:9000 backup;
}
server {
listen 80;
root /var/www/mysite;
server_name www.mysite.com;
location / {
try_files $uri =405;
}
location ~ .php$ {
fastcgi_pass php;
fastcgi_index index.php;
include fastcgi_params;
}
}
High scalability
desktop traffic
response time
slow response time
traffic using chrome
My favorite performance tools
• Load Generator (Apache Benchmark, Selenium, JMeter)
• Firebug, Google Developer Tools
• Dynatrace Application Monitoring Free Trial
• Free trial license for 30 days
• Free personal license for developers
• Dynatrace Ruxit
• 2016 free hours for monitoring
http://bit.ly/monitoring-2016
http://bit.ly/dttrial
Further information
http://apmblog.dynatrace.com
http://apmblog.dynatrace.com/2014/08/19/easily-boost-web-application-using-nginx/
http://apmblog.dynatrace.com/2014/10/30/proper-configuration-running-php-nginx/
http://apmblog.dynatrace.com/2015/11/24/cool-new-stuff-on-the-nginx-front/
https://www.nginx.com/resources/wiki/
Harald Zeitlhofer
Performance Advocate
@HZeitlhofer
harald.zeitlhofer@dynatrace.com
http://blog.dynatrace.com
Dynatrace Free Trial
Free Personal License
Ruxit Free Trial
http://bit.ly/monitoring-2016
events@dynatrace.com

Mais conteúdo relacionado

Mais procurados

Mais procurados (19)

Background Tasks in Node - Evan Tahler, TaskRabbit
Background Tasks in Node - Evan Tahler, TaskRabbitBackground Tasks in Node - Evan Tahler, TaskRabbit
Background Tasks in Node - Evan Tahler, TaskRabbit
 
Caching
CachingCaching
Caching
 
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, HerokuPostgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
 
Building Scalable Websites with Perl
Building Scalable Websites with PerlBuilding Scalable Websites with Perl
Building Scalable Websites with Perl
 
(SDD402) Amazon ElastiCache Deep Dive | AWS re:Invent 2014
(SDD402) Amazon ElastiCache Deep Dive | AWS re:Invent 2014(SDD402) Amazon ElastiCache Deep Dive | AWS re:Invent 2014
(SDD402) Amazon ElastiCache Deep Dive | AWS re:Invent 2014
 
Caching basics in PHP
Caching basics in PHPCaching basics in PHP
Caching basics in PHP
 
Big data with hadoop Setup on Ubuntu 12.04
Big data with hadoop Setup on Ubuntu 12.04Big data with hadoop Setup on Ubuntu 12.04
Big data with hadoop Setup on Ubuntu 12.04
 
04 web optimization
04 web optimization04 web optimization
04 web optimization
 
HBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBaseHBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBase
 
Introduction to performance tuning perl web applications
Introduction to performance tuning perl web applicationsIntroduction to performance tuning perl web applications
Introduction to performance tuning perl web applications
 
Nginx: Accelerate Rails, HTTP Tricks
Nginx: Accelerate Rails, HTTP TricksNginx: Accelerate Rails, HTTP Tricks
Nginx: Accelerate Rails, HTTP Tricks
 
Using memcache to improve php performance
Using memcache to improve php performanceUsing memcache to improve php performance
Using memcache to improve php performance
 
Query optimization: from 0 to 10 (and up to 5.7)
Query optimization: from 0 to 10 (and up to 5.7)Query optimization: from 0 to 10 (and up to 5.7)
Query optimization: from 0 to 10 (and up to 5.7)
 
Reverse proxy & web cache with NGINX, HAProxy and Varnish
Reverse proxy & web cache with NGINX, HAProxy and VarnishReverse proxy & web cache with NGINX, HAProxy and Varnish
Reverse proxy & web cache with NGINX, HAProxy and Varnish
 
NginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniquesNginX - good practices, tips and advanced techniques
NginX - good practices, tips and advanced techniques
 
Load Balancing with Nginx
Load Balancing with NginxLoad Balancing with Nginx
Load Balancing with Nginx
 
Open Source Backup Conference 2014: Migration from bacula to bareos, by Danie...
Open Source Backup Conference 2014: Migration from bacula to bareos, by Danie...Open Source Backup Conference 2014: Migration from bacula to bareos, by Danie...
Open Source Backup Conference 2014: Migration from bacula to bareos, by Danie...
 
PyGotham 2014 Introduction to Profiling
PyGotham 2014 Introduction to ProfilingPyGotham 2014 Introduction to Profiling
PyGotham 2014 Introduction to Profiling
 
Memcache
MemcacheMemcache
Memcache
 

Destaque

Don’t Lose Your Caffeine Buzz to Cybercrime
Don’t Lose Your Caffeine Buzz to CybercrimeDon’t Lose Your Caffeine Buzz to Cybercrime
Don’t Lose Your Caffeine Buzz to Cybercrime
ThreatMetrix
 
Инвестиционная стратегия (Москва)
Инвестиционная стратегия (Москва)Инвестиционная стратегия (Москва)
Инвестиционная стратегия (Москва)
Anastasia Vinogradova
 
ASEE Metal Impingement paper 50 final
ASEE Metal Impingement paper 50 finalASEE Metal Impingement paper 50 final
ASEE Metal Impingement paper 50 final
André Eggert
 
A Review of EnglishCentral (an online video-based material)
A Review of EnglishCentral (an online video-based material) A Review of EnglishCentral (an online video-based material)
A Review of EnglishCentral (an online video-based material)
iumstech
 
Procesadores
ProcesadoresProcesadores
Procesadores
SamyMP
 
политех
политехполитех
политех
Bul1t
 
Double looplearning
Double looplearningDouble looplearning
Double looplearning
banupatmi
 
մեր բնակավայրի հիմնախնդիրները
մեր բնակավայրի հիմնախնդիրներըմեր բնակավայրի հիմնախնդիրները
մեր բնակավայրի հիմնախնդիրները
davidnikoghosyan
 

Destaque (20)

FEMTOprint Corporate Brochure
FEMTOprint Corporate BrochureFEMTOprint Corporate Brochure
FEMTOprint Corporate Brochure
 
Performance optimisation - scaling a hobby project to serious business
Performance optimisation - scaling a hobby project to serious businessPerformance optimisation - scaling a hobby project to serious business
Performance optimisation - scaling a hobby project to serious business
 
Jardas
JardasJardas
Jardas
 
Don’t Lose Your Caffeine Buzz to Cybercrime
Don’t Lose Your Caffeine Buzz to CybercrimeDon’t Lose Your Caffeine Buzz to Cybercrime
Don’t Lose Your Caffeine Buzz to Cybercrime
 
Инвестиционная стратегия (Москва)
Инвестиционная стратегия (Москва)Инвестиционная стратегия (Москва)
Инвестиционная стратегия (Москва)
 
ASEE Metal Impingement paper 50 final
ASEE Metal Impingement paper 50 finalASEE Metal Impingement paper 50 final
ASEE Metal Impingement paper 50 final
 
Assure model day 3
Assure model day 3Assure model day 3
Assure model day 3
 
A Review of EnglishCentral (an online video-based material)
A Review of EnglishCentral (an online video-based material) A Review of EnglishCentral (an online video-based material)
A Review of EnglishCentral (an online video-based material)
 
자료집 416특별법국민설명회 20140709
자료집 416특별법국민설명회 20140709자료집 416특별법국민설명회 20140709
자료집 416특별법국민설명회 20140709
 
Procesadores
ProcesadoresProcesadores
Procesadores
 
финансовый рынок _09(1)
финансовый рынок _09(1)финансовый рынок _09(1)
финансовый рынок _09(1)
 
Mendoza
MendozaMendoza
Mendoza
 
политех
политехполитех
политех
 
Implications Enclosure and Privatization of the Commons on Women’s Access to ...
Implications Enclosure and Privatization of the Commons on Women’s Access to ...Implications Enclosure and Privatization of the Commons on Women’s Access to ...
Implications Enclosure and Privatization of the Commons on Women’s Access to ...
 
Double looplearning
Double looplearningDouble looplearning
Double looplearning
 
Belajar framework code igniter xii rpl
Belajar framework code igniter xii rplBelajar framework code igniter xii rpl
Belajar framework code igniter xii rpl
 
մեր բնակավայրի հիմնախնդիրները
մեր բնակավայրի հիմնախնդիրներըմեր բնակավայրի հիմնախնդիրները
մեր բնակավայրի հիմնախնդիրները
 
Html dasar 123
Html dasar 123Html dasar 123
Html dasar 123
 
IRM archiveDoc – электронный архив: система электронного хранения документов
IRM archiveDoc – электронный архив: система электронного хранения документов IRM archiveDoc – электронный архив: система электронного хранения документов
IRM archiveDoc – электронный архив: система электронного хранения документов
 
Linking State and Non-State Justice Systems in Afghanistan
Linking State and Non-State Justice Systems in Afghanistan Linking State and Non-State Justice Systems in Afghanistan
Linking State and Non-State Justice Systems in Afghanistan
 

Semelhante a Boost your website by running PHP on Nginx

Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12
Stephan Hochdörfer
 
June8 presentation
June8 presentationJune8 presentation
June8 presentation
nicobn
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
Remy Sharp
 

Semelhante a Boost your website by running PHP on Nginx (20)

Pecl Picks
Pecl PicksPecl Picks
Pecl Picks
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to Chef
 
Frontend Servers and NGINX: What, Where and How
Frontend Servers and NGINX: What, Where and HowFrontend Servers and NGINX: What, Where and How
Frontend Servers and NGINX: What, Where and How
 
VUG5: Varnish at Opera Software
VUG5: Varnish at Opera SoftwareVUG5: Varnish at Opera Software
VUG5: Varnish at Opera Software
 
Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to Chef
 
CouchDB for Web Applications - Erlang Factory London 2009
CouchDB for Web Applications - Erlang Factory London 2009CouchDB for Web Applications - Erlang Factory London 2009
CouchDB for Web Applications - Erlang Factory London 2009
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
High Availability Content Caching with NGINX
High Availability Content Caching with NGINXHigh Availability Content Caching with NGINX
High Availability Content Caching with NGINX
 
Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!
 
High Availability Content Caching with NGINX
High Availability Content Caching with NGINXHigh Availability Content Caching with NGINX
High Availability Content Caching with NGINX
 
HTTP Caching and PHP
HTTP Caching and PHPHTTP Caching and PHP
HTTP Caching and PHP
 
The Need For Speed: Caching Fundamentals
The Need For Speed: Caching FundamentalsThe Need For Speed: Caching Fundamentals
The Need For Speed: Caching Fundamentals
 
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
 
June8 presentation
June8 presentationJune8 presentation
June8 presentation
 
Running PHP on nginx
Running PHP on nginxRunning PHP on nginx
Running PHP on nginx
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
 
Top ten-list
Top ten-listTop ten-list
Top ten-list
 

Mais de Harald Zeitlhofer (7)

Running PHP on Nginx / PHP wgtn
Running PHP on Nginx / PHP wgtnRunning PHP on Nginx / PHP wgtn
Running PHP on Nginx / PHP wgtn
 
PHP App Performance / Sydney PHP
PHP App Performance / Sydney PHPPHP App Performance / Sydney PHP
PHP App Performance / Sydney PHP
 
PHP application performance
PHP application performancePHP application performance
PHP application performance
 
PHP Application Performance
PHP Application PerformancePHP Application Performance
PHP Application Performance
 
Nginx performance monitoring with Dynatrace
Nginx performance monitoring with DynatraceNginx performance monitoring with Dynatrace
Nginx performance monitoring with Dynatrace
 
Nginx, PHP, Apache and Spelix
Nginx, PHP, Apache and SpelixNginx, PHP, Apache and Spelix
Nginx, PHP, Apache and Spelix
 
Nginx, PHP and Node.js
Nginx, PHP and Node.jsNginx, PHP and Node.js
Nginx, PHP and Node.js
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 

Boost your website by running PHP on Nginx

  • 1. Boost your website by running PHP on Nginx Tips and tricks for high performance websites Harald Zeitlhofer @HZeitlhofer harald.zeitlhofer@dynatrace.com
  • 2. Harald Zeitlhofer • Technology Strategist at Dynatrace • Database and Web Development • Love to discover new things
  • 3. Tips and tricks for high performance websites
  • 4. Once upon a time... performance matters !!!
  • 7.
  • 8.
  • 9. Modern Web Pages: lots of static content 434 Resources in total on that page: 230 JPEGs, 75 PNGs, 50 GIFs, … more than 20MB page size
  • 10. Fifa.com during Worldcup 2014 http://blog.dynatrace.com/2014/05/21/is-the-fifa-world-cup-website-ready-for-the-tournament/ largest item on page: favicon.ico with 370 KB!!! but also some heavyweight CSS and JS files with up to 288 KB!!!
  • 11. • Expires • Last-Modified • Etag • Cache-Control
  • 12. cached content can still create roundtrips to the network!
  • 15. PHP-FPM FastCGI Process Manager Available since 5.3.3 Stable since 5.4.1
  • 16. PHP-FPM • Installation • Pool configuration /etc/php/7.0/fpm/pool.d/www.conf [www] user = www-data group = www-data listen = 127.0.0.1:9000# for Unix socket: unix:/var/run/php7.0-fpm.sock; root@hzvm01:/etc/nginx/sites-enabled# ps -ef | grep php root 6435 1 0 14:39 ? 00:00:32 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf) spelix 6439 6435 0 14:39 ? 00:00:00 php-fpm: pool batch spelix 6440 6435 0 14:39 ? 00:00:00 php-fpm: pool batch www-data 10576 6435 1 18:45 ? 00:00:48 php-fpm: pool www www-data 10920 6435 1 18:47 ? 00:00:47 php-fpm: pool www www-data 10927 6435 1 18:47 ? 00:00:46 php-fpm: pool www sudo apt-get install php7.0-fpm
  • 17. Nginx Lightweight HTTP server Event based request handling Open Source project (BSD) Development started in 2002 by Igor Sysoev to solve the c10k problem Commercial version NGINX Plus
  • 19. /etc/nginx/nginx.conf # max_clients = worker_processes * worker_connections worker_processes 8; # number of CPUs pcre_jit on; # enable JIT for regex events { worker_connections 1024; multi_accept on; }
  • 20. Integration • Static content served by Nginx • Dynamic requests sent to PHP server { listen 80; server_name www.yourdomain.com; root /var/www/test; index index.php index.html index.htm; location ~* .(html|js|css|gif|jpg|jpe|jpeg|png|bmp|tif|pdf|ico)$ { try_files $uri =404; } location / { try_files $uri $uri/ =404; } location ~* .php$ { fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; } }
  • 21. Communication via sockets • TCP vs Unix • Unix slightly faster when used on localhost • Use TCP for high load location ~* .php$ { fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } fastcgi_pass unix:/var/run/php7.0-fpm.sock;
  • 23. URL rewrite ... RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php ... http://www.mysite.com/news/browse/2014  to be processed by index.php
  • 24. URL rewrite server { listen 80; root /var/www; index index.php index.html index.htm; server_name www.mysite.com; location / { try_files $uri $uri/ @missing; } location @missing { rewrite (.*) /index.php; } location ~ .php$ { fastcgi_index index.php; include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; } } http://www.mysite.com/news/browse/2014  to be processed by index.php
  • 25. URL rewrite using Nginx/PHP-FPM there’s a better way: server { listen 80; root /var/www; index index.php index.html index.htm; server_name www.mysite.com; location /images { try_files $uri =404; } location /scripts { try_files $uri =404; } location / { fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/index.php; fastcgi_pass unix:/var/run/php5-fpm.sock; } } <?php $params = explode('/', $_SERVER["DOCUMENT_URI"]); ...
  • 28. Nginx FastCGI cache • Part of Nginx' FastCGI module fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=APPKEY:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; location ~* .php$ { fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_cache APPKEY; fastcgi_cache_valid 200 60m; }
  • 29. FastCGI cache in action <?php echo time()."n"; ?>
  • 30. FastCGI cache in action <?php echo time()."n"; ?>
  • 31. FastCGI cache in action <?php echo time()."n"; ?>
  • 32. Full page cache with Memcached <?php ... function __construct () { $this->c = new Memcached(); $this->c->addServer('localhost',11211); } function setCache ($key, $content) { $this->c->set($key, $content); } ... // get HTML content $html = $this->renderPage(); $this->setCache($_SERVER['REQUEST_URI'], $html); echo $html; ... ?>
  • 33. Data cache with Memcached <?php ... function __construct () { $this->c = new Memcached(); $this->c->addServer('localhost',11211); } function setCache ($key, $content) { $this->c->set($key, $content); } ... // get data structure $newslist = $this->getNewsList(); $this->setCache('/data/news/getlist', json_encode($newslist)); ... ?>
  • 34. Full page / data cache with Nginx and Memcached • ngx_http_memcached_module server { location / { set $memcached_key "$uri"; memcached_pass localhost:11211; error_page 404 502 504 = @notincache; } location @notincache { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
  • 35. PHP, 5k requests, concurrency 100 0 1 2 3 4 5 6 7 8 Apache+PHP Nginx+PHP Nginx+Memcached <?php echo "Hello World"; ?> 7,28 4,6 3,05 totaltimeinsec
  • 36. Caching Static Content • set HTTP response expires header location ~ .(html|js|css|gif|jpg|jpe|jpeg|png|bmp|tif|pdf|ico)$ { expires 365d; access_log off; error_log off; log_not_found off; add_header Cache-Control "public"; try_files $uri =404; }
  • 37. Filehandle Caching • keep handlers for requested static files open open_file_cache max=1000 inactive=5m; open_file_cache_valid 60s; open_file_cache_min_uses 5; open_file_cache_errors off;
  • 38. FastCGI request forwarding server { listen 80; root /var/www/mysite; server_name www.mysite.com; location / { try_files $uri =405; } location ~ .php$ { fastcgi_pass 192.168.56.12:9000; fastcgi_index index.php; include fastcgi_params; } }
  • 39. FastCGI request forwarding upstream php { server 192.168.56.12:9000; } server { listen 80; root /var/www/mysite; server_name www.mysite.com; location / { try_files $uri =405; } location ~ .php$ { fastcgi_pass php; fastcgi_index index.php; include fastcgi_params; } }
  • 40. Load balancing upstream php { ip_hash; server unix:/var/run/php5-fpm.sock weight=5; server 192.168.56.12:9000 weight=2; server 192.168.56.13:9000; server 192.168.56.14:9000 backup; } server { listen 80; root /var/www/mysite; server_name www.mysite.com; location / { try_files $uri =405; } location ~ .php$ { fastcgi_pass php; fastcgi_index index.php; include fastcgi_params; } }
  • 42.
  • 43.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52. My favorite performance tools • Load Generator (Apache Benchmark, Selenium, JMeter) • Firebug, Google Developer Tools • Dynatrace Application Monitoring Free Trial • Free trial license for 30 days • Free personal license for developers • Dynatrace Ruxit • 2016 free hours for monitoring http://bit.ly/monitoring-2016 http://bit.ly/dttrial
  • 54. Harald Zeitlhofer Performance Advocate @HZeitlhofer harald.zeitlhofer@dynatrace.com http://blog.dynatrace.com Dynatrace Free Trial Free Personal License Ruxit Free Trial http://bit.ly/monitoring-2016 events@dynatrace.com

Notas do Editor

  1. application performance. high performance web sites scalable cloud infrastructure flexible microservice architecture DBA: database tuning Sysop: webservers, caching servers, reverse proxies, load balancers migrated to nginx Developer: new frameworks
  2. 304 conditional caching with Entity Tag (E-Tag) header set