win altında tomcat + nginx yük dengeleme

I.Giriş

Tomcat sunucusunda yük dengeleme nedenleri:

Bir web sunucusu olarak Tomcat sunucusunun eşzamanlılığı 300 ile 500 arasındadır. 500'den fazla eşzamanlılık varsa Tomcat, web sitesinin işleyişini ciddi şekilde etkileyecek olan yeni isteklere yanıt veremeyecektir. Ek olarak, yoğun trafik durumunda Tomcat'in iş parçacığı sayısı artmaya devam edecek. Tomcat'in bellek kullanımı üzerinde kontrolü olduğu için, bellek kullanımı maksimuma ulaştığında, bellek taşması, web sitesinde ciddi zaman aşımları vb. Olacaktır. Şu anda, Tomcat'in işgal edilen belleği serbest bırakmak için yeniden başlatılması gerekir. Web sitesinin çalışmasını engelleyecektir.

Bu yüzden Tomcat için yük dengeleme yapmak gerekiyor. Şu anda, Tomcat ile yük dengeleme yapabilen ana sunucu Apache'dir, ancak Nginx, birden çok işlevi ve basit yapılandırması nedeniyle giderek birçok yük dengeleme sunucusu için ilk tercih haline gelmiştir. Nginx'in eşzamanlılığı 50.000'e ulaşabilir, böylece Tomcat ile teoride 1: 100 oranında yapılandırılabilir, böylece web sitesi eşzamanlılığının darboğaz sorununu çözebilir. Ayrıca, Nginx ve apache, ISO modelinin yedinci uygulama katmanında bulunan http ters proxy yöntemlerine dayanmaktadır. Açıkça söylemek gerekirse, TCP, UDP ve http arasındaki fark Nginx, TCP tabanlı uygulamalar için yük dengeleme sağlayamaz.

İki, nginx tanıtımı

Nginx ("motor x"), yüksek performanslı, hafif bir HTTP web sunucusu ve ters proxy sunucusu ve e-posta IMAP / POP3 / SMTP proxy sunucusudur. Nginx piyasaya sürüldüğünden dört yıl sonra, Nginx kararlılığı, zengin özellik seti, örnek yapılandırma dosyaları ve düşük sistem kaynağı tüketimi ile biliniyor. Nginx, Apache'nin yüksek performansını ve kararlılığını aşarak yerel web sitelerini web sunucusu olarak Nginx'i giderek daha fazla kullanıyor.

Şu anda, büyük yerel portal web siteleri Sina, NetEase, Tencent, vb. Gibi Nginx'i dağıttı; son zamanlarda Nginx teknolojisinin Çin'de giderek daha popüler hale geldiğini keşfetti ve giderek daha fazla web sitesi Nginx'i kullanmaya başladı.

1. Ters proxy

Reverse Proxy, Internet'teki bağlantı isteklerini kabul etmek ve ardından isteği iç ağdaki sunucuya iletmek ve sunucudan sonucu Internet üzerinden bağlantı isteyen istemciye göndermek için bir proxy sunucusunun kullanılması anlamına gelir. Proxy sunucusu harici olarak bir sunucu görevi gördüğünde.

Ters proxy yöntemi aslında yönlendirmeden sorumlu bir proxy sunucusudur ve gerçek bir sunucu işlevi gibi davranır, ancak aslında değildir. Proxy sunucusu yalnızca bir iletici olarak işlev görür ve

Gerçek sunucu, döndürülen verileri alır. Bu şekilde, nginx aslında bu tür bir işi başarır. Nginx'in 80 numaralı bağlantı noktası gibi bir bağlantı noktasını dinlemesine izin veriyoruz, ancak aslında

8080 numaralı bağlantı noktasının tomcat'i gerçek isteği yerine getirir.İstek tamamlandığında tomcat geri döner, ancak veriler bu anda doğrudan değil, doğrudan nginx'e döndürülür ve nginx tarafından döndürülür. Burada,

Biz nginx'in bunu işlediğini düşünürdük, ama gerçekte onu işleyen tomcat oldu.

Statik dosyalar işlenmek üzere nginx'e teslim edilebilir. Aslında nginx'in kullanıldığı birçok yer, CSS, JS, html, htm ve diğer dosyalar gibi bu statik dosyaların önbelleğe alınmasını kolaylaştırabilen statik sunucular olarak kullanılır.

