WordPress sitelerinizin sayfalarını tamamen html olarak yedekleyerek herhangi bir yüklenmede, saldırıda yada sunucuda oluşan arızalarda sorunsuz şekilde online kalmasını sağlamak amaçlı senaryomuzu örnekleri ile hayata geçiriyoruz.

Senaryomuz: Ayrı bir yedek sunucumuz olur (vps, vds, dedicaded, cloud v.s) bu sunucumuzda sadece işletim sistemi Centos ve nginx kurulur. WordPress sitemizin wp super cache eklentisi aracılığı ile oluşturulan cache dosyalarını bu yedek sunucusuna taşırız. Ana sunucuda oluşan herhangi bir problemde yada saldırı anında sitemizin online kalmasını sağlamak için DNS leri bu yedek sunucusuna yönlendirerek herşey yolundaymış gibi sitemizin yayında kalmasını sağlayacağız. Anlık NS ip lerini değiştirmek içinde cloudflare kullanacağız, ancak dengi bir yerde kullanabilirsiniz. Anlık ana sunucumuza gelen ziyaretçiler, anında İP değişikliği ile yedek sunucumuza yönlendirilirler ve burdaki HTML dosyalar normal şekilde ziyaretçiye gösterilir.

Şimdi cloudflare normal şartlarda sitemizdeki sayfaların yedeklerini alır ve sunucuya ulaşamadığında bunları gösterir ama çok yetersiz kalmakta ve bu özellik erişim sorunu başladığında kullanılabilmekte, belli bir süre sonra artık cachede yer alan html dosyaları gösterilmemeye başlayacak ve hit kaybedeceksiniz. Amacımız böyle olası problemlerde sitemizin yayına devam etmesini sağlamaktır.

İhtiyacımız olacaklar listesi:

  1. Cloudflare: Hem cdn hemde DNS yönetimi icin kullanacağız.
  2. Yedek sunucu: Ana sunucudan ayrı bir sunucu. Dedicaded, Vds, Vps yada cloud. Sunucuda centos kurulu olmalı, çünkü anlatımı buna göre yapacağım.
  3. Wp Super cache eklentisi: Ana sunucudaki sitemizde kurulu cache eklentisi
  4. CDN sunucusu: Bunu daha verimli bir site deneyimi için kullanabilirsiniz ama zorunlu değil. Ekstra bir sunucu almanıza gerek yok, yedek sunucusu içerisinde cdn.domain.com şeklinde bir domain tanımlayarak ana sunucudaki statik dosyalar içinde kullanabilirsiniz. bu konuda dökümanda bir anlatım yapmayacağım gerek yok, ayrı olarak bunu sitenizde kullanırsanız faydalı olabilir.

Senaryomuzun çalışma mantığı:

img_1964

Başlıyoruz:

1 – WordPress Eklentisini ayarlayalım

İlk olarak wodpress sitemiz için WP super cache eklentisini kuralım, zaten kurulu ise bu adımı geçebilirsiniz. Sonrasında Ayarlarını aşağıdaki resimdeki gibi yapın:

screenshot-kuaza-com-2016-11-23-12-42-14

Çöp toplama ayarlarınızıda yapın, yukardaki resimde işaretlediğim 2. kısıma girin ve ayarları aşağıdaki gibi yapıp kaydedin:

wp-super-cache-garbage-cop-toplama-onyukleme-ayarlari

Bu işlemlerden sonra wordpress ile işimiz bitmiş sayılır. Sonraki adıma geçelim.

2 – Yedek html (cdn) sunucusunu hazırlayalım

Çalışmalarımızın en can alıcı noktası sitemizin statik yani html dosyalarını yedekleyeceğimiz bir sunucunun olmasıdır. Eğer yoksa bu çalışmanın bir faydası olmayacaktır size, çünkü amacımız ana sunucunun erişim sorunu yaşadığı durumlarda yedek sunucu ile yayın yapmaya devam etmektir. Ayrıca aşırı yoğunlukta sunucu kitlenebilir, bu gibi durumlarda da yedek html sunucumuz ana sunucunun üzerindeki yükü almak için kullanılabilir.

