Kısa süre önce 1 gb’lik ram bellegi olan bir vds kullanmaya basladım.Hesaplarımıza göre bu vds sunucuda 5 tane wp az hitli site barındırma gibi planlarımız vardı. Ama malesef apache,php,mysql üçlüsünün ram bellek kullanımı hesaplarımızdan biraz daha fazla çıktıgı için apache üzerinde performans ayarları yapmak zorunda kaldım.Sistem üzerinde fazla degisiklik yapmadım o yüzden sizler de bunları güvenle yapabilirsiniz.

Öncelikli olarak bunları ben centos 6.5 üzerinde denedim ubuntu için farklı komutlar kullanmanız gerekebilir fakat fazla degisiklik olacagını düsünmüyorum

Apache Yapıladırması

Öncelikli olarak ayarlarımızn yedegini alalim her ihtimale karsı.SSH ile sunucumuza root olarak baglandıktan sonra asagıdaki komut ile apache ayarlarımızı yedekliyoruz;

cp /etc/httpd/httpd.conf /etc/httpd/httpd.conf.bak

Akabinde çalısan apache modullerimizi listeliyoruz;

httpd -M

bunlar apache’nin varsayılan modulleri.bizler wordpress kullandıgımız için bazı modulleri disable yanı devredısı bırakacagız.

nano /etc/httpd/httpd.conf

ile apache conf dosyasını açtıgımızda “LoadModule include_module modules/mod_include.so” sekilde aktif olan modullerimiz olacak.simdi asagıdaki modüllerin önüme #  isariti koyarak onları devredısı bırakalım;

 

#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_default_module modules/mod_authn_default.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule logio_module modules/mod_logio.so
#LoadModule env_module modules/mod_env.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule info_module modules/mod_info.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule cgi_module modules/mod_cgi.so

Bunları tekrar aktif etmeniz gerekirse basındaki # isareti kaldırarak apache’yi restart yapabilirsiniz;

service httpd reload

Php.ini Yapılandırması

 

Varsayın olarak php çalısırken wordpressin gerek duymadıgı bir çok fonksiyon çalıstırır.bunlar hem performansı,hem de güvenligi etkiler çünkü bir çok kötü niyetli script ve shell bu fonksiyonlar ile çalısır.

öncelikli olarak tekrar php.ini dosyamızı yedekliyoruz;

cp /etc/php.ini /etc/php.ini.bak

hemen akabinde disable_functions satırını buluyoruz su sekilde düzenliyoruz;

 

disable_functions = foreach, glob, openbasedir, posix_getpwuid, f_open, system,dl, array_compare, array_user_key_compare, passthru, cat, exec, popen, proc_close, proc_get_status, proc_nice, proc_open, escapeshellcmd, escapeshellarg, show_source, posix_mkfifo, ini_restore, mysql_list_dbs, get_current_user, getmyuid,pconnect, link, symlink, fin, passthruexec, fileread, shell_exec, pcntl_exec, ini_alter, parse_ini_file, leak, apache_child_terminate, chown, posix_kill, posix_setpgid, posix_setsid, posix_setuid, proc_terminate, syslog, allow_url_fopen, fpassthru, execute, shell, curl_exec, chgrp, stream_select, passthru, socket_select, socket_create, socket_create_listen, socket_create_pair, socket_listen, socket_accept, socket_bind, socket_strerror, pcntl_fork, pcntl_signal, pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled, pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, openlog, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, virtual

 

eger bu kadar fonksiyonu engellemek fazla geldi ise asagıdaki sekilde de bir alternatif fakat üsttekinin daha güvenli oldugunu belirteyim mecbur olmadıkça üsttekini kullanın.

 

disable_functions = glob, posix_getpwuid, array_compare, array_user_key_compare, ini_restore, exec, proc_get_status, proc_nice, proc_open, allow_url_fopen, fin, pconnect, system, dl, passthruexec, shell_exec, proc_close, proc_get_status, chown, chgrp, escapeshellcmd, escapeshellarg, fileread, passthru, popen,curl_exec, shell, execute

 

Php’nin varsayılan ram kullanımı genelde 128 mb olarak tanımlıdır yani 128 mb lik alan dolana kadar php çıktılarını cache’ler.Fakat siz bunu 8MB yada 24 MB gibi deger atarsanız ram bellege degil cpuya yuklenir. Cpu’ya yüklenmesi bence güzeldir zaten siz gerekli optimizasyonu yapınca cpu kullanmı ciddi anlamda düsüyor;

memory_limit = 8M

Php’nin maksimum POST data boyutunu 1 mb yapmak gayet yeterlidir.isterseniz deneme yanılma ile kendinize göre ayarlayabilirsiniz.

post_max_size = 1M