2. Dizin yapısı

Nginx-

| _ conf yapılandırma dizini

| _ katkı

| _ docs Belge dizini

| _ günlükler günlük dizini

| _ temp geçici dosya dizini

| _ html statik sayfa dizini

| _ nginx.exe ana programı

3. Nginx yapılandırma dosyasının ayrıntılı açıklaması nginx.conf

# Nginx'in çalıştırdığı kullanıcı ve kullanıcı grubunu tanımlayın kullanıcı www www; #nginx İşlem sayısıdır, toplam CPU çekirdeği sayısına eşit ayarlanması önerilir. işçi_işlemleri 8; #Global hata günlüğü tanım türü, error_log /var/log/nginx/error.log bilgisi; #Process dosyası pid /var/run/nginx.pid; # Bir nginx işlemi tarafından açılan maksimum dosya tanımlayıcı sayısı, teorik değer, maksimum açık dosya sayısının (sistem değeri ulimit -n) nginx işlemlerinin sayısına bölünmesi olmalıdır, ancak nginx tahsis talebi tek tip değildir, bu nedenle ulimit -n kullanılması önerilir Değer aynı kalır. worker_rlimit_nofile 65535; # Çalışma modu ve maksimum bağlantı sayısı Etkinlikler { # Olay modeline bakın, kullanın; epoll modeli, 2.6'nın üzerindeki Linux çekirdeğinde yüksek performanslı bir ağ G / Ç modelidir. FreeBSD üzerinde çalıştırıyorsanız, kqueue kullanın model. epoll kullanın; # İşlem başına maksimum bağlantı sayısı (maksimum bağlantı sayısı = bağlantı sayısı * işlem sayısı) işçi_bağlantıları 65535; } #Set http sunucusu http { mime.types dahil; # Dosya uzantısı ve dosya türü eşleme tablosu default_type application / octet-stream; #Default dosya türü #charset utf-8; # Varsayılan kodlama server_names_hash_bucket_size 128; #Sunucu adının karma tablo boyutu client_header_buffer_size 32k; #Upload dosya boyutu sınırı large_client_header_buffers 464k; # İstek arabelleğini ayarla client_max_body_size 8m; #İstek gecikmesini ayarla dosya gönderme açık; # Etkin dosya aktarım modunu etkinleştir. Dosya gönderme talimatı, nginx'in dosya gönderme işlevini çıktı dosyalarına çağırıp çağırmayacağını belirtir. Normal uygulamalar için, açık olarak ayarlanır. Yükleme ve ağır disk GÇ yükleme uygulamalarına sahip diğer uygulamalar için kullanılıyorsa, diski dengelemek için kapalı olarak ayarlanabilir Ve ağ G / Ç işlem hızı, sistemin yükünü azaltır. Not: Resim düzgün görüntülenmiyorsa, bunu kapalı olarak değiştirin. autoindex açık; #Open dizin listesi erişimi, uygun indirme sunucusu, varsayılan olarak kapalıdır. tcp_nopush on; #Ağ tıkanıklığını önleyin tcp_nodelay on; #Ağ tıkanıklığını önleyin keepalive_timeout 120; # Uzun bağlantı zaman aşımı, saniye cinsinden # HızlıCGI ile ilgili parametreler, web sitesinin performansını iyileştirmek içindir: kaynak kullanımını azaltmak ve erişim hızını artırmak. Aşağıdaki parametreler tam anlamıyla anlaşılabilir. fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 464k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzipModule Ayarları gzip açık; # gzip sıkıştırma çıktısını etkinleştir gzip_min_length 1k; # Minimum sıkıştırılmış dosya boyutu gzip_buffers 416k; # sıkıştırma arabelleği gzip_http_version 1.0; # Sıkıştırılmış sürüm (varsayılan 1.1, ön uç squid2.5 ise lütfen 1.0 kullanın) gzip_comp_level 2; #sıkıştırma düzeyi gzip_types metin / düz uygulama / x-javascript metin / css uygulaması / xml; # Sıkıştırma türü, text / html varsayılan olarak zaten dahil edilmiştir, bu nedenle tekrar yazmaya gerek yoktur, bununla ilgili bir sorun olmayacaktır, ancak bir uyarı olacaktır. gzip_vary on; #limit_zone crawler $ binary_remote_addr 10m; # IP bağlantılarının sayısı sınırını açarken gereklidir upstream blog.ha97.com { #upstream Yük dengeleme için ağırlık, makine yapılandırmasına göre tanımlanabilen ağırlıktır. Ağırlık parametresi ağırlığı temsil eder ve ağırlık ne kadar yüksek olursa atanma olasılığı o kadar büyük olur. sunucu 192.168.80.121:80 ağırlık = 3; sunucu 192.168.80.122:80 ağırlık = 2; sunucu 192.168.80.123:80 ağırlık = 3; } #Virtual ana bilgisayar yapılandırması server { # Dinleme bağlantı noktası 80 dinle; # Alan adlarında boşluklarla ayrılmış birden çok alan olabilir server_name www.ha97.com ha97.com; index index.html index.htm index.php; kök / veri / siteler / ha97; konum ~. * \. (php | php5)? $ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi.conf içerir; } # Resim önbellek süresi ayarı konum ~. * \. (gif | jpg | jpeg | png | bmp | swf) $ { 10d'de sona eriyor; } #JS ve CSS önbellek süresi ayarları konum ~. * \. (js | css)? $ { 1 saat sona erer; } #Log format ayarı log_format erişimi '$ remote_addr- $ remote_user "$ istek"' '$ status $ body_bytes_sent "$ http_referer" '"$ http_user_agent" $ http_x_forwarded_for'; # Bu sanal konağın erişim günlüğünü tanımlayın access_log /var/log/nginx/ha97access.log erişimi; # "/" İçin ters proxy'yi etkinleştirin yer / { proxy_pass proxy_redirect kapalı; proxy_set_header X-Gerçek-IP $ remote_addr; # Arka uç web sunucusu, X-Forwarded-For aracılığıyla kullanıcının gerçek IP'sini alabilir proxy_set_header X-Yönlendirilmiş-$ proxy_add_x_forwarded_for için; # Aşağıdakiler, isteğe bağlı bazı ters proxy yapılandırmalarıdır. proxy_set_header Ana Bilgisayar $ ana bilgisayar; client_max_body_size 10m; # İstemci tarafından izin verilen maksimum tek dosya baytı sayısı client_body_buffer_size 128k; # İstemciyi arabelleğe almak için arabellek aracısı tarafından istenen maksimum bayt sayısı, proxy_connect_timeout 90; #nginx, arka uç sunucu zaman aşımı süresine bağlanır (proxy bağlantı zaman aşımı) proxy_send_timeout 90; # Arka uç sunucu veri dönüş süresi (Proxy gönderme zaman aşımı) proxy_read_timeout 90; # Bağlantı başarılı olduktan sonra, arka uç sunucu yanıt süresi (proxy alma zaman aşımı) proxy_buffer_size 4k; # Kullanıcı başlığı bilgilerini kaydetmek için proxy sunucusunun (nginx) arabellek boyutunu ayarlayın proxy_buffers 432k; #proxy_buffers arabellek, ortalama web sayfası 32k'nin altında ayarlanmış proxy_busy_buffers_size 64k; # Yüksek yük altında tampon boyutu (proxy_buffers * 2) proxy_temp_file_write_size 64k; # Bu değerden daha büyük olan önbellek klasörü boyutunu ayarlayın, yukarı akış sunucusundan yüklenecektir } # Nginx durumunu görüntülemek için adresi ayarlayın location / NginxStatus { stub_status açık; erişim_ günlüğü; auth_basic "NginxStatus"; auth_basic_user_file conf / htpasswd; #Htpasswd dosyasının içeriği, Apache tarafından sağlanan htpasswd aracı kullanılarak oluşturulabilir. } # Yerel dinamik ve statik ayırma ters proxy yapılandırması # Tüm jsp sayfaları tomcat veya resin ile işlenir konum ~. (jsp | jspx | do)? $ { proxy_set_header Ana Bilgisayar $ ana bilgisayar; proxy_set_header X-Gerçek-IP $ remote_addr; proxy_set_header X-Yönlendirilmiş-$ proxy_add_x_forwarded_for için; proxy_pass } # Tüm statik dosyalar, tomcat veya resin olmadan nginx tarafından doğrudan okunur konum ~. *. (htm | html | gif | jpg | jpeg | png | bmp | swf | ioc | rar | zip | txt | flv | mid | doc | ppt | pdf | xls | mp3 | wma) $ {15 gün sona eriyor;} konum ~. *. (js | css)? $ {1 saat sona eriyor;} } }