Centos kurulu bir sunucuyu yapılandırmak için burdaki konuya: CDN server kurulumu (nginx) statik dosyalar icin ayri server girerek nginx kurulumunu ve konfigürasyonlarını tamamlayın (ftp kurulumu ve sonrasındakileri yapmayın, lazım değil). Sonrasında yedeklerini barındıracağınız domain için gerekli kullanıcı ve nginx yapılandırmasını yapın, konuda nasıl yapılacağı anlatılmış. Sonrasında tek yapmanız gereken nginx site konfigürasyon dosyanızı aşağıdaki ile değiştirmek olacaktır:

NOT: Aşağıdaki konfigürasyon dosyası 04/07/2019 tarihinde güncellenmiştir. SSL için parametre alanı ekledim, ssl key ve sertifikanızı sunucunuza yükleyerek belirtmeniz gerekiyor. Artık ssl’siz site kalmadı, lütfen sizlerde ssl ye geçerek kullanıcılarınızın güvenliğine önem verdiğinizi gösterin.

Bunun yanında cache dosyasının kullanıcıya daha hızlı sunulması için parametre alanlarını komple güncelledim. Aşağıdaki kodlar sadece statik dosyaları servis etmek için kullanılır. Eğer bir sorun halinde sitenizi başka bir sunucudan yayınlamaya devam etmek istiyorsanız(php, mysql dahil), burada “Nginx için wp süper cache ayarları (Masaüstü ve mobil cache uyumlu)” paylaştığım nginx kodlarını kullanın. Böylece sitenizin önceki gibi yayında kalmasını sağlayabilirsiniz (php dosyalarinida calistirabilirsiniz yani).

 # http://DOMAIN.com icin ayar bolumu 04/07/2019 21:34
 server {
 listen 443 ssl;
 server_name  DOMAIN.com www.DOMAIN.com;

ssl_certificate         /etc/nginx/ssl/DOMAIN.com.pem; 
ssl_certificate_key     /etc/nginx/ssl/DOMAIN.com.key;
 
 #charset koi8-r;
 #access_log  logs/host.access.log  main;
 
 # Load configuration files for the default server block.
 # include /etc/nginx/default.d/*.conf;
 
 # php calistirmama
 location ~ \.php$ {
 deny all;
 }
 
 set $cache_ismi $request_uri;

 #
 # asagidaki islemler icin cache devre disi birakilir
 #

 #
 # Cache devredisi birakma sonu
 #

 set $cihaz "Kuaza Nginx+WP-super-cache: Masaustu cache yada Orjinal";
 set $cachedosyasi "/wp-content/cache/supercache/$http_host/$cache_ismi/index-https.html";
 
 #if (-f $document_root/wp-content/cache/supercache/$http_host/$cache_ismi/index-https.html) {
 # set $cihaz "Kuaza Nginx+WP-super-cache: Masaustu cache";
 #}

 if ($http_user_agent ~* "2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800|iPad") { set $cihaz "Kuaza Nginx+WP-super-cache: Mobil cache"; set $cachedosyasi "/wp-content/cache/supercache/$http_host/$cache_ismi/index-https-mobile.html"; }

 if ($http_user_agent ~* "w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-|ipad") { set $cihaz "Kuaza Nginx+WP-super-cache: Mobil cache"; set $cachedosyasi "/wp-content/cache/supercache/$http_host/$cache_ismi/index-https-mobile.html"; }

 # kontrol duzeni: (1) cachedosyasi, (2) normal url, (3) php
 location / { 
 add_header "X-Cache" "HIT - $cihaz";
 root   /home/KULLANICI_DOMAIN/public_html;
 index index.html index.htm;
 
 try_files $cachedosyasi $uri $uri/ /index.html;
 }
 
 #Statik public_htmli direk nginx ile isleyelim..
 location ~*.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
 # 1 Aylik cache suresi veririz.
 expires 30d;
 
 # CDN erisimi icin yetki vermemiz gerekli
 add_header Access-Control-Allow-Origin *;


 #add_header Pragma public;
 #add_header Cache-Control "public, must-revalidate, proxy-revalidate";
 
 access_log off;
 log_not_found  off;
 
 root /home/KULLANICI_DOMAIN/public_html;
 }

        # 404 hata sayfasi
  error_page  404              /404.html;
  location = /404.html {
   root   /home/KULLANICI_DOMAIN/public_html;
  }
 
 # 50x li hatalar icin hata sayfasi /50x.html
 error_page   500 502 503 504  /50x.html;
 location = /50x.html {
 root   /home/KULLANICI_DOMAIN/public_html;
 }
  # .htaccess dosyasina direkt erisimi kapatiriz.
  location ~ /\.ht {
  deny all;
  }
 }

