Optimizare wordpress

AlexH

Merg pe strada catre Mine...
Membru personal
Administrative
Freelancer
SEO Expert
In acest topic voi incerca sa includ toate elementele care va poate ajuta la optimizarea unui site care ruleaza pe wordpress.
Telul la acest topic este sa reduca load speed, consumul de cpu si ram, reducere la entry processes, etc.

[HIDE-THANKS]1. Cache
Este bine sa avem cache pe site iar in acest topic am explicat cum se poate face asta fara plugin: Cum poti avea cache pe wordpress fara plugin
2. Optimizare imagini
Cu cat marimea este mai aproape de specificatiile la site, cu atat mai bine. Am explicat aici: http://www.roforum.net/threads/plugin-wordpress-care-reduce-marimea-la-imagini-pentru-a-creste-performanta.1801/
Daca aveti site cu foarte multe imagini puteti folosi si acest plugin https://wordpress.org/plugins/a3-lazy-load/
3. Fresh install wordpress pentru a avea o baza de date clean
Detalii aici http://www.roforum.net/threads/mutare-wordpress-varianta-pentru-incepatori.2210/ vedeti sectiunea: Migrare cu instalare Fresh install wordpress.
4. Eliminati / sters orice plugin de care nu aveti nevoie
5. Optimizati periodic baza de date pentru a elimina junk content https://wordpress.org/plugins/wp-optimize/
Pluginul il dezactivati dupa ce faceti optimizarea
6. Activati gzip pe site. Detalii aici http://www.roforum.net/threads/html-compression-gzip.3801/#post-23127
7. Daca folositi Akismet setati sa stearga automat orice spam, altfel va incarca baza de date cu prostii.
Puteti executa in myphpadmin comenzile de mai jos
- delete meta coment
Cod:
DELETE FROM wp_commentmeta WHERE meta_key
LIKE "%akismet%"
- sterge datele agent de la coment, adica ip, referer, browser, etc
Cod:
update wp_comments set comment_agent ='' ;
- opriti pingback din wordpress
Cod:
UPDATE wp_posts SET ping_status = 'closed';
Am discutat si aici Spam Pingbacks la Comentari
- delete toate tag care nu sunt folosite
Cod:
DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 );
DELETE FROM wp_term_taxonomy WHERE term_id not IN (SELECT term_id FROM wp_terms);
DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN (SELECT term_taxonomy_id FROM wp_term_taxonomy);
- delete cache fedd
Cod:
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient%_feed_%')
- delete toate modificarile la posturi. Nu sterge postarile sau modificarile doar logurile la acestea
Cod:
DELETE a,b,c FROM wp_posts a WHERE a.post_type = 'revision' LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);
- schimba userul default admin in altceva. Este bun pentru motive de securitate
Cod:
UPDATE wp_users SET user_login = 'YourNewUsername' WHERE user_login = 'Admin';
- dezactivare trash - aici daca ati sters din greseala un articol nu mai merge direct in trash ci este sters de tot.
Cod:
define ('EMPTY_TRASH_DAYS', 0);
Majoritatea din acestea se pot face cu pluginul wordpress optimizer
8. adauga adresa la site in wp-config.php pentru a reduce interogarea la db
Cod:
define('WP_HOME', 'https://www.roforum.net');
define('WP_SITEURL', 'https://www.roforum.net');
9. dezactivam log revizuire la toate posturile. Acest lucru incarca db foarte mult. editarea se face in wp-config.php
Cod:
define('WP_POST_REVISIONS', false);
10. setam memoria RAM folosita de site. Aceasta este in functie de specificatiile la host si numarul de site-uri care ruleaza pe acel host.
Cod:
define('WP_MEMORY_LIMIT', '256M');
11. dezactivam cronjob care produce un load destul de mare si chiar este folosit la atacuri
Cod:
define('DISABLE_WP_CRON', true);
Am discutat despre asta si aici Dezactivarea cronjob pe wordpress
12. Faceti un test sa vedeti ce anume consuma CPU mult pe site
https://wordpress.org/plugins/p3-profiler/
13. Activati hotlink pe host. Asta se poate face din cpanel sau chiar din cloudflare. Asta salveaza multe cereri, resurse si trafic.
14. keep-alive este bun pentru ca reducere cererile si entry processes. In mode normal cand cineva iti acceseaza site-ul deschide un proces care in functie de setarile la server este inchis dupa o anumita perioada. keep-alive trimite un ping ca userul inca este pe site si nu mai deschide un alt proces.
Adaugati aceasta linie in .htaccess
Cod:
<ifModule mod_headers.c> Header set Connection keep-alive </ifModule>
15. dezactivati Gravatar din setarile la wordpress. Se stie ca Gravatar are un load foarte slab care iti va afecta siteul. Asta daca ai multe comentarii pe site.
16. Set cookie domain in config
Cod:
define( 'COOKIE_DOMAIN', 'www.roforum.net' );
17. Test la site tau