Three, nginx + tomcat, tomcat cluster'ı ve yük dengelemeyi gerçekleştiriyor

1. Temel ortam:

Uygulama uygulama sunucusu apache-tomcat-7.0.75

web sunucusu: nginx-1.8.1 / nginx

Java ortamı: jdk1.7

Sistem ortamı: win7 sistemi

2. Yazılımı hazırlayın

Jdk1.7 indirme bağlantısı:

nginx indirme bağlantısı:

nginx / Windows-1.8.1

tomcat indirme adresi:

Winsw indirme adresi:

3. tomcat'i yapılandırın

3.1 tomcat'i yükle

Yükleme paketi: D: \ tomcat \ apache-tomcat-7.0.75.tar.gz

Tomcat'in iki kopyasını açın ve

D: \ Apache Grubu \ apache-tomcat-7.0.75

D: \ Apache Grubu \ apache-tomcat-7.0.75-1

3.2 tomcat yapılandırma dosyası server.xml'yi değiştirin

Yatay bir küme ise, yani tomcat'i farklı bilgisayarlara kurun, tomcat yükleme sayısı birdir ve tomcat yapılandırma dosyasını değiştirmeye gerek yoktur.Burada aynı bilgisayarda yüklü iki tomcat olduğundan, dikey küme modu uygulanır, bu nedenle değiştirilmesi gerekir Bağlantı noktası çakışmalarını önlemek için ayarlardan biri.