Bu kısmı sunucunuzdaki domainin yerine göre değiştirin:

/home/KULLANICI_DOMAIN/public_html

Sonrasında kaydedin ve nginx e restart atın:

service nginx restart

3 – Ana sunucumuzdaki sitemiz her 10 dk da bir yedek sunucumuza yedeklensin

Bu işlem senaryomuzun en can alıcı noktalarından, çünkü sitenizdeki sayfaları ziyaret eden kullanıcılar sayesinde bu sayfaların html versiyonları oluşur. Bu dosyaların silinmeyeden (zaman aşımı) yada problem olmadan yedeklenmesi gerekir. Böylece anlık problemlerde en son ana sayfanız yada son konularınızda yedek sunucusundan yayın yapabilecektir. Bu işlemi otomatikleştireceğiz. Aşağıdaki komutu çalıştırın: Bu işlemler yedek sunucusunda yapılacak.

nano /root/domain_guncelle.sh

Dosyanın ismini farklı yapabilirsiniz, örnek kuaza_guncelle.sh yada google_guncelle.sh

Sonrasında aşağıdaki kodları kendinize göre düzenleyerek içerisine ekleyin:

#!/bin/bash

# rsync ve sshpass yardimi ile belirledigimiz klasordeki dosyalari bu sunucuya cekeriz.
sshpass -p "ANA_SUNUCU_SIFRESI" rsync -avzu -t -l root@ANA_SUNUCU_IP:/home/DOMAIN_ANA_SUNUCU/public_html/ /home/DOMAIN_YEDEK_SUNUCU/public_html/

chmod 0755 /home/DOMAIN_YEDEK_SUNUCU/public_html
chown -R DOMAIN_KULLANICI:DOMAIN_KULLANICI /home/DOMAIN_YEDEK_SUNUCU/public_html/

2. kısımda yedek sunucusunu kurmuştuk ve kullanıcı eklemiş olamanız gerekiyor, useradd ile eklediğiniz kullanıcı ismini yukarıdaki kod da DOMAİN_KULLANICI alanı ile değiştirin.

Diğer kısımlar zaten bellidir nasıl değiştireceğinizi v.s detaylara girmiyorum, kaydedip çıkın. Ssh ile açıyorsanız: ctrl + x ———-> y ——–> enter ile çıkabilirsiniz.

UYARI: sshpass uygulaması kurulu değil ise burdaki konudan kurulumu yapın mutlaka yoksa sh kodlarımız çalışmayacaktır.

3.1 – Crontab ile belirlediğimiz dakikalarda yedekleme yapılsın:

Cronjob ile belirleyeceğimiz saatlerde yada dakikalarda ana sunucunun yedeklenmesini sağlayacağız. Böylece yedek sunucumuz her an çalışmaya hazır olacak. Ancak siteniz çok fazla güncellenmiyorsa saat aralıklarını değiştirebilirsiniz. Örnek haftada bir yeni konu giriliyorsa yedeklemeyi haftada bir yapabilirsiniz yada 2 günde bir. Aşağıdaki talimatları takip edin:

ssh ile aşgidaki komutu çalıştırın:

crontab -e

i harfine bazın ve yazma alanı açılsın. Sonrasında eğer daha önce kayıtlı şeyler varsa en alta gelerek aşağıdaki kodu ekleyin:

*/10 * * * * sh /root/domain_guncelle.sh