Ortam, GET, POST, çerez, Sunucu  islenmedeki siralarini belirleyelim.Ben farklı olarak E yeni ortamı en son yuklemesini istedim çünkü apache image yuklemerinde çok hantal.Pek de bir fark olacagını düsünmüyorum gerçi.Deneyerek ögrenebilirsiniz.

variables_order = “GPCSE”

Ayarlardan sonra yine “ service httpd reload” komutu ile apacheyi restart edelim.

MYSQL Yapılandırması

 

Mysql en baslarda wordpress için tam bir sorundu sanırım. Benim gözlemlerime göre ram bellek kullanımı dısında bu konuda yapacak pek bir sey yok gibi. Mysql cache boyutları ile oynayarak ram bellegi rahatlatabiliriz.Bunu yapmak normalde gereksizdir bence çünkü wordpress çok fazla sorgu yaptıgı için her sekilde cpu kullanımı fazla olcak ama zaten mysql’deki wp verileri boyut olarak fazla olmadıgı için en azından ram bellegi rahatlatabiliriz.

Öncelikli olarak mysql ayarlarımız yedekleyelim;

cp /etc/my.cnf /etc/my.cnf.bak

akabinde su satırları bulalım yoksa dosyanın sonuna ekleyelim;

query_cache_type = 1

query_cache_limit = 1M

query_cache_size = 16M

İsin sunucu tarafında yapacaklarımız simdilik bu kadar.Daha fazla ayarları bu adresten veya bu adresten   ögrenebilirsiniz.

Ayrıca Google tarafında gelistirilen pagespeed cache modulunu kullanarak css dosyarını daha hızlı yukletebilir veya memcache php modulu ile sorguları azaltabilirsiniz.Ben sadece baslıca olanları yazdım makaleme.

WordPress Optimasyonu

 

WordPress tarafında ise bir kaç eklenti wordpressi nasıl optimize edebileceginizi anlatacagım.Öncelikle gerekli olan wp eklentilerini hemen kuralım;

1. smush.it : Bu eklenti resimleri otamatik olarak sıkıstırıp eskileri ile degistiriyor.Sitelerin yuklenmesini geçiktiren temel nedenin resimler oldugunu düsünürsek sitenizin ne kadar hızlandıragını görebilkirsiniz.

2.wp super cache :Cache eklentileri sitenizi statik html dosyarına dönüstürerek sorgu sayısını ciddi anlamda azaltır.Bunu internette testlere bakarak nekadar önemli bir etken oldugunu görebilirsiniz.Bir çok cache eklentisi olsada en sorunsuzu bu sanırım.

3.wp-optimize : Yeni kesfettigim bir önemli eklenti. WordPress yazılarda yaptıgınız her degisiklikte yazının tamamı yedekler ve bunun sınırı yoktur. Yani siz yazıda 100 dafa ufak degisiklikler yapmıs olsanız dahi 100 defa o yazının yedegini alır wordpress.Bu eklenti ile bunu sınırlandırıp eskilerini silebilirsiz.

4.Head cleaner : B uda az bilinen fakat çok önemli bir eklentidir. Eklenti ile css yuklenme sorunlarını giderebilir, RSD etiketlerini kaldırabilir ve bir çok eziyet olan ayarları kolayca yapabilrsiniz.Ben varsayılan olarak bu sitede asagıdaki head cleaner ayarlarını kullanmaktayım;

CSS ve JavaScript dosyalarını sunucu üzerinde önbellekle

JavaScript dosyalarını temanın altına ekle

CSS ve JS dinamik olarak olusturulsun

CSS optimize edilsin

JavaScript küçültülsün

canonical etiketi eklensin

RSD baglantısı etiketi kaldırılsın

 

5.Remove query strings from static resources : Bu eklentinin da css’leri optimize edip sorguları azalttıgı söyleniyor.Ben kullanıyorum ama fark var mı pek bilemıyorum ama evet sorgu sayısı azaldı.

HTACCESS Ayarları

 

Asagıdaki htaccess ayarı ile Etag ları kaldırıp resim ve css dosyalarının tarayıcı tarafından önbelleklenmesini saglayabilirsiniz.

 

<FilesMatch ".(ico|jpg|jpeg|png|gif|js|css|swf)$">
ExpiresActive on ExpiresDefault "access plus 30 days"
Header unset ETag FileETag None
</FilesMatch>

 

Tarayıcı önbelleklemesi için ise yine htaccess dosyasına sunu ekleyelim;

 

<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 5 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 216000 seconds"
ExpiresByType application/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

 

son olarak da gzip sıkıstırmayı etkinlestiriyoruz ;

 

<IfModule mod_deflate.c>
# force deflate for mangled headers
# developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)s*,?s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule># HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
</IfModule><IfModule !mod_filter.c>
# Legacy versions of Apache
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>
</IfModule>

 

Benim yaptıgım baslıca ayarlar bunlar.Bu sayede ram ve xpu kullanımım ciddi anlamda azaldı.umarım sizde aynı sonucu alırsınız.