2. 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ış
4. 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.
7. 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.
8. 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 TCP
Apache (mod-proxy)
HAProxy
squid
LVS
lighttp
balance
delegate
pen
pure load balacer
python director
Alternatif Ters Proxy Yazılımları
9. 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
10. 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
12. 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
13. 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ğuna
root /home/foo/bar komutunu vermek yeterli.
14. 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.
15. 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;
}
16. 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.
17. 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.
18. 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.
19. 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ı
20. 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;
...
}
21. 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
22. 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;
}
23. 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#
}
24. Ters Proxy Yapılandırması
• Her şey için bir modül var: HttpProxyModule
location / {
#Yönlendirmeyi belirtiyoruz
proxy_redirect http://www.ornekdomain.com:81 http://www.ornekdomain.com;
proxy_redirect http://ornekdomain.com:81 http://ornekdomain.com;
#Proxy’lenmiş sunucunun adresini ayarlıyoruz
proxy_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;
}
}
26. Kaynakça
1. Nginx Doc
2. Nginx wiki
3. A Tale of 3 Computers - Proxy vs Reverse Proxy
4. Nginx Conf for Apache
5. http://www.aosabook.org/en/nginx.html
6. SSL wiki
7. SSL Conf