Ayarlardan birini değiştirin tomcat2 / conf / server.xml dosyasını açın, içindeki tüm bağlantı noktası ayarlarını değiştirin ve aşağıdaki gibi 8'den 9'a değiştirin:

D: \ Apache Group \ apache-tomcat-7.0.75-1 \ conf \ server.xml

< Sunucu bağlantı noktası = "9005" shutdown = "KAPATMA" > # Tomcat'in dinleme bağlantı noktasını varsayılan 8005'ten 9005'e değiştirin < Dinleyici className = "org.apache.catalina.startup.VersionLoggerListener" / > < ! - Güvenlik dinleyicisi. /Docs/config/listeners.html adresindeki belgeler < Dinleyici className = "org.apache.catalina.security.SecurityListener" / > - > < ! - APR kitaplık yükleyici. /Docs/apr.html adresindeki belgeler - > < Dinleyici className = "org.apache.catalina.core.AprLifecycleListener" SSLEngine = "açık" / > < ! - Web uygulamaları yüklenmeden önce Jasper'ı başlatın. Belgeler /docs/jasper-howto.html adresinde - > < Dinleyici className = "org.apache.catalina.core.JasperListener" / > < ! - Belirli java / javax API'lerinin kullanımından kaynaklanan bellek sızıntılarını önleyin - > < Dinleyici className = "org.apache.catalina.core.JreMemoryLeakPreventionListener" / > < Dinleyici className = "org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" / > < Dinleyici className = "org.apache.catalina.core.ThreadLocalLeakPreventionListener" / > < Bağlayıcı bağlantı noktası = "9090" protokol = "HTTP / 1.1" # Http hizmeti bağlantı noktası numarasını varsayılan 8080'den 9090'a değiştirin connectionTimeout = "20000" redirectPort = "8443" / > < Bağlayıcı bağlantı noktası = "9009" protokol = "AJP / 1.3" redirectPort = "8443" / > # AJP bağlantı noktası numarasını varsayılan 8009'dan 9009'a değiştirin

3.3 tomcat'e normal olarak erişilip erişilmediğini test edin

Adresi ziyaret edin: http: // localhost: 8080

http: // localhost: 9090

4. nginx'i kurun ve yapılandırın

4.1 nginx'i kurun

Kurulum paketi yolu: D: \ nginx \ window \ nginx-1.8.1.zip

Açma yolu: D: \ nginx \ window \ nginx-1.8.1

Nginx.exe'yi çalıştırın (yani, nginx -c conf \ nginx.conf), varsayılan olarak bağlantı noktası 80 kullanılır ve günlük D: \ nginx \ window \ nginx-1.8.1 \ logs klasöründe bulunabilir.

Kurulumun başarılı olup olmadığını test edin:

