ãã®èšäºã§ã¯ãé©åãªãã£ãã·ã¥ãå§çž®ããã®ä»ã®ãµãŒããŒããã³ã¯ã©ã€ã¢ã³ãåŽã®æé©åã«ãããWordPressããã°ãã©ã®ããã«æ©èœãããã«ã€ããŠèª¬æããŸãã å·çæç¹ã§ãVDSã®æ©èœã¯æ¬¡ã®ãšããã§ãã
CPUïŒ1 x 2GHz
HDDïŒ10Gb
RAMïŒ512Mb
OSïŒDebian 8 x64
ã·ã¹ãã ã®ã¹ããŒã ã¯æ¬¡ã®ãšããã§ãã

åè·¯ã®èª¬æ
ãµã€ã蚪åè
ã®å Žåããããã¯HTTPSã«ãªãã€ã¬ã¯ããããnginxã¯Varnishã®ãããã·ãšããŠæ©èœããŸããäžæ¹ãnginxã¯HTTPSæ¥ç¶ã®å®è£
ã«å ããŠããŠãŒã¶ãŒã«éä¿¡ãããããŒã¿ã®gzipå§çž®ãå®è¡ããŸãã ãã®ã·ã¹ãã ã®æ¬¡ã®èŠçŽ ã¯ãããŒã6081ã§ã®æ¥ç¶ãåŸ
æ©ããŠããVarnish HTTP Acceleratorã§ãã ã¯ã©ã€ã¢ã³ããããªã¯ãšã¹ããåãåããšããã£ãã·ã¥å
ã§ãªã¯ãšã¹ããããURLãæ€çŽ¢ããèŠã€ãã£ãå Žåã¯ããã«ããã³ããšã³ããè¿ããŸãã ãããã£ãŠãèŠæ±ããããã¡ã€ã«ããã£ãã·ã¥å
ã«ããå ŽåãããŒãžèŠæ±ã®é床ã¯éçããŒã¿ã®èŠæ±ã®é床ã«äœäžããŸãã èŠæ±ããããã¡ã€ã«ããã£ãã·ã¥ã«èŠã€ãããªãå ŽåãVarnishã¯èŠæ±ãããã¯ãšã³ãã«æž¡ããŸãã Varnishã¯ã¯ã©ã€ã¢ã³ãåŽã®æé©åãå®è£
ããŸããããã§ã¯ãCache-ControlããããŒãšExpiresããããŒãéçããŒã¿ã«èšå®ãããã¯ã©ã€ã¢ã³ãåŽã§ãã®ããŒã¿ããã£ãã·ã¥ããå¿
èŠãããããšããã©ãŠã¶ãŒã«ç€ºããŸãã ãããã£ãŠããµã€ãã®ããŒãæéãççž®ããããµãŒããŒã®è² è·ã軜æžãããŸãã
ç¹°ãè¿ããŸãããnginxã¯ããã¯ãšã³ããšããŠæ©èœãã127.0.0.1ïŒ81ã§æ¥ç¶ãåŸ
æ©ããŸãã PHPã®è§£éã¯ãFPMã䜿çšããŠå®è£
ãããŸãã PHPããŒãžã§ã³ã¯5.6ã§ãOPcacheã¢ã¯ã»ã©ã¬ãŒã¿ãŒã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã DBMSãšããŠ-MariaDB10ãããã¯ããã©ãŒãã³ã¹ãæé«ã®1ã€ã§ãããMySQLã®ãã©ãŒã¯ã®äžã§é©åºŠã«RAMããŒã¿ããŒã¹ãæ¶è²»ããŸãã MyISAMã¯ããŒãã«ãšã³ãžã³ã§ããæžã蟌ã¿ã¯ãã£ãã«è¡ãããªããããäž»ã«ãã®ãšã³ãžã³ãæé©åãããèªã¿åãã§ãã InnoDBãšã³ãžã³ãç¡å¹ã«ããããšã«ãããRAMãä¿åãããŸãã æåŸã«ãWordPressã¯Varnish HTTP Purgeãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ãããCMSãšããŠæ©èœãã倿Žãè¡ãããããŒãžã®ã¢ãã¬ã¹ã«PURGEãªã¯ãšã¹ããéä¿¡ããŸããããã«ããããããã®ããŒãžã®Varnishãã£ãã·ã¥ãã¯ãªã¢ãããŸãã ãããã£ãŠããŠãŒã¶ãŒã¯åžžã«ææ°ããŒãžã§ã³ã®ãµã€ããååŸããŸãã æ¬¡ã«ããããã®ã³ã³ããŒãã³ãã®ã€ã³ã¹ããŒã«ãšæ§æãããã³çºçããåé¡ã«ã€ããŠè©³ãã説æããŸãã
nginxãã€ã³ã¹ããŒã«ããŠæ§æãã
ã€ã³ã¹ããŒã«ïŒ
apt-get install nginx
ã¡ã€ã³èšå®/etc/nginx/nginx.confã®å
容ïŒ
ããã¯ãšã³ãæ§æãã¡ã€ã«/etc/nginx/conf.d/backend.confãäœæããŸãã
server {
nginxã®HTTPSèšå®ã®è©³çްãªèª¬æã®ãããã¯ã«ã€ããŠã¯ããã®èšäºãèªãããšããå§ãããŸãïŒ
habrahabr.ru/post/252821ããã³ããšã³ãæ§æãã¡ã€ã«/etc/nginx/conf.d/frontend.confãäœæããŸãã
server {
nginxã®èšå®ãèªã¿çŽããŸãïŒ
service nginx reload
ããã§ããµã€ãã«ã¢ã¯ã»ã¹ããããšãããšããšã©ãŒ502ã衚瀺ãããŸããã¯ãã¹ã¯ãŸã å®è¡ãããŠããªããããããã¯æ£åžžã§ãã
Varnishãã€ã³ã¹ããŒã«ããŠæ§æãã
ãã¹ãã€ã³ã¹ããŒã«ããŸãã
apt-get install varnish
èµ·åãã©ã¡ãŒã¿ãã¡ã€ã«ã¯ããã«ãããŸã-/ etc / default / varnishã DAEMON_OPTSã§ã次ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã
DAEMON_OPTS="-a :6081 \ -T 127.0.0.1:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s malloc,128m"
-a-Varnishãæ¥ç¶ãåãå
¥ããããŒããèšå®ããŸãããã®å Žåãããã³ããšã³ããã-nginxã
-T-管çè
ãããã§å転ããŠããŸãã詳现ã¯-Sãã©ã°ã®èª¬æã§ãã
-f-VCLæ§æãã¡ã€ã«ãèŠæ±ã®åŠçãšVarnishã§ã®ãã£ãã·ã¥ã®ã«ãŒã«ãå®çŸ©ããããã®ç¹å¥ãªèšèªã
-S-Varnishã«ã¯ç®¡çããã«ããããŸãã å
¥åããã«ã¯ãvarnishadmã³ãã³ããå®è¡ããå¿
èŠãããããŠãŒã¶ãŒã¯èªèšŒã®ããã«/ etc / varnish / secretãã¡ã€ã«ãžã®èªã¿åãæš©éãæã£ãŠããå¿
èŠããããŸãã
-sã¯ããã£ãã·ã¥ã®å Žæãšãã®ãµã€ãºïŒãã®å Žåã¯RAMã®128MBïŒã瀺ããŸãã
ããããæ¢ã«çè§£ããŠããããã«ãæãè峿·±ãã®ã¯ããªã¯ãšã¹ããåŠçããããã®ã«ãŒã«ãå«ããã¡ã€ã«ã§ç§ãã¡ãåŸ
ã£ãŠããããšã§ãã Varnishããã»ã¹ã®éå§æã«ããã®ãã¡ã€ã«ãã³ã³ãã€ã«ãããŸãã VCLã¯ããããã®ã«ãŒã«ã説æããããã€ãã®æ©èœãµãã»ã¯ã·ã§ã³ã䜿çšããŸãã ãããã«ã€ããŠç°¡åã«èª¬æããå
¬åŒãŠã§ããµã€ãã§èªãããã«å®å
šãªèª¬æããå§ãããŸãã
sub vcl_recv-ãã®é¢æ°ã¯ãã¯ã©ã€ã¢ã³ãããèŠæ±ãæ¥ããšãã«äœ¿çšãããŸãã
sub vcl_pass-ã¯ã©ã€ã¢ã³ãèŠæ±ãããã¯ãšã³ãã«çŽæ¥æž¡ãå¿
èŠãããå Žåã«å®è¡ããããã£ãã·ã¥ããããã£ãã·ã¥å
ã§äžèŽãããã®ãæ¢ããŸããã
sub vcl_hash-ãã£ãã·ã¥ã«ãŒã«ãå®çŸ©ããŸããããšãã°ãã¯ã©ã€ã¢ã³ãã«ããå§çž®ã®ãµããŒãããŸãã¯ã¯ã©ã€ã¢ã³ãã®ä»ã®æ©èœãªã©ãç°ãªãæ¡ä»¶ã«å¿ããŠãåãããã¥ã¡ã³ãã«å¯ŸããŠè€æ°ã®ãªããžããªã䜿çšã§ããŸãã ç§ãã¡ã®å ŽåãVarnishã®ã¯ã©ã€ã¢ã³ãã¯ããã³ããšã³ãã«nginxãããªãããã䜿çšãããŸããã
sub vcl_backend_response-ãã®é¢æ°ã¯ããªã¯ãšã¹ããããã¯ãšã³ãïŒnginxïŒããæ¥ããšãã«äœ¿çšãããŸãã
sub vcl_deliver-ã¯ã©ã€ã¢ã³ãã«ããŒã¿ãéä¿¡ããçŽåã«äœ¿çšããŸããããšãã°ãããããŒã远å /倿ŽããŸãã
VCLã³ã³ããŒãã³ãã®æäœå³ã¯ã次ã®ããã«è¡šãããšãã§ããŸãã

vcl_miss颿°ããããã¯ãšã³ãã«ã¢ã¯ã»ã¹ãããšãããã¯ãšã³ãã®å¿çããã£ãã·ã¥ã«éä¿¡ãããŸãã èšèªèªäœã¯Cã«éåžžã«ãã䌌ãŠããŸããå§ããŸãããã ãã¡ã€ã«/etc/varnish/default.vclãéããã³ãŒãã£ã³ã°ãéå§ããŸãã
# , VCL 4 vcl 4.0; # backend default { .host = "127.0.0.1"; .port = "81"; } # IP/, PURGE- acl purge { "localhost"; "127.0.0.1"; } # sub vcl_recv { # if (req.method == "PURGE") { # , if (!client.ip ~ purge) { return(synth(405, "This IP is not allowed to send PURGE requests.")); } return (purge); } # POST- Basic- if (req.http.Authorization || req.method == "POST") { return (pass); } # if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true") { return (pass); } # sitemap robots, sitemap Google XML Sitemaps if (req.url ~ "sitemap" || req.url ~ "robots") { return (pass); } # cookies, "has_js" "__*", CloudFlare Google Analytics, Varnish , cookies. set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js)=[^;]*", ""); # ";" cookies, set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", ""); # Quant Capital cookies ( ) set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", ""); # wp-settings-1 cookie set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", ""); # wp-settings-time-1 cookie set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", ""); # wp test cookie set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", ""); # cookie, ( ) if (req.http.cookie ~ "^ *$") { unset req.http.cookie; } # cookies, if (req.url ~ "\.(css|js|png|gif|jp(e)?g|swf|ico|woff|svg|htm|html)") { unset req.http.cookie; } # cookies "wordpress_" "comment_" if (req.http.Cookie ~ "wordpress_" || req.http.Cookie ~ "comment_") { return (pass); } # cookie , if (!req.http.cookie) { unset req.http.cookie; } # cookies, WordPress if (req.http.Authorization || req.http.Cookie) { # Not cacheable by default return (pass); } # return (hash); } sub vcl_pass { return (fetch); } sub vcl_hash { hash_data(req.url); return (lookup); } # sub vcl_backend_response { # unset beresp.http.Server; unset beresp.http.X-Powered-By; # robots sitemap if (bereq.url ~ "sitemap" || bereq.url ~ "robots") { set beresp.uncacheable = true; set beresp.ttl = 30s; return (deliver); } # , ... if (bereq.url ~ "\.(css|js|png|gif|jp(e?)g)|swf|ico|woff|svg|htm|html") { # unset beresp.http.cookie; # - set beresp.ttl = 7d; # Cache-Control Expires, , unset beresp.http.Cache-Control; set beresp.http.Cache-Control = "public, max-age=604800"; set beresp.http.Expires = now + beresp.ttl; } # if (bereq.url ~ "wp-(login|admin)" || bereq.url ~ "preview=true") { set beresp.uncacheable = true; set beresp.ttl = 30s; return (deliver); } # , if (!(bereq.url ~ "(wp-login|wp-admin|preview=true)")) { unset beresp.http.set-cookie; } # POST- Basic if ( bereq.method == "POST" || bereq.http.Authorization ) { set beresp.uncacheable = true; set beresp.ttl = 120s; return (deliver); } # if ( bereq.url ~ "\?s=" ){ set beresp.uncacheable = true; set beresp.ttl = 120s; return (deliver); } # , ! if ( beresp.status != 200 ) { set beresp.uncacheable = true; set beresp.ttl = 120s; return (deliver); } # set beresp.ttl = 1d; # TTL set beresp.grace = 30s; return (deliver); } # sub vcl_deliver { # unset resp.http.X-Powered-By; unset resp.http.Server; unset resp.http.Via; unset resp.http.X-Varnish; return (deliver); }
次ã«ãã³ãã³ããå®è¡ããŸãã
service varnish restart
ãã©ãŠã¶ã§ãµã€ãã«æž¡ããšãindex.phpã衚瀺ãããŸããããã¯äºåã«äœæããå¿
èŠããããŸãã
ãã¹ãšDebian 8ã®åé¡
ããããVarnishãçä¿¡æ¥ç¶ãåãå
¥ããããŒãã倿Žããå ŽåããŸãã¯ãã£ãã·ã¥ãµã€ãºã倿Žããå Žåã¯ã©ãã§ãããã å
¬åŒããã¥ã¡ã³ããã倿ãããšããã¹ã«æ²¿ã£ãŠé
眮ãããVarnishèµ·åãã©ã¡ãŒã¿ãŒã䜿çšããŠãã¡ã€ã«ã倿Žããå¿
èŠããããŸãïŒ/ etc / default / varnishãããŠãµãŒãã¹ãåèµ·åããŸãã ããããéããŸãïŒ äœã倿ŽãããŸãããå
é ã«ç§»åããŠãcãããŒãæŒããšã以åã®èšå®ã§ãµãŒãã¹ãéå§ãããŠããããšãããããŸãã åé¡ã¯ãDebianã®æ°ããããŒãžã§ã³ã§ã¯ãinit.dã®ä»£ããã«systemdãåæåã·ã¹ãã ãšããŠäœ¿çšãããããã/ lib / systemd / system / varnish.serviceãã¡ã€ã«ã«ç§»åããŠãExecStartãã£ã¬ã¯ãã£ãã«åãèµ·åãã©ã¡ãŒã¿ãŒãæžã蟌ãå¿
èŠããããšããããšã§ãã
[Unit] Description=Varnish HTTP accelerator [Service] Type=forking LimitNOFILE=131072 LimitMEMLOCK=82000 ExecStartPre=/usr/sbin/varnishd -C -f /etc/varnish/default.vcl ExecStart=/usr/sbin/varnishd -a :6081 -T 127.0.0.1:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,128m ExecReload=/usr/share/varnish/reload-vcl [Install] WantedBy=multi-user.target
ä¿ååŸã次ã®ã³ãã³ããå®è¡ããŠå€æŽãæå¹ã«ããŸãã
systemctl daemon-reload service varnish restart
çŸæç¹ã§ã¯ããã®åé¡ã¯ãã€ãã©ã®ããã«è§£æ±ºãããã¯äžæã§ãããããéçºè
ã«æžã蟌ãŸããŸãããã®ãããæŽæ°åŸã«äžåºŠãã¹ãŠãèœã¡ãªãããã«ãäž¡æ¹ã®ãã¡ã€ã«ã«åã倿Žãå ããŠãã ããã
PHP-FPMã®ã€ã³ã¹ããŒã«ãšæ§æ
DBMSã䜿çšããããã«FPMãšPHPã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã
apt-get install php5-fpm php5-mysqlnd
æ§æãã¡ã€ã«/etc/php5/fpm/pool.d/www.confã«ç§»åããŠããã£ã¬ã¯ãã£ãã倿ŽããŸãã
listen = 127.0.0.1:9000
以äžãžïŒ
listen = /var/run/php5-fpm.sock
åããã¡ã€ã«ã§ãã¯ãŒã«ãŒã®èšå®ãèšå®ããŸãã
; pm = dynamic ; , , pm.max_spare_servers. pm.max_children = 10 ; FPM pm.start_servers = 1 ; ( ) pm.min_spare_servers = 1 ; ( , ) pm.max_spare_servers = 3 ; , , pm.max_requests = 500
/etc/php5/fpm/php.iniã®ããã€ãã®ãã£ã¬ã¯ãã£ãã倿ŽããŸã
upload_max_filesize = 10M post_max_size = 12M allow_url_fopen = Off
post_max_sizeã¯ãupload_max_filesizeãããå°ã倧ããèšå®ãããŸããããã¯ããã¡ã€ã«ã«å ããŠããªã¯ãšã¹ãã«ä»ã®ããŒã¿ãå«ãŸããããã§ãã
ããã§ã¯ãallow_url_fopenãã£ã¬ã¯ãã£ãã䜿çšããŠããªã¢ãŒãã«ããã¹ã¯ãªããã®å®è¡ãçŠæ¢ããŠããŸãïŒãªã¢ãŒãã€ã³ã¯ã«ãŒãã®è匱æ§ãæªçšããå¯èœæ§ãæé€ããŠããŸãïŒã
ãããŠãèšå®ãåèªã¿èŸŒã¿ããããFPMã«æç€ºããŸãã
service php5-fpm reload
phpinfoïŒïŒãåºåãããã¡ã€ã«ãäœæãããã©ãŠã¶ã§ã¢ã¯ã»ã¹ãããšããã¹ãŠãæ©èœããã¯ãã§ãã æ¢ã«ãã¹ã«ãã£ãã·ã¥ãããŠããããšãå¿ããªãã§ãã ãããPHPã®æ§æã倿ŽããŠãããã©ãŠã¶ãŒã§æŽæ°ãããŸããã ãã®ãã¡ã€ã«ãVarnishã§ã¹ãããããã«ãŒã«ãäœæããããVarnishã§ã¯ãªããããã·ããã¹ãäžã«ããŒã81ã®ããã¯ãšã³ãã«çŽæ¥ãããã·ããããšãã§ããŸãã
MariaDBãã€ã³ã¹ããŒã«ããŠæ§æãã
ãã®DBMSãéžæããçç±ã¯ãããã©ãŒãã³ã¹ãé«ããéãè² è·ã«èããèœåããããMySQLãšæ¯èŒããŠRAMã®æ¶è²»éãå°ãªãããšãšãWordPressãšã®å®å
šãªäºææ§ãããããã§ãã ã€ã³ã¹ããŒã«ã¯éåžžã«ç°¡åã§ãrootãŠãŒã¶ãŒã®ãã¹ã¯ãŒããèŠæ±ãããŸãã
apt-get install mariadb-server
MyISAMã¯ããŒãã«ãšã³ãžã³ãšããŠäœ¿çšããŸããããã¯ãããŒãã«ãžã®æžã蟌ã¿ããŸãã§ãããèªã¿åãæã«MyISAMãæé«ã®ããã©ãŒãã³ã¹ãçºæ®ããããã§ãã InnoDBãµããŒããå®å
šã«ç¡å¹ã«ããŠãRAMãè§£æŸããŸããã èšå®ã¯/etc/mysql/my.cnfãã¡ã€ã«ã«ä¿åãããŸãã 倿Žãããã£ã¬ã¯ãã£ãã®ã¿ã説æããŸãã
# key_buffer = 64M # query_cache_size = 32M # MyISAM default-storage-engine=MyISAM # InnoDB skip-innodb
倿Žãä¿åããåŸããµãŒãã¹ãåèµ·åããŸãã
service mysql restart
WordPressã®ã«ã¹ã¿ãã€ãº-ãã¹HTTPããŒãžãã©ã°ã€ã³
WP管çããã«ã§ãVarnish HTTP Purgeããã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããŸãã çŸåšãããŒã¿ãæŽæ°ãããšã倿ŽãããããŒãžã«PURGEãªã¯ãšã¹ããéä¿¡ãããVarnishã®ãã£ãã·ã¥ãã¯ãªã¢ããã蚪åè
ã®ããŒã¿ã¯åžžã«æŽæ°ãããŸãã
远å ã®æé©å
Varnishã§ã¯ã©ã€ã¢ã³ãåŽãæé©åããããã«ãããŒã«ã«ã¯ã©ã€ã¢ã³ããã£ãã·ã¥ã«éçããŒã¿ãä¿åãããããã©ãŠã¶ãŒã«æç€ºããŸãã ãã ããããã«æé©åããå Žåã¯ã
developers.google.com / speed / pagespeed / insightsã«ã¢ã¯ã»ã¹ããŠããµã€ãã®URLãŸãã¯ç¹å®ã®ããŒãžãå
¥åããŠãã ããã æšå¥šäºé
ã®ãªã¹ããšãcssããã³jsã¹ã¿ã€ã«ã®å§çž®ããŒãžã§ã³ãå«ãã¢ãŒã«ã€ããæäŸãããŸãã ããªãã®ãŠã§ããµã€ãã§ãããã眮ãæãã転éãããããŒã¿ã®éãæžå°ãããããããŠã³ããŒãé床ãããã«éããªããŸãããµãŒããŒã®è² è·ãšãã£ãã·ã¥å
ã®ãããã®ãã¡ã€ã«ãå æããã¹ããŒã¹ãæžå°ããŸãã
ãã©ã³ããjqueryã©ã€ãã©ãªãªã©ããµãŒãããŒãã£ã®ãµãŒããŒããèŠæ±ãããããã¥ã¡ã³ããã©ãããŸããïŒ ããããèªåèªèº«ã«è»¢éã§ããŸããããã§ã¯ã1ã€ã®ãµãŒããŒã«ã®ã¿æ¥ç¶ããããšã§ãããŒãžã®èªã¿èŸŒã¿é床ãåäžããŸãããåæã«ãããã®ãªã¹ããšå
šäœçãªèªã¿èŸŒã¿ãå¢å ããŸãã ã©ã®ãªãã·ã§ã³ãéžæããã-ãµãŒããŒã®è² è·ãšé
å»¶ã«å¿ããŠãèªåã§æ±ºå®ããŠãã ããã
ãŸãšã
ã»ãšãã©ã®å Žåãã¯ãã¹ã®gzipå§çž®ãšãã£ãã·ã¥ãæå€§ã®å¹æããããããŸãã å€ãã®è¿œå ã®æé©åææ³ããã§ã«ã³ã¡ã³ãã«èšè¿°ãããŠããŸãããå¿
èŠã«å¿ããŠç¢ºå®ã«èª¿æ»ããŠå®è£
ããŸãã ãããŸã§ã®éãæé©åã®çµæã¯æ¬¡ã®ãšããã§ãã
ã«

åŸ

å°ãåŸã§æ¬æ Œçãªã¹ãã¬ã¹ãã¹ãã宿œããŸãã
ãœãŒã¹ïŒ
webshake.ru/post/206