Nginx sunu 2014

27
Nginx 10060316 Nazan Poşul 10060289 Mert Akkaya

description

Nginx nedir, alternatifleri nelerdir ,Ubuntu'da Nginx kurulumu, dizin yapısı hakkında bir sunum.

Transcript of Nginx sunu 2014

Page 1: Nginx sunu 2014

Nginx10060316 Nazan Poşul10060289 Mert Akkaya

Page 2: Nginx sunu 2014

Nginx Nedir ?

• Özgür, açık kaynaklı bir Http, ters proxy ve Imap/Pop3 sunucu

• 2002 yılında Igor Sysoev tarafından geliştirilmeye başlanmış, 2004 yılında yayımlanmış

• Kaynak kodu 2-clause BSD-like lisansı ile lisanslı

• Günümüzde alan adları etrafında %12.18’e kadar yaygınlaşmış

Page 3: Nginx sunu 2014

Alternatifleri Neler?

Başlıca alternatifleri:

1. Apache2. Lighttpd3. LiteSpeed4. Zeus5. Cherokee

Page 4: Nginx sunu 2014

Avantajları...

➢ C10k (concurrent 10k) problemini hedef alan bir sunucu. Geleneksel yapıdaki gibi sunucuya gelen talepleri “thread”ler aracılığı ile yakalamak yerine, asenkron bir yapı kullanıyor.

➢ Bu sayede yüksek trafikli web siteleri için ölçeklenebilir ve daha düşük hafıza imkanı sunuyor

➢ Konfigürasyonu kolay, güvenli, stabil

• Nginx; Wordpress, Gravatar, Github, Hulu, SourceForge, HaberTürk, Heroku gibi yüksek performans isteyen sitelerde kullanılmaktadır.

Page 5: Nginx sunu 2014
Page 6: Nginx sunu 2014

Nginx’in Mimarisi

Page 7: Nginx sunu 2014

Proxy ve Ters Proxy Nedir?

Proxy (vekil sunucu), bir client’ın bazı sebeplerden ötürü sunucuyla dolaylı yoldan iletişim kurmasına yarayan sunucudur. Client bu proxy sunucusunu farkında olarak kullanır.

Ters Proxy ise bu durumun sunucu tarafından yapılmasıdır. Yine bazı sebeplerden ötürü sunucu bu client’ın kendisine doğrudan erişimini istemez. Bu durumda bir veri yönlendirmesi ile ters proxy yapar. Client’ın bu durumdan haberi olmaz.

Page 8: Nginx sunu 2014

Neden Ters Proxy?

• Trafiği yoğun bir web sitesinin yükünü, tek bir sunucu kaldıramıyor olabilir. Bu durumda lokasyona göre bir sunucu yönlendirmesi kurularak ters proxy yapılabilir. (bkz. Load-Balance) (bkz. CDN)

• Site hassas içeriğe sahiptir ve site yöneticileri siteyi doğrudan kamuya açmak istemiyor olabilir.

HTTP TCPApache (mod-proxy)HAProxysquidLVSlighttp

balancedelegatepenpure load balacerpython director

Alternatif Ters Proxy Yazılımları

Page 9: Nginx sunu 2014

Desteklediği Platformlar

• Linux 2.2 — 2.6 / i386; Linux 2.6 / amd64• FreeBSD 3 — 8 / i386; FreeBSD 5 — 8 / amd64• Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v• MacOS X / ppc, i386• Windows XP, Windows Server 2003

Page 10: Nginx sunu 2014

Nginx Kurulumu

➔ Kurmak için;sudo apt-get install nginx

➔ Versiyonu öğrenmek için;nginx -v

➔ Sunucunun doğru şekilde yüklendiğini öğrenmek için;ps aux | grep nginx

Page 11: Nginx sunu 2014

Nginx Kurulumu

Başarılı nginx kurulumu sonrası localhost.

Page 12: Nginx sunu 2014

Nginx Kullanımı

➔ Başlatmak için;sudo service nginx start

➔ Yeniden başlatmak için;sudo service nginx restart

➔ Sonlandırmak için;sudo service nginx stop

➔ Konfigürasyonun testi için;sudo service nginx configtest

Page 13: Nginx sunu 2014

Yapılandırma

❖ Nginx, Unix dizin yapısının altına yerleşiyor.➢ Yapılandırma dosyaları /etc/nginx dizini altında. (*.conf)

❖ Web sunucu kökü varsayılan olarak /usr/share/nginx/html ayarlı➢ Varsayılan dizin, nginx versiyonu, yükleme şekli, işletim sistemine

göre değişebiliyor➢ Buradaki index.html’i düzenleyerek site indeksini ayarlayabiliyoruz.➢ Root aynı zamanda HttpCoreModule’nin bir değişkeni.

■ /etc/nginx/nginx.conf dosyasının içindeki server bloğunaroot /home/foo/bar komutunu vermek yeterli.

Page 14: Nginx sunu 2014

VirtualHost in Nginx

❖ /etc/hosts dosyasında tanımlı hostlar var.➢ Buraya IP adresi ve domain’i ekliyoruz.

❖ /etc/nginx/sites-enabled/ dizini altına domain adına göre bir dizin yapısı oluşturmamız yönetilebilirlik açısından faydalı

❖ VirtualHost (SanalKonak) bir Apache terimidir. Nginx bu işi server bloklarıyla yapıyor.

Page 15: Nginx sunu 2014

VirtualHost in Nginx