Http: // localhost adresini girin

4.2 nginx'i sistem hizmeti olarak ekleyin

4.2.1 winsw'yi indirin

İndirme bağlantısı:

4.2.2 WINSW ayarları

Winsw çalıştırılabilir programını nginx kurulum dizinine kopyalayın ve nginx-service olarak yeniden adlandırın

Nginx-service.xml adlı yeni bir dosya oluşturun (not: dosya adı yürütülebilir dosya adıyla aynı olmalıdır) ve şunu ekleyin:

< hizmet > < İD > nginx < /İD > < isim > nginx < / isim > < açıklama > nginx < /açıklama > < çalıştırılabilir > D: \ nginx \ window \ nginx-1.8.1 \ nginx.exe < / yürütülebilir > < günlük yolu > D: \ nginx \ pencere \ nginx-1.8.1 \ < / logpath > < günlük modu > rulo < / logmode > < bağımlı > < /bağımlı > < başlangıç argümanı > -p D: \ nginx \ pencere \ nginx-1.8.1 < / startargument > < Stopargument > -p D: \ nginx \ window \ nginx-1.8.1 -s durdurma < / stopargument > < /hizmet >

Not: D: \ nginx \ window \ nginx-1.8.1 kurulum yoludur

name, hizmet adıdır, yürütülebilir, yürütülebilir program yoludur ve günlük yolu, günlük yolunu çalıştıran programdır.

4.2.3 Sistem hizmetlerini yükleyin

Nginx kurulum dizininde cmd'yi (kısayol: shift + sağ fare düğmesi) çalıştırın ve şu komutu çalıştırın: nginx-service.exe install

Not: nginx-service.exe kaldırma komutu ilgili sistem hizmetini silebilir

Nginx-service.exe stop komutu, ilgili sistem hizmetini durdurabilir

Nginx-service.exe start komutu ilgili sistem hizmetini başlatabilir

4.2.4 Hizmetin başarıyla kurulup kurulmadığını kontrol edin

Bilgisayar yönetimi- > Servis: Servis çalışmıyorsa, servisi buradan başlatabilir veya otomatik olarak başlayacak şekilde ayarlayabilirsiniz.

Not: Hizmet başarıyla yüklendiyse, hizmet üzerinde aşağıdaki işlemleri cmd (yönetici) olarak gerçekleştirebilirsiniz.

Nginx'i başlatın: net start nginx

Nginx'i durdur: net stop nginx

4.2.5 nginx'in normal şekilde çalıştığını doğrulayın

Tarayıcıda http: // localhost URL'sini açın

4.3 nginx.conf dosyasını yapılandırın

Varsayılan olarak, nginx'in yukarı akışı yoklama yoluyla yük dengeleme uygular.Ayrıca, yoklama olasılığını değiştirmek için ağırlık ağırlığını = 1 artırabilirsiniz.

Yapılandırma dosyası dizini: D: \ nginx \ window \ nginx-1.8.1 \ conf \ nginx.conf

worker_processes 1; # Çalışan işlemlerin sayısı, genellikle bilgisayarın cpu çekirdeği sayısıyla aynıdır Etkinlikler { worker_connections 1024; # İşlem başına maksimum bağlantı sayısı (maksimum bağlantı sayısı = bağlantı sayısı * işlem sayısı) } http { mime.types dahil; # Dosya uzantısı ve dosya türü eşleme tablosu default_type application / octet-stream; #Default dosya türü dosya gönder; # Verimli dosya aktarım modunu etkinleştirin, dosya gönderme talimatı nginx'in dosya gönderme işlevini çıktı dosyaları için çağırıp çağırmayacağını belirtir, normal uygulamalar için açık olarak ayarlayın, # Ağır disk G / Ç yükleme uygulamaları ile indirme ve diğer uygulamalar için kullanılıyorsa, disk ve ağ G / Ç işlem hızını dengelemek ve sistemin yükünü azaltmak için kapalı olarak ayarlanabilir. # Not: Resim düzgün görüntülenmiyorsa, bunu kapalı olarak değiştirin. keepalive_timeout 65; #Saniye cinsinden uzun bağlantı zaman aşımı süresi gzip açık; # Gizp sıkıştırmasını etkinleştir #Sunucu kümesi yukarı akış hwb.com {#server cluster name server 127.0.0.1:8080 weight = 1; #Sunucu yapılandırması Ağırlık, ağırlık anlamına gelir Ağırlık ne kadar büyükse, dağıtım olasılığı o kadar büyük olur. sunucu 127.0.0.1:9090 ağırlık = 2; } #Current Nginx yapılandırması server { 80 dinle; # 80 numaralı bağlantı noktasını dinleme diğer bağlantı noktalarına değiştirilebilir. Birden fazla sunucu yapılandırırsak, bu dinleyicinin farklı şekilde yapılandırılması gerektiğini unutmayın, aksi takdirde nereye gideceğimizden emin olamayız. server_name localhost; ############### Geçerli hizmetin etki alanı adı # server_name: Dinledikten sonra nereye gideceğinizi belirtir, burada doğrudan yerel, doğrudan nginx klasörüne gidin yer / { proxy_pass proxy_redirect varsayılan; } error_page 500502503504 /50x.html; location = /50x.html { kök html; Kök, # ile yapılandırılır, bu, istenen yol eşleştirildiğinde, ilgili dosyanın bu klasörde aranacağı anlamına gelir; bu, sonraki statik dosya sunucusu için çok yararlıdır. } } }