Yukarıdaki ayar her 10dk da bir rsync dosyamızı çalıştırmasını söylüyor. Böylece sitemiz 10dk da bir güncellenir. Farklı saat yada zaman aralıkları ile değiştirmek için cronjob konumuzu inceleyebilirsiniz.

Kaydedip çıkmak için sırası ile: esc —-> :wq —-> enter yapıp çıkın.

4 – Cloudflare kullanmaya başlayın:

Artık bir çok websitesi cloudflare kullanıyor ancak kullanmayanlarda oluyor eğer siz kullanmayanlardansanız bir an önce cloudflare ye girerek sitenizi ekleyin ve domain NS lerini cloudflareye yönlendirin. Kurulum çok basit, sırayla önce cloudflare.com sitesine girip üye oluyorsunuz, site ekleme kısmından domaini yazıp gönderiyorsunuz, sonraki ayarlar standart, takip etmeniz yeterli.

En son kısımda sizden domaininizin NS lerini kendilerinki ile değiştirmenizi isteyecek, bunu yaptıktan sonra artık içerdesiniz demektir. Aşağıdaki videoda hızlı bir kuruluma göz atabilirsiniz:

Sitenizde ziyaretçilerin çok az olduğu bir saatde, genelde gece oluyor cloudflare DNS ayarlarından ana domain İP sini, yedek sunucu İP si ile değiştirin ve çalışıp çalışmadığına bakın (siteninz açılıyor mu?). Bu kontrolün durumuna göre eksikleri, gedikleri, problemleri konu altından yorum olarak yazın ivedilikle yardımcı olmaya çalışırım size. Eğer siteniz çalışıyorsa yüzünüzde bir tebessüm görmek istiyorum.

Örnek İP değişikliği için aşağıdaki resime bakabilirsiniz:

screenshot-www-cloudflare-com-2016-11-23-14-08-27

Ve bir konumuzun daha sonuna geldik, çoğu şeyi kafadan yaptığımdan unuttuğum yada hata yaptığım birşey olursa sevecen bir şekilde bana iletmenizi rica ediyorum. Böyle değerli bir konuyu güncellemek için emin olun zaman bulacağım.

Hazır konusu açılmışken, bu dokümanda anlattığım senaryoyu hali hazırda makaleci.com içinde kullanıyorum. Örnek bir sayfanın yedek html versiyonunu görmek isterseniz sayfanın başına html.makaleci.com koyarak bakabilirsiniz. Örnek güzel sözler sayfasının yedeklenmiş ayrı bir sunucudaki html versiyonunu görmek için aşağıdaki şekilde giriş yapın:

http://html.makaleci.com/resimli-sozler/guzel-sozler-resimleri-yazili-resimler

Giriş yaptığınızda sayfa yedeklenmiş sunucudan gösterilir, ancak dikkatinizden kaçmasın, linkler suanki ana sunucudaki gibi olduğu için herhangi bir sayfaya girerseniz ana sunucudan sayfayı görmeye başlarsınız. Bu önemli değil, nasılsa İP değiştiğimizde linkler aynı olacak.

Mobil konusunada değinmek istiyorum arkadaşlar, ana sitenize mobil ile girenler içinde ayrı olarak sayfanın mobil versiyonu yedeklenir. Bu mobil versiyonlu html dosyasının gösterimide yedek sunucudan yapılabilmekte. Konuda verdiğim nginx site konfigürasyon dosyasını ellemeden kullanmanız yeterli olacaktır. Böylece mobil için ayrı tasarım kullanan sitelerde yedekden çekilen html versiyonu da aynı şekilde mobil olarak gösterilecektir.

Hmmm, atladığım bir şey var mı ? hmm sanırım yok. Saygılar.


==== Ek notlar ====

