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

Going Beyond mod_php

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

Going Beyond mod_php

A discussions of architecture options available for today's PHP deployments. Presented to Kansas City's PHP User Group.

Daniel Holmes

August 17, 2013

Transcript

45 slides
  1. Questions to Answer today • What could be better than

    Apache & mod_php? • What is php-fpm? What does it look like? • How does it help Apache be better? • What kind of extra features are in php-fpm? • What is "Opcode caching"? • What is Nginix? • But not exactly - How do I set it up?
  2. Apache is so much more Loaded Modules: core_module mpm_prefork_module http_module

    so_module auth_basic_module auth_digest_module authn_file_module authn_alias_module authn_anon_module authn_dbm_module authn_default_module authz_host_module authz_user_module authz_owner_module authz_groupfile_module authz_dbm_module authz_default_module ldap_module authnz_ldap_module include_module log_config_module logio_module env_module ext_filter_module mime_magic_module expires_module deflate_module headers_module usertrack_module setenvif_module mime_module dav_module status_module autoindex_module vhost_alias_module negotiation_module dir_module actions_module speling_module userdir_module alias_module rewrite_module cache_module suexec_module mem_cache_module version_module security2_module unique_id_module php5_module proxy_ajp_module ssl_module PHP is just one of many: apachectl -t -D DUMP_MODULES
  3. Apache is so much more Loaded Modules: core_module mpm_prefork_module http_module

    so_module auth_basic_module auth_digest_module authn_file_module authn_alias_module authn_anon_module authn_dbm_module authn_default_module authz_host_module authz_user_module authz_owner_module authz_groupfile_module authz_dbm_module authz_default_module ldap_module authnz_ldap_module include_module log_config_module logio_module env_module ext_filter_module mime_magic_module expires_module deflate_module headers_module usertrack_module setenvif_module mime_module dav_module status_module autoindex_module vhost_alias_module negotiation_module dir_module actions_module speling_module userdir_module alias_module rewrite_module cache_module suexec_module mem_cache_module version_module security2_module unique_id_module php5_module proxy_ajp_module ssl_module PHP is just one of many: apachectl -t -D DUMP_MODULES
  4. What makes this better? • Apache gets to do what

    it does best • PHP becomes a service of flexible, restartable application pools
  5. php-fpm pools configured separately • logging • custom runtime environments

    • resource allocation • running as user/groups • restrictions around what can access the pool
  6. configuring php-fpm pools [myphpadmz] user = www-phpadm group = www-phpadm

    listen = /tmp/php5-myphpadmz-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0666 listen.allowed_clients = 127.0.0.1
  7. configuring php-fpm pools pm = dynamic pm.max_children = 10 pm.start_servers

    = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6 pm.max_requests = 500 chdir = /u01/myphpadmz/public_html security.limit_extensions = .php
  8. configuring php-fpm pools ; Pass environment variables like LD_LIBRARY_PATH. ;

    All $VARIABLEs are taken from the current environment. ; Default Value: clean env env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
  9. configuring php-fpm pools ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f [email protected]

    php_flag[display_errors] = off php_admin_value[error_log] = /var/weblogs/phpmyadmz/php.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 128M
  10. configuring php-fpm pools ;access.log = log/$pool.access.log ;access.format = %R -

    %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo} M %C%% ;slowlog = log/$pool.log.slow ;request_slowlog_timeout = 0 ;request_terminate_timeout = 0 ;rlimit_files = 1024 ;rlimit_core = 0 ;chroot = ;catch_workers_output = yes
  11. The missing Link For Apache, is generally: • mod_fcgi •

    mod_fastcgi This can get confusing when you are looking at blogs, so listen up!
  12. mod_fcgi Newer, Bigger Brother Duplicates a lot already in php-fpm

    Useful for non php-fpm cgi’s Can be used with mod_suexec Available in most package managers
  13. mod_fastcgi Simple to configure Doesn’t manage it’s own pool Is

    simply a FastCGI interface May not come with your Package Manager, but easy to build
  14. mod_fastcgi in apache <IfModule mod_fastcgi.c> AddHandler php5-myphpa-fcgi .php Action php5-myphpa-fcgi

    /php5.myphpa.fcgi Alias /php5.myphpa.fcgi /usr/lib/cgi-bin/php5.myphpa.fcgi FastCGIExternalServer /usr/lib/cgi-bin/php5.myphpa.fcgi -socket /tmp/php5-myphpadmz-fpm.sock </IfModule>
  15. Kicking up the Heat Other things we can do: •

    Adding an Opcode Cache • Logging Slow PHP requests • Replacing Apache?
  16. Adding an OpCode cache • Full stack frameworks are big

    • Wordpress is big • Drupal is big • 100+ php scripts need to be compiled per requests • php's compiler is still FREAKY FAST • But still, that's a lot of compiling
  17. Opcode Caching Options • Zend's Opcache ◦ Recently Open Sourced,

    built into PHP 5.5 • APC ◦ LOTS of years of production use. ◦ Additional software ◦ APC can also act like a generic cache much like mcached...but that's a whole other talk
  18. Zend’s PHP’s Opcache Looking at Chris Jones' post, in 5.5

    is should be as easy as: ; Adding the extension ... zend_extension=opcache.so ; and turning it on... opcache.enable=On
  19. APC - Alternate PHP Cache Install from PECL or your

    OS's package manager Can use a .php script to see statistics LOTS of blog posts on helping configure with your setup http://www.electrictoolbox.com/apc-php-cache-information/
  20. Replacing Apache Apache is still a GREAT, mature, well tested

    server Now we get to ask the questions: • Do we need or even use what it offers? • Can we squeeze out more performance with something else? • Is there something easier to configure?
  21. Nginx Was originally a Reverse Proxy -- so built for

    speed May take less memory (so more for php and mysql) Supports fastcgi natively Allows precise control with a simpler syntax Is not Apache -- so no .htaccess files Still "new" compared to Apache's maturity, but this doesn't mean experimental
  22. Nginx Config location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info

    ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php. ini fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params;
  23. Nginx Config Like Apache, you can also configure Nginx to:

    • route all non-matching requests through an index.php script (Wordpress, Drupal, etc) • block access to config files, etc. • configure extra modules to add functionality
  24. Want to dive deeper? Just ask! KC PUG is always

    looking for speakers and topic ideas Don’t be afraid to speak up! http://www.meetup.com/kcphpug/suggestion/

More Decks by Daniel Holmes

Other Decks in Programming