[/HIDE-THANKS]
Cele de mai sus nu sunt toate obligatorii, iar unii dintre voi aveti deja un scor foarte bun doar cu o parte din aceste recomandari.
Cand faceti update/executii in db, nu uitati sa faceti backup inainte.

Daca cunoasteti si alte metode va rog sa postati mai jos.
 
Ultima editare:
Un alt motiv pentru load mare este atacul la xmlrpc sau incercarile repetate de login la wp-admin.
Pentru xmlrpc vedeti acest topic: http://www.roforum.net/threads/wordpress-brute-force-amplification-attack-via-xml-rpc.1331/
Daca aveti ip static si vreti sa restrictionati acces la wp-admin adaugati in .htaccess care se afla in wp-admin
Cod:
#By Marky WP Admin Folder to deny entry for entire admin folder
order deny,allow
deny from all
allow from 00.00.00.000
<Files index.php>
        order deny,allow
        deny from all
        allow from 00.00.00.000
    </Files>
Schimbati 00.00.00.000 cu ip-ul vostru.
 
Felicitari pentru topic. Ai unit mai multe topicuri intr-unul. Nu stiu daca a mai ramas ceva de spus pentru wordpress.
Poate doar ca la Jetpack de bifat doar ce aveti nevoie.
Edit: Si sa nu tinem pluginuri outdated...
 
Protectie impotriva la noreferer brute force si spam
Cod:
# Stop spam/brute force attack logins and comments

    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} POST
    RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login).php*
    RewriteCond %{HTTP_REFERER} !.*roforum.net.* [OR]
    RewriteCond %{HTTP_USER_AGENT} ^$
    RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
 
Mai exact ce face?
Cand cineva incearca sa se logheze pe site cu brute force sau primesti spam cu no referer, trimite cererea inapoi la sursa.
Daca ai setat cum am explicat mai sus cu admin, nu trebuie sa iti faci probleme ca ti-l sparge, insa iti poate ridica load la site foarte mult si chiar iti poate pune site-ul jos.
 
Un update pentru o protectie mai buna la site vostru wordpress.
Blocare scan care este folosit la brute force
Cod:
# BEGIN block author scans
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (author=\d+) [NC]
RewriteRule .* - [F]
# END block author scans

Protectie la .htaccess files.
Cod:
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

Protectie la wp-config. Sunte multe programe online care permit accesul la wp-config.
Cod:
<files wp-config.php>
order allow,deny
deny from all
</files>

Protectie la rularea unor fisier php intr-un folder. Spre exemplu in folderul wp-content/upload unde sunt pozele urcate pe site nu trebuie permis rularea la fisiere php. Aceasta metoda este pentru a instala backdoor.
Cod:
<Files *.php>
deny from all
</Files>

Protectie la wp-admin. Acest code permite accesarea la wp-admin doar la ip care este setat.
Cod:
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all
# whitelist alex IP address
allow from xx.xx.xx.xxx
# whitelist roforum IP address
allow from xx.xx.xx.xxx
</LIMIT>