5. Küme erişimini test edin

5.1 tomcat 8080, 9090 bağlantı noktasını başlatın

5.2 nginx'i başlatın Veya cmd komutu: net start nginx

Nginx'i başlatın

5.3 Erişim sayfası Adres: http: //localhost/testcluster/test.jsp Nginx, 80 numaralı bağlantı noktasını dinleyecek şekilde yapılandırılmıştır ve sunucu dağıtımı varsayılan olarak gerçekleştirilir.

ilk defa

ikinci kez

üçüncü kez

dördüncü kez

beşinci kez

Not: Yenileme testi 5 kez gerçekleştirildi ve Tomcat12 kez ve Tomcat23 kez ziyaret edildi. Ağırlık ne kadar büyükse erişim olasılığının o kadar yüksek olduğu görülebilir. Ek: tomcat Session ile ilgili soru genellikle Nginx'in bir eklenti modülü olan memcached veya nginx_upstream_jvm_route'u kullanmaktır ve Session Sticky'nin Cookie'ye dayalı fonksiyonunu uygulamak için kullanılır. Çok fazla tomcats varsa, oturum senkronizasyonu tavsiye edilmez.Sunucular arasında oturum senkronizasyonu kaynakları tüketir ve yüksek eşzamanlı ortamlar kolayca oturum fırtınalarına neden olabilir. Lütfen oturum çözümünü kendi başvuru durumunuza göre makul bir şekilde benimseyin.

Not: Kod sözcükleri gerçekten zor. Bunu görüyorsanız, beğenmek için zaman ayırın ~

İnsanlar öldü ve beyinleri talep edilecek. Bu pilot biraz sefil
önceki
İki erkek kaş almak için 1680 yuan harcadı, ancak daha sonra bunların kadın kaşları olduğu bulundu.
Sonraki
Çin Otomobil Derneği 20182 otomobil üretim ve satış verilerini yayınladı
Yeni çıkarılan ve dünyaya patlatılan bu Kuzey Amerika bilim kurgu filmi çok mu maliyetli?
Tam ekran iPad burada! "Patlamalar" Apple'ın çökmekte olan tablet pazarını kurtarmasına yardımcı olabilir mi?
İPhone 8'in çıkış tarihi onaylandı, değişiklikler çılgınca!
"Şizofreni", Cannes Grand Prix'sini kazanan kısa bir film, izlemeyi hak ediyorsun
61 Çocuk Bayramı çok yakında geliyor, bu çocuklar için en çok aranan hediye!
"Mission Impossible 6" bir serinin altıncı bölümünü çekebilir ve yine de yüksek kalitede olabilir, bu başlı başına bir efsane değil mi?
6 oynamak gençler için "şarj etme" hileleridir
İPhone'daki bu oyun çok şirin!
Finlandiya'da buzla sürüklenen 3 günden sonra, WRC şampiyonunun buzda ve karda sürüş hilelerini aldım
Kocasını zorla ölüme mahkum ettikten sonra on yıl boyunca ailesine bakmayı başardı, ancak kadın sonunda oğlu tarafından evden çıkarıldı.
İPhone7 plus'ın fiyatı rekor seviyeye düştü!
To Top