➢ Örnek yapı: http { index index.html;

server { server_name www.orneksanaldomain.com; access_log logs/orneksanaldomain.access.log main; root /var/www/orneksanaldomain.com/htdocs; }

Page 16: Nginx sunu 2014

Temel Yapılandırma Ayarları

❖ /etc/nginx/nginx.conf dosyası içinde;

➢ user www-data: Sunucu ne çalıştıracağına karar verir.

➢ worker_process: Nginx in kaç tane eş zamanlı işlem kullanacağını tanımlar.

➢ pid /var/run/nginx.pid: Program tanımlamalarının(pid) depolandığı yerin yolunu gösterir.

Page 17: Nginx sunu 2014

Temel Yapılandırma Blokları

❖ Nginx yapılandırma dosyası bloklar içerir ve bu blokları yönetir.

➢ ‘events’ bloğu:○ Nginx bağlantıları nasıl işleyeceğini denetleyen özel bir

konumdur.

➢ ‘http’ bloğu:○ Yapılandırma dosyasında ana hiyerarşinin başladığı bloktur.

Genel yapılandırma burada yapılır.○ Server ve location bloklarının temel yapılandırma dosyası dışında

alacağı özel site ve url eşleşme lokasyonları buradadır.

Page 18: Nginx sunu 2014

Temel Yapılandırma Blokları

➢ ‘server’ bloğu:○ Nginx, sanal barındırma işlevlerini gerçekleştirmek için sunucu

blokları kullanır.○ server_name gelen bir talep için hangi server bloğunun

kullanılacağını belirler.○ Her satır semi-colon (;) ile ayrılır.

➢ ‘location’ bloğu:○ Sunucu dahilinde nasıl kesin kaynak isteği işlendiğini belirler.

Page 19: Nginx sunu 2014

SSL Nedir?

➔ Netscape tarafından, 1994 yılında, güvenli iletişim için tasarlandı.➔ Secure Sockets Layer➔ Adres çubuğunun başındaki asma kilit simgesi➔ Güvenlik amacıyla

◆ e posta gönderilerinde,◆ Ftp transferlerinde,◆ alışveriş sitelerinde kullanılıyor.

➔ Nginx’te ilgili modül: ngx_http_ssl_module➔ --with-http_ssl_module ile yüklenmesi gerekli

◆ OpenSSL kütüphanesi de gerekli◆ Sunucu sertifikası herkese açık, Özel anahtar ise gizli ve erişimi kapalı

● Özel anahtar aynı zamanda nginx tarafından okunabilir olmalı

Page 20: Nginx sunu 2014

SSL Yapılandırması

❖ Bu yapılandırmada tarayıcı talep edilen sunucuya bakmaksızın varsayılan sunucunun sertifikasını alır ve bu sertifikayı önerir.

➢ Örnek Yapı:server { listen 443; server_name www.ornekdomain.com; ssl on; ssl_certificate www.ornekdomain.com.crt; ssl_certificate_key www.ornekdomain.com.key; ssl_protocols SSLv3 TLSv1; ssl_ciphers HIGH:!ADH:!MD5; ...}

Page 21: Nginx sunu 2014

Basic Auth Nedir?

➔ Kullanıcı adı ve parola eşleşmesine dayanan bir güvenlik önlemi

➔ Http Basic Authentication bazlı

➔ Sitenin tümünü ya da bir bölümünü sınırlayabiliyoruz

➔ Nginx’te ilgili modül: HttpAuthBasicModule

Page 22: Nginx sunu 2014

Basic Auth Yapılandırması

❖ HttpAuthBasicModule➢ auth_basic, auth_basic_user_file komutları var.➢ http, server, location, limit_except bağlamları içerisinde

kullanılırlar.➢ auth_basic öntanımlı olarak ‘off’ ➢ Örnek Yapı:

location / { auth_basic "Restricted"; auth_basic_user_file htpasswd;}

Page 23: Nginx sunu 2014

URL Yönlendirmesi

• URL yönlendirmesi için HttpRewriteModule’yi kullanıyoruz.• Söz dizimi: rewrite regex replacement [flag] şeklinde• Daha kapsamlı kullanım için nginx dokümantasyonuna bakın ve unutmayın

IfIsEvil

server { server_name .ornekdomain.org; rewrite ^ http://ornekdomain.com$request_uri? permanent; # ^ satır başını, $ ise satır sonunu ifade ediyor #

#permanent bayrağı ise 301 koduyla beraber dönüyor#

#$request_uri? ise “.com/”tan sonrasını kopyalamak için#

}

Page 24: Nginx sunu 2014

Ters Proxy Yapılandırması

• Her şey için bir modül var: HttpProxyModulelocation / {

#Yönlendirmeyi belirtiyoruzproxy_redirect http://www.ornekdomain.com:81 http://www.ornekdomain.com;proxy_redirect http://ornekdomain.com:81 http://ornekdomain.com;

#Proxy’lenmiş sunucunun adresini ayarlıyoruzproxy_pass http://localhost:8080;

#Proxy’lenmiş sunucuya gidecek birkaç “request header” tanımlıyoruz

proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}

}

Page 25: Nginx sunu 2014

Son

Teşekkürler!

Page 27: Nginx sunu 2014

Ekstra

• Nginx’in .conf uzantılı dosyaları için vim eklentisi• Nginx PCRE (Pearl Compatible Regular Expressions) kullanıyor. • Vagrant’a kurulum için Vagrantfile’deki port yönlendirmesi

• config.vm.network :forwarded_port, guest: 80, host: 8080

• Apache araçlarını kullanmadan .htpasswd dosyasını ayarlamak için: Nginx FAQ

• İşlemci sayısı için: cat /proc/cpuinfo | grep processor