Daca vreti sa setati o parola la wp-admin folosti codul de mai jos.
Cod:
AuthName "Admins Only"
AuthUserFile [COLOR=#ff0000]/home/yourdirectory/.htpasswds/public_html/wp-admin/passwd[/COLOR]
AuthGroupFile /dev/null
AuthType basic
require user putyourusernamehere
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any 
</Files>

Acest folder /home/user/.htpasswds/public_html/wp-admin/passwd/ trebuie sa fie inainte de publlic_html. La cpanel este /home/user/ce vreti voi
User si parola o puteti genera aici
http://www.htaccesstools.com/htpasswd-generator/

Pentru protectia la wp-admin nu editati fisierul .htaccess din root, cel general ci fisierul .htaccess care se afla in folderul wp-admin.
Aceasta optiune va permite sa accesati wp-admin din orice locatie, fara sa setati un ip in whitelist.
 
Update la postul lui alex, daca folositi nginx sau nu, pt protectie va recomand ithemes security (pt wordpress) .. si aici ma refer la varianta pro ... dar sa zicem ca nu aveti pro si vreti un gram de securitate la fisiere, aici aveti un exemplu despre cum puteti sa va faceti un CONF pe care sa-l includeti pentru un site specific (a nu fi pus pe html ci doar pt fiecare site in parte cu include) ... o sa las [HASHTAG]#comentariile[/HASHTAG] de la plugin pentru a intelege fiecare lucru ce inseamna. Ma gandesc ca poate nu toti sunteti familiarizati cu asta sau poate pe viitor va ajuta pe cineva care nu are pluginul si sa aibe o idee cum se restrictioneaza accesul pe diferite parti ale site-ului.


Daca expira pastebin atasez si un conf cu txt-ul pentru cei mai intarziati.

inca o data este doar un exemplu, mai putin user-agents care chiar sunt banati pe bun motiv si e luata dintr-o lista compilata modial .. la ip-uri treceti ce ipuri va fac viata frumoasa ..... lista e compilata, inca o data, de ithemes security si sincer din tot ce am incercat pana acum e varianta ce mai ok .. pt wordpress ...

UPDATE: acum vad ca varianta pro nu acopera treaba asta, inseamna ca oricine isi poate securiza site-ul felul acesta. Cei care avweti acces la dedicat sau vps, v-ati scos, restul, trebuie sa vb cu hostul sa va includa fisierul pentru fiecare site in parte.
UPDATE2: acest plugin ofera atat nginx cat si apache, adica ... spre exemplu daca ii dati acces la htaccess, se va ocupa singur de probleme. Sigura problema pe care o am eu personal, e daca aveti in site mega cunsocut si vrea cineva sa va acceseze htaccess-ul poate (in teorie) prin exploituri sa o faca.. sansele sunt f mici dar se poata daca nu aveti securizat din interiorul serverului accesul la fisierele "interzise".
 

Atașamente

  • sitex.conf.txt
    12,4 KB · Vizualizări: 2
Ultima editare:
Pluginul autoptimize: https://wordpress.org/plugins/autoptimize/
Aduna toate fisierele css ale temei tale wordpress, le uneste intr-un singur fisier si il pune in <head>, si cu fisierele .js la fel, dar il include inainte de </body> (cum este recomandat).

Un cache care se salveaza in memoria RAM: https://wordpress.org/plugins/redis-cache/
Trebuie sa aveti Redis instalat pe server. De obicei pe shared hosting nu se poate instala asa ceva, doar pe vps.
Recomand sa folositi cacheul asta in combinatie cu alt cache, nu va bazati doar pe redis-cache.

Si pentru securitate recomand foarte mult pluginul asta: https://wordpress.org/plugins/wps-hide-login/
Iti dezactiveaza pagina de login (/wp-admin/ si wp-login.php), si iti face pagina de login disponibila pe alt url pe care il setezi tu (ex. site.com/4dm1n135/ ).
 
Protectie impotriva la noreferer brute force si spam
Cod:
# Stop spam/brute force attack logins and comments

    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} POST
    RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login).php*
    RewriteCond %{HTTP_REFERER} !.*roforum.net.* [OR]
    RewriteCond %{HTTP_USER_AGENT} ^$
    RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
Si acest cod unde se pune? htaccess
 
Da ... in principiu toate comenzile cu RewriteEngine sunt comenzi de Apache ... ele pot fi scrise in htaccess sau in fisierul specific de configurare Apache pentru site. Dar ... nu te complica cu a doua ... e mai lejera modificarea in htaccess.
Atentie insa ... de cand a aparut nginx ... daca se foloseste nginx in loc de apache htaccess-urile nu prea isi mai au rostul ... nginx are propriile fisiere de configurare cu propriile comenzi (specifice lui)
 
Loading...
Back
Sus