Eski nginx konfigurasyon kodu, yeni ve guncel kodu yukarida kullanmaniz icin guncelledim.

	# http://DOMAIN.com icin ayar bolumu 23/11/2016 13:34
	server {
		listen 80;
		listen 443 ssl;
		server_name  DOMAIN.com www.DOMAIN.com;
 
		#charset koi8-r;
		#access_log  logs/host.access.log  main;
 
		# Load configuration files for the default server block.
		# include /etc/nginx/default.d/*.conf;
	
		# php calistirmama
		location ~ \.php$ {
			deny all;
		}
		
		# if the requested file exists, return it immediately
		if (-f $request_filename) {
		  break;
		}

		set $supercache_file '';
		set $supercache_uri $request_uri;
		set $ihttp_host '';
		
		# Mobil girislerde mobil html dosyasini acmasi icin dosya ismini degistiririz.
		if ($http_user_agent ~* '(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800)') {
			set $ihttp_host '-mobile';
			#set $supercache 0;
		}

				
		# if we haven't bypassed the cache, specify our supercache file
		if ($supercache_uri ~ ^(.+)$) {
		  set $supercache_file /wp-content/cache/supercache/$http_host$1/index${ihttp_host}.html;
		}
  
		location / {
		
			# CDN erisimi icin yetki vermemiz gerekli
			add_header Access-Control-Allow-Origin *;

			# only rewrite to the supercache file if it actually exists
			if (-f $document_root$supercache_file) {
			  rewrite ^(.*)$ $supercache_file break;
			}

			access_log off;
			log_not_found  off;
			
			#proxy_pass_header Set-Cookie;
			#proxy_ignore_headers Cache-Control Expires Set-Cookie;
			
			root   /home/KULLANICI_DOMAIN/public_html;
			index index.html index.htm;
		}
		
		#Statik public_htmli direk nginx ile isleyelim..
		location ~*.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
			# 1 Aylik cache suresi veririz.
			expires 30d;
			
			# CDN erisimi icin yetki vermemiz gerekli
			add_header Access-Control-Allow-Origin *;

			# only rewrite to the supercache file if it actually exists
			if (-f $document_root$supercache_file) {
			  rewrite ^(.*)$ $supercache_file break;
			}

			#add_header Pragma public;
			#add_header Cache-Control "public, must-revalidate, proxy-revalidate";
			
			access_log off;
			log_not_found  off;
			
			root /home/KULLANICI_DOMAIN/public_html;
		}

        # 404 hata sayfasi
		 error_page  404              /404.html;
		 location = /404.html {
		 	root   /home/KULLANICI_DOMAIN/public_html;
		 }
 
		# 50x li hatalar icin hata sayfasi /50x.html
		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
			root   /home/KULLANICI_DOMAIN/public_html;
		}
		 # .htaccess dosyasina direkt erisimi kapatiriz.
		 location ~ /\.ht {
		 deny all;
		 }
	}

10 YORUMLAR

  1. Hocam Elinize sağlık makale için,
    Fakat ben bu clodflare ayarını tam olarak anlayamadım. Şimdi resimden anladığım kadarıyla siz html sub domaini için yedek sunucunun ip adresini girmişsiniz. birde kuaza.com için ana sunucunun ip adresini girmişsiniz. Buraya kadar herşey tamam fakat cloudflare nerden bilecek servera ulaşılamıyorsa html subdomainine yönlendirilmesi gerektiğini. Bu kısmını anlayamadım.

    • Merhaba konudaki html linki sadece ornek, sizin oyle bir sey olusturmaniza gerek yok. iki sunucuda da ana sitenizin domaininin ayarlarinin yapilmasi gerekiyor. Yani Cloudflare den yedek sunucu IP sini atatidiginizda sitenizin yedek sunucusundan aciliyor, calisiyor olmasi gerekiyor.

      Ayrica sitenize ulasilamadigi durumlarda IP degisikligini el ile yapmaniz gerekiyor ancak cloudflare apisi kullanilarak bunu otomatiklestirebiliriz, mantiken mumkun.

    • Tesekkurler, hali hazirda kullanmaktayim, acil durumlarda saldiri yada sunucuda bozulma gibi hic birsey olmamis gibi yayina devam ediyorum. Boyle bir teknigide paylasmazsam ayip olurdu :)

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

This site uses Akismet to reduce spam. Learn how your comment data is processed.