Nginx ile reverse proxy kurarak sitenizin hızına hız katabilir ve sayfalarınızın cachelenmesi daha duzgun bir hale getirebilirsiniz. Nginx, Varnish veya Squid gibi diğer reverse proxy sunuculara gore cok daha basit ve anlaşılması daha kolay bir konfigurasyona sahiptir. Diğer reverse proxylerden daha hızlı olup olmadığı soru işareti olsa da bizce onemli olan kolay ayarlanabilir olmasıdır. Eğer reverse proxynin işleyiş mantığını anlamazsanız Varnish, Squid ya da Nginx de her zaman problem yaşarsınız.
[h=2]Nginx İle Reverse Proxy Centos’da Nasıl Kurulur ?[/h]
Sıfırdan başlayacak olursak Centos’da sourcedan compile etmekle uğraşmayıp, aşağıdaki şekilde Nginx’i 2 saniyede kurabiliriz. Source’dan compile etmenin avantajı her zaman en son Nginx surumunu kullanmak olsa da bu makalede bu işleme girmiyoruz. Nginx ile reverse proxy kurmak icin ilk adım:
Nginx Kurulumu
yum install epel-release yum install nginx
1
2
yum install epel-release
yum install nginx
Kurulum işlemi tamamlandıktan sonra konfigurasyon dosyalarına el atmamız gerekiyor. Nano ya da vi gibi bir editorle Nginx’in kendi ayarlarına girelim.
Nginx Config Dosyası
nano /etc/nginx/nginx.conf
1
nano /etc/nginx/nginx.conf
Konfigurasyon dosyasında onemli bir cok parametre olsa da konumuz reverse proxy olduğu icin her bir parametreyi acıklamak yerine standart ve basit bir dosya paylaşmayı uygun goruyoruz cunku asıl ayarlarımızı farklı bir dosya uzerinde yapmamız gerekiyor.
Nginx default config dosyası
user nginx; worker_processes 8; worker_rlimit_nofile 20480; #error_log /var/log/nginx/error.log; #error_log /var/log/nginx/error.log notice; #error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; events http
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
user nginx;
worker_processes 8;
worker_rlimit_nofile 20480;
#error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events
http
Yukarıda paylaştığımız dosyada worker_process Nginx’in aynı anda kac tane CPU’yu kullanabileceğini belirtmektedir. Bunu Nginx’in kurulu olduğu sunucunuza gore değiştirmelisiniz. Alttaki komut kac tane CPU’nuz olduğunuzu gosterir.
Kac CPU var?
grep ^processor /proc/cpuinfo | wc -l
1
grep ^processor /proc/cpuinfo | wc -l
Bunun dışındaki diğer tum ayarlarla oynamak size kalmış. Orneğin error logları acmak isteyebilir ve GZIP ayarlarını değiştirmek isteyebilirsiniz. Daha once dediğimiz gibi asıl konumuz bu ayarlar olmadığı icin işlem yapacağımız konfigurasyon dosyasını anlatacağız.
[h=2]Reverse Proxy Ne İşe Yarar ?[/h]
Yukarıda Nginx’i sadece Centos’a kurduk ve bir kac ayarını değiştirdik. Biraz sonra nginx ile reverse proxy yapabilmek icin ayarlarının nasıl yapılacağına gececeğiz fakat oncelikle reverse proxy’nin ne işe yaradığını anlatmamız daha doğru olacaktır. Eğer mantığı kavramazsanız aklınıza hic gelmeyecek yuzlerce problemle karşılaşabilirsiniz.
Reverse proxy ile temel amac bir sayfanın cachelenmiş halini son kullanıcıya sunmaktır. Bir WordPress sitesi uzerinden ornek verecek olursak; bir sitenin sayfaları oluşturulurken veritabanından alınan bilgiler ışığında sayfa render edilir. Bu site orneğin Apache uzerinde calışıyorsa, her gelen kullanıcı icin bir PHP process Apache tarafından yaratılır. Sayfalarınızdaki kullanıcı sayısı arttıkca işlemler (processler) fazlalaşır ve kullandığınız sunucu uzerindeki yuk gittikce artar.
Reverse proxy’nin amacı bir kere yaratılmış bir sayfanın bu işlemlere tekrar tabi tutulmadan cacheden gelmesini sağlamak ve boylelik performansı arttırmaktır. Mesela bu okumuş olduğunuz makalenin surekli değişmesi olası bir şey olmadığından bu sayfayı belli bir sureliğine cachede tutmak mantıklıdır. Her defasında veritabanına ne oldu diye sorgu atmak ve sonucu render etmekle uğraşan bir process yaratmak pek de performans acısından doğru değildir. Makale değil de surekli değişen, yani dinamik bir sayfanın cachelenmesi ise pek uygun değildir.
Bu cerceveden bakılırsa reverse proxy konfigurasyonu hangi sayfaların ne kadar sureliğine cachelenmesi ya da hic cachelenmeden ana sunucudan sayfanın getirilmesi uzerine kurgulanır.
[h=2]Nginx ile Reverse Proxy Yapmak İcin Backend Ayarları[/h]Bir site Apache sunucunun (Apache yerine tabi bu IIS yada NGINX de tabi olabilir) 80 portundan kullanıcıya cevap veriyorsa once bu port farklı bir portla değiştirilir ki reverse proxy sunucusu 80’den kullanıcılara cevap verebilsin. Reverse proxy Apache’ye atadığınız yeni portdan sayfaları talep eder. Aşağıdaki konfigurasyona gecmeden once Apache sunucunuzun 80 yerine 82 portundan cevap vermesi icin httpd.conf dosyanızı değiştirip apacheyi restart edin.
[h=2]Nginx İle Reverse Proxy Yapmak İcin Virtual.Conf Ayarı[/h]Aşağıdaki konfigurasyon dosyası bir WordPress sitesini cachelemek icin yaratılmıştır. Sırasıyla şu işlemleri yaptığımız zaman Nginx ile gelen konfigurasyonları ucurup, nginx ile reverse proxy kurulumu icin gerekli konfigurasyonu oluşturacağız:
Nginx'in default dosyalarını ucuralım
rm /etc/nginx/conf.d/default.conf rm /etc/nginx/conf.d/virtual.conf nano /etc/nginx/conf.d/virtual.conf
1
2
3
rm /etc/nginx/conf.d/default.conf
rm /etc/nginx/conf.d/virtual.conf
nano /etc/nginx/conf.d/virtual.conf
Virtual.conf dosyasını ayarlayalım:
Wordpress icin yaratılmış bir Nginx Virtual.conf
proxy_cache_path /home/nginxcache levels=1:2 keys_zone=my_zone:120m max_size=5G inactive=1M; #Nginx cache dosyalarının nereye ve ne kadar sureliğine yazılacağını belirtir. server if ($query_string != "") # Sonucta bir wordpress sayfasının admin sayfalarını niye cacheyelim ki? if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") # Aşağıdaki cookieler varsa da cachelemek pek doğru değil değil mi? if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_log ged_in") proxy_cache my_zone; add_header X-Proxy-Cache $upstream_cache_status; proxy_set_header Host www.sayfam.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header X-Proxy-Serve SAYFAM; # Bu headerı test etmek icin kullanıyoruz. proxy_pass http://localhost:82; # Gelen istekler aslında 82 nolu porttaki Apache'den cevaplanıyor. proxy_cache_valid 200 301 302 3m; # 200 301 ve 302 cevaplarımız 3 dakikalığına cacheleniyor. proxy_cache_valid 404 1m; #404 ise 1 dk proxy_cache_bypass $skip_cache; #Yukarıda skip_cache 1 olursa Nginx hic cachelemez. proxy_cache_bypass $http_pragma $http_authorization; # Bu ayarla sayfaların headerlarından da kac dk cache atılması belirtilebilir. proxy_cache_key "$scheme$request_method$host$request_uri"; } error_page 403 500 502 503 504 /500.html; location = /500.html location ~ ^/(wp-admin|wp-login\.php) }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
proxy_cache_path /home/nginxcache levels=1:2 keys_zone=my_zone:120m max_size=5G inactive=1M; #Nginx cache dosyalarının nereye ve ne kadar sureliğine yazılacağını belirtir.
server
if ($query_string != "")
# Sonucta bir wordpress sayfasının admin sayfalarını niye cacheyelim ki?
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml")
# Aşağıdaki cookieler varsa da cachelemek pek doğru değil değil mi?
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_log
ged_in")
proxy_cache my_zone;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_set_header Host www.sayfam.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-Proxy-Serve SAYFAM; # Bu headerı test etmek icin kullanıyoruz.
proxy_pass http://localhost:82; # Gelen istekler aslında 82 nolu porttaki Apache'den cevaplanıyor.
proxy_cache_valid 200 301 302 3m; # 200 301 ve 302 cevaplarımız 3 dakikalığına cacheleniyor.
proxy_cache_valid 404 1m; #404 ise 1 dk
proxy_cache_bypass $skip_cache; #Yukarıda skip_cache 1 olursa Nginx hic cachelemez.
proxy_cache_bypass $http_pragma $http_authorization; # Bu ayarla sayfaların headerlarından da kac dk cache atılması belirtilebilir.
proxy_cache_key "$scheme$request_method$host$request_uri";
}
error_page 403 500 502 503 504 /500.html;
location = /500.html
location ~ ^/(wp-admin|wp-login\.php)
}
Yukarıdaki konfigurasyon dosyasının yorum satırlarından da anlaşabileceği gibi temel amac gelen istekleri 82 portuna yonlendirmek ve 82’den gelen cevapların da hangilerinin cachelenip hangilerinin cachelenmemesi gerektiğine karar vermektir. Bu dosyayı kaydettikten sonra aşağıdaki komutu calıştırdığımız zaman Nginx artık reverse proxy olarak calışmaya başlar. IPTables’den 82 nolu portun dışarıya kapalı olduğuna emin olun yoksa hem 80 hem de 82 nolu portlarda sayfanız ulaşılır olur ki bu da SEO acısından negatif sonuclar doğurabilir.
service nginx start
1
service nginx start
Yukarıdaki konfigurasyona gore birşeyler cacheleniyorsa aşağıdaki klasorun buyukluğu file cache yaptığımız icin artacaktır:
/home/nginxcache
1
/home/nginxcache
Konfigurasyonu test etmenin en basit yollarından biri HTTP Spy gibi bir extension’ı Chrome’a yukleyip, headerları incelemektedir. Herhangi bir sayfa Nginx’de cachelenmiş ise header’da HIT, eğer cachede yoksa MISS, konfigurasyona gore cachelenmemesi gereken wp-admin tarzı bir path is BYPASS tarzı cevaplar header’da gorulecektir.
Teknoloji Nginx ile reverse proxy kurarak sitenizin hızına hız katabilir ve sayfalarınızın cachelenmesi daha duzgun bir hale getirebilirsiniz. Nginx, Varnish veya Squid gibi diğer reverse proxy sunuculara gore cok daha basit ve anlaşılması daha kolay bir konfigurasyona sahiptir. Diğer reverse proxylerden daha hızlı olup olmadığı soru işareti olsa da bizce onemli olan kolay ayarlanabilir olmasıdır. Eğer reverse proxynin işleyiş mantığını anlamazsanız Varnish, Squid ya da Nginx de her zaman problem yaşarsınız.
[h=2]Nginx İle Reverse Proxy Centos’da Nasıl Kurulur ?[/h]
Sıfırdan başlayacak olursak Centos’da sourcedan compile etmekle uğraşmayıp, aşağıdaki şekilde Nginx’i 2 saniyede kurabiliriz. Source’dan compile etmenin avantajı her zaman en son Nginx surumunu kullanmak olsa da bu makalede bu işleme girmiyoruz. Nginx ile reverse proxy kurmak icin ilk adım:
Nginx Kurulumu
yum install epel-release yum install nginx
1
2
yum install epel-release
yum install nginx
Kurulum işlemi tamamlandıktan sonra konfigurasyon dosyalarına el atmamız gerekiyor. Nano ya da vi gibi bir editorle Nginx’in kendi ayarlarına girelim.
Nginx Config Dosyası
nano /etc/nginx/nginx.conf
1
nano /etc/nginx/nginx.conf
Konfigurasyon dosyasında onemli bir cok parametre olsa da konumuz reverse proxy olduğu icin her bir parametreyi acıklamak yerine standart ve basit bir dosya paylaşmayı uygun goruyoruz cunku asıl ayarlarımızı farklı bir dosya uzerinde yapmamız gerekiyor.
Nginx default config dosyası
user nginx; worker_processes 8; worker_rlimit_nofile 20480; #error_log /var/log/nginx/error.log; #error_log /var/log/nginx/error.log notice; #error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; events http
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
user nginx;
worker_processes 8;
worker_rlimit_nofile 20480;
#error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events
http
Yukarıda paylaştığımız dosyada worker_process Nginx’in aynı anda kac tane CPU’yu kullanabileceğini belirtmektedir. Bunu Nginx’in kurulu olduğu sunucunuza gore değiştirmelisiniz. Alttaki komut kac tane CPU’nuz olduğunuzu gosterir.
Kac CPU var?
grep ^processor /proc/cpuinfo | wc -l
1
grep ^processor /proc/cpuinfo | wc -l
Bunun dışındaki diğer tum ayarlarla oynamak size kalmış. Orneğin error logları acmak isteyebilir ve GZIP ayarlarını değiştirmek isteyebilirsiniz. Daha once dediğimiz gibi asıl konumuz bu ayarlar olmadığı icin işlem yapacağımız konfigurasyon dosyasını anlatacağız.
[h=2]Reverse Proxy Ne İşe Yarar ?[/h]
Yukarıda Nginx’i sadece Centos’a kurduk ve bir kac ayarını değiştirdik. Biraz sonra nginx ile reverse proxy yapabilmek icin ayarlarının nasıl yapılacağına gececeğiz fakat oncelikle reverse proxy’nin ne işe yaradığını anlatmamız daha doğru olacaktır. Eğer mantığı kavramazsanız aklınıza hic gelmeyecek yuzlerce problemle karşılaşabilirsiniz.
Reverse proxy ile temel amac bir sayfanın cachelenmiş halini son kullanıcıya sunmaktır. Bir WordPress sitesi uzerinden ornek verecek olursak; bir sitenin sayfaları oluşturulurken veritabanından alınan bilgiler ışığında sayfa render edilir. Bu site orneğin Apache uzerinde calışıyorsa, her gelen kullanıcı icin bir PHP process Apache tarafından yaratılır. Sayfalarınızdaki kullanıcı sayısı arttıkca işlemler (processler) fazlalaşır ve kullandığınız sunucu uzerindeki yuk gittikce artar.
Reverse proxy’nin amacı bir kere yaratılmış bir sayfanın bu işlemlere tekrar tabi tutulmadan cacheden gelmesini sağlamak ve boylelik performansı arttırmaktır. Mesela bu okumuş olduğunuz makalenin surekli değişmesi olası bir şey olmadığından bu sayfayı belli bir sureliğine cachede tutmak mantıklıdır. Her defasında veritabanına ne oldu diye sorgu atmak ve sonucu render etmekle uğraşan bir process yaratmak pek de performans acısından doğru değildir. Makale değil de surekli değişen, yani dinamik bir sayfanın cachelenmesi ise pek uygun değildir.
Bu cerceveden bakılırsa reverse proxy konfigurasyonu hangi sayfaların ne kadar sureliğine cachelenmesi ya da hic cachelenmeden ana sunucudan sayfanın getirilmesi uzerine kurgulanır.
[h=2]Nginx ile Reverse Proxy Yapmak İcin Backend Ayarları[/h]Bir site Apache sunucunun (Apache yerine tabi bu IIS yada NGINX de tabi olabilir) 80 portundan kullanıcıya cevap veriyorsa once bu port farklı bir portla değiştirilir ki reverse proxy sunucusu 80’den kullanıcılara cevap verebilsin. Reverse proxy Apache’ye atadığınız yeni portdan sayfaları talep eder. Aşağıdaki konfigurasyona gecmeden once Apache sunucunuzun 80 yerine 82 portundan cevap vermesi icin httpd.conf dosyanızı değiştirip apacheyi restart edin.
[h=2]Nginx İle Reverse Proxy Yapmak İcin Virtual.Conf Ayarı[/h]Aşağıdaki konfigurasyon dosyası bir WordPress sitesini cachelemek icin yaratılmıştır. Sırasıyla şu işlemleri yaptığımız zaman Nginx ile gelen konfigurasyonları ucurup, nginx ile reverse proxy kurulumu icin gerekli konfigurasyonu oluşturacağız:
Nginx'in default dosyalarını ucuralım
rm /etc/nginx/conf.d/default.conf rm /etc/nginx/conf.d/virtual.conf nano /etc/nginx/conf.d/virtual.conf
1
2
3
rm /etc/nginx/conf.d/default.conf
rm /etc/nginx/conf.d/virtual.conf
nano /etc/nginx/conf.d/virtual.conf
Virtual.conf dosyasını ayarlayalım:
Wordpress icin yaratılmış bir Nginx Virtual.conf
proxy_cache_path /home/nginxcache levels=1:2 keys_zone=my_zone:120m max_size=5G inactive=1M; #Nginx cache dosyalarının nereye ve ne kadar sureliğine yazılacağını belirtir. server if ($query_string != "") # Sonucta bir wordpress sayfasının admin sayfalarını niye cacheyelim ki? if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") # Aşağıdaki cookieler varsa da cachelemek pek doğru değil değil mi? if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_log ged_in") proxy_cache my_zone; add_header X-Proxy-Cache $upstream_cache_status; proxy_set_header Host www.sayfam.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header X-Proxy-Serve SAYFAM; # Bu headerı test etmek icin kullanıyoruz. proxy_pass http://localhost:82; # Gelen istekler aslında 82 nolu porttaki Apache'den cevaplanıyor. proxy_cache_valid 200 301 302 3m; # 200 301 ve 302 cevaplarımız 3 dakikalığına cacheleniyor. proxy_cache_valid 404 1m; #404 ise 1 dk proxy_cache_bypass $skip_cache; #Yukarıda skip_cache 1 olursa Nginx hic cachelemez. proxy_cache_bypass $http_pragma $http_authorization; # Bu ayarla sayfaların headerlarından da kac dk cache atılması belirtilebilir. proxy_cache_key "$scheme$request_method$host$request_uri"; } error_page 403 500 502 503 504 /500.html; location = /500.html location ~ ^/(wp-admin|wp-login\.php) }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
proxy_cache_path /home/nginxcache levels=1:2 keys_zone=my_zone:120m max_size=5G inactive=1M; #Nginx cache dosyalarının nereye ve ne kadar sureliğine yazılacağını belirtir.
server
if ($query_string != "")
# Sonucta bir wordpress sayfasının admin sayfalarını niye cacheyelim ki?
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml")
# Aşağıdaki cookieler varsa da cachelemek pek doğru değil değil mi?
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_log
ged_in")
proxy_cache my_zone;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_set_header Host www.sayfam.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-Proxy-Serve SAYFAM; # Bu headerı test etmek icin kullanıyoruz.
proxy_pass http://localhost:82; # Gelen istekler aslında 82 nolu porttaki Apache'den cevaplanıyor.
proxy_cache_valid 200 301 302 3m; # 200 301 ve 302 cevaplarımız 3 dakikalığına cacheleniyor.
proxy_cache_valid 404 1m; #404 ise 1 dk
proxy_cache_bypass $skip_cache; #Yukarıda skip_cache 1 olursa Nginx hic cachelemez.
proxy_cache_bypass $http_pragma $http_authorization; # Bu ayarla sayfaların headerlarından da kac dk cache atılması belirtilebilir.
proxy_cache_key "$scheme$request_method$host$request_uri";
}
error_page 403 500 502 503 504 /500.html;
location = /500.html
location ~ ^/(wp-admin|wp-login\.php)
}
Yukarıdaki konfigurasyon dosyasının yorum satırlarından da anlaşabileceği gibi temel amac gelen istekleri 82 portuna yonlendirmek ve 82’den gelen cevapların da hangilerinin cachelenip hangilerinin cachelenmemesi gerektiğine karar vermektir. Bu dosyayı kaydettikten sonra aşağıdaki komutu calıştırdığımız zaman Nginx artık reverse proxy olarak calışmaya başlar. IPTables’den 82 nolu portun dışarıya kapalı olduğuna emin olun yoksa hem 80 hem de 82 nolu portlarda sayfanız ulaşılır olur ki bu da SEO acısından negatif sonuclar doğurabilir.
service nginx start
1
service nginx start
Yukarıdaki konfigurasyona gore birşeyler cacheleniyorsa aşağıdaki klasorun buyukluğu file cache yaptığımız icin artacaktır:
/home/nginxcache
1
/home/nginxcache
Konfigurasyonu test etmenin en basit yollarından biri HTTP Spy gibi bir extension’ı Chrome’a yukleyip, headerları incelemektedir. Herhangi bir sayfa Nginx’de cachelenmiş ise header’da HIT, eğer cachede yoksa MISS, konfigurasyona gore cachelenmemesi gereken wp-admin tarzı bir path is BYPASS tarzı cevaplar header’da gorulecektir.
Nginx ile Reverse Proxy Nasıl Kurulur ?
Bilim ve Teknoloji0 Mesaj
●45 Görüntüleme
- ReadBull.net
- Teknoloji Forumları
- Bilim ve Teknoloji
- Nginx ile Reverse Proxy Nasıl Kurulur ?
-
06-09-2019, 18:30:09Kayıtlı Üye