Programlar

Nginx nedir? Mail proxy sunucu özellikleri

Nginx nedir ?

Nginx (“engine x”, enciniks olarak telaffuz edilir); yüksek eş zamanlı çalışma kabiliyeti, yüksek performans ve düşük hafıza kullanımına odaklanılarak tasarlanmış bir web sunucusudur. Aynı zamanda ters vekil sunucusu, yük dengeleyici ve HTTP önbelleği olarak da kullanılabilir.

2002 yılında Igor Sysoev tarafından yazılmış olan Nginx Unix, Linux, BSD türevleri, Mac OS X, Solaris, AIX, HP-UX ve Microsoft Windows işletim sistemleri üzerinde çalışabilir. BSD-like lisansı ile yayımlanan Nginx bir özgür ve açık kaynak kodlu bir yazılımdır.

Netcraft’ın Nisan 2015 Web Sunucusu Anketine göre Nginx, internet üzerindeki tüm “aktif “siteler arasında en yaygın ikinci web sunucusudur.
Nginx [engine x], Igor Sysoev tarafından yazılan bir HTTP, reverse proxy ve mail proxy sunucusudur. 5 yıldır, özellikle Rus sitelerinde yoğun bir şekilde kullanılmaktadır. Örneğin; Rambler (RamblerMedia). Netcraft’a göre, nginx, Nisan 2010 itibari ile %4.70 oranında kullanılmaktadır. Bazı başarı hikayeleri (İngilizce): FastMail, WordPress

Kaynak kodu, 2-clause BSD-like license lisansı altındadır.Linux sunucularda alışılagelen apache web sunucusuna alternatif olarak henüz beta olarak geçmesine rağmen daha yüksek performanslı (Yapılan testlere göre %400’e kadar), apache kadar tutarlı nginx HTTP server kurulumunu anlatacağım. nginx aynı zamanda bir reverse proxy (ters proksi) ve mail sunucusu ayrıca MacOS, Linux, FreeBSD, Windows ve Solaris işletim sistemlerinde çalışabilmekte. Nginx dinamik web içeriğini FastCGI, SCGI, WSGI ya ad Phusion Passenger modülleri üzerinden sunacak şekilde konfigüre edilebilir ve yazılım yük dengelemesi olarak görev alabilir.

Nginx asenkron ve olaya dayalı programlama yaklaşımı sayesinde yüksek yük altında çok daha yüksek ve güvenilir performans vermektedir.

Aylık 30 dolar civarında lisanslı olarak satılan LiteSpeed ‘e alternatif olarak ücretsiz olan nginx’in kullanılabileceği kanaatindeyim. Kullanımı, yapılandırması da oldukça basit. Aşağıda özelliklerini görebilirsiniz.

Nginx22

Temel HTTP özellikleri

Statik ve index dosyalarının sunumu, otomatik indeksleme; açık dosya açıklayıcı önbellek;
Önbellek ile hızlandırılmış reverse proxying; basit yük dengeleme ve hata toleransı;
Uzak FastCgi sunucularının önbelleklenmesi ile hızlandırılmış destek; basit yük dengeleme ve hata toleransı;
Modüler yapı. Gzip, byte aralıkları, yığın cevaplar (chunked responses), XSLT, SSI, imaj boyutlandırma gibi filtreler. FastCGI veya proksilenmiş sunucular ile tek bir sayfada çoklu SSI içermelerinin paralel işlenmesi.
SSL ve TLS SNI desteği.
Diğer HTTP özellikleri

Ad ve IP tabanlı sanal sunucular;
Keep-alive ve pipelined bağlantı desteği;
Esnek yapılandırma;
İstemci işlemlerinde kopma olmadan yeniden yapılandırma ve online güncelleme;
Erişim kayıt (log) formatları, tamponlanmış kayıt yazımı ve hızlı kayıt devri;
3xx-5xx hata kod yönlendirmeleri;
rewrite modülü;
İstemcinin IP adresine dayalı erişim kontrolü ve HTTP temel kimlik denetleme;
PUT, DELETE, MKCOL, COPY ve MOVE methodları;
FLV streaming;
Hız sınırlandırma;
Bir adresten gelen eşzamanlı bağlantı ve talepleri sınırlandırma.
Gömülü perl.

Mail proxy sunucu özellikleri

Harici bir HTTP kimlik denetleme sunucusunu kullanarak, kullanıcıyı IMAP/POP3 backend’ine yönlendirme;
Harici bir HTTP kimlik denetleme sunucusunu kullanarak, kullanıcıyı SMTP backend’ine yönlendirme ve kullanıcı kimlik denetlemesi;
Kimlik denetleme methodları:
POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
SSL desteği;
STARTTLS ve STLS desteği.

gts1s

Yapı ve ölçeklenebilirlik

Bir ana işlem (main process) ve çok sayıda işçi işlemleri (workers). İşçiler, imtiyazsız kullanıcı olarak yürütülürler;
Uyarı methodları: kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), event ports (Solaris 10), select ve poll;
Çeşitli kqueue özellikleri desteği: EV_CLEAR, EV_DISABLE (event’i geçici olarak etkisizleştirir), NOTE_LOWAT, EV_EOF, olanaklı data sayısı, hata kodları;
sendfile (FreeBSD 3.1+, Linux 2.2+, Mac OS X 10.5), sendfile64 (Linux 2.4.21+), ve sendfilev (Solaris 8 7/01+) desteği;
File AIO (FreeBSD 4.3+, Linux 2.6.22+);
Accept-filters (FreeBSD 4.1+) ve TCP_DEFER_ACCEPT (Linux 2.4+) desteği;
10,000 inaktif HTTP keep-alive bağlantısı yaklaşık 2.5M hafıza kullanır;
Data kopyalama operasyonları minimum düzeydedir.

Test edilen işletim sistemleri ve platformlar
FreeBSD 3 — 8 / i386; FreeBSD 5 — 8 / amd64;
Linux 2.2 — 2.6 / i386; Linux 2.6 / amd64;
Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;
MacOS X / ppc, i386;
Windows XP, Windows Server 2003.

PHP-FPM Yapılandırması

İşe önce php-fpm yapılandırmasından başlayalım. Bunun için /etc/php-fpm.d/www.conf dosyasını açalım.

nano /etc/php-fpm.d/www.conf

listen = 127.0.0.1:9000

olan satırı

listen = /tmp/php5-fpm.sock

olarak değiştirelim.  Bunu yapmamızdaki amaç php-fpm unix socket kullandıpı için TCP overhead olayından kurtulmamızı sağlar.

Neyse daha pek çok parametre ile yapılandırma dosyanıza çeki düzen verebilirsiniz.

Ardından /etc/php.ini dosyasını açalım ve cgi.fix_pathinfo değerini 0 olarak değiştirelim.

Şimdi sırası ile aşağıdaki komutları uygulayarak php-fpm servisinin çalışmasını ve açılışlarda da otomatik çalışmasını sağlıyoruz.

service php-fpm start
chkconfig --levels 235 php-fpm on

NGINX Yapılandırması

Şimdi gelelim nginx yapılandırmasına

Nginx ayar dosyası  /etc/nginx/nginx.conf  ‘u açıp aşağıdaki içindeki satırları aşağıdakilerle değiştirelim.

user  nginx;
worker_processes  2;
#warn
error_log  /var/log/nginx/error.log debug;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    client_max_body_size 13m;
    keepalive_timeout  65;
    index index.php index.html index.htm;
    gzip on;
    gzip_types text/css application/x-javascript text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
    #Upstream to backend - PHP
    upstream php {
    server unix:/tmp/php-fpm.sock;
       # server 127.0.0.1:9000;
    }
    include /etc/nginx/conf.d/*.conf;
}

 

Şimdi sıra geldi nginx fast-cgi ayarına. Bunun için /etc/nginx/fastcgi_params dosyasını açıp. İçindeki satırları sildikten sonra, aşağıdaki satırları yapıştırın.

?
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param  PATH_INFO $fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Ardından aşağıdaki komutlarla nginx’i başlatalım ve açılışlarda otomatik olarak açılmasını sağlayalım.

service nginx start
chkconfig --levels 235 nginx on

WordPress Yapılandırması

Şimdi sıra geldi wordpress sitemize göre nginx’e ayar vermeye. Daha önce apache yada litespeed kullananlar vhosts kavramını ve .htaccess dosyasını unutun. Bunları nginx’te server block’lar arasında tanımlamamız gerekli.

Öncelikle birden çok wordpress sitesinde kullanabileceğinizi varsayarak wordpress için ortak ayar dosyaları oluşturalım.

nginx conf.d dosyası altına global isminde bir dizin oluşturup wordpress.conf adında bir dosya oluşturun ve aşağıdaki satırları kaydedip çıkın.

nano /etc/nginx/conf.d/global/wordpress.conf

# WordPress multisite rules!
# Designed to be included in any server {} block.
# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
location / {
    try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Directives to send expires headers and turn off 404 error logging.
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 24h;
    log_not_found off;
}
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ \.php$ {
    # Zero-day exploit defense.
    # http://forum.nginx.org/read.php?2,88845,page=3
    # Won't work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi.
    # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine.  And then cross your fingers that you won't get hacked.
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
   include fastcgi_params;
   fastcgi_index  index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_pass php;
}
rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
if (!-e $request_filename) {
rewrite  ^(.+)$  /index.php?q=$1  last;
}

Şimdi de yine global dizini altında isteğe bağlı olarak kullanabileceğimiz bir kısıtlama dosyası oluşturacağız.

nano /etc/nginx/conf.d/global/restrictions.conf ile global dizini altında restrictions.conf dosyası oluşturup aşağıdaki satırları kaydedin.

# Global restrictions configuration file.
# Designed to be included in any server {} block.</p>
location = /favicon.ico {
    log_not_found off;
    access_log off;
}
location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

Şimdi sıra geldi son adım olan bitirici hamleyi yapmaya  WordPress sitemizin yapılandırma dosyasını oluşturalım.

/etc/nginx/conf.d dizini altına uzantısı conf olacak şekilde bir dosya oluşturun. Genelde siteadi.conf tarzı bir yaklaşım kullanılır.

nano /etc/nginx/conf.d/wpnotlari.conf

artından aşağıdaki satırları ekleyip kaydedilim.

server {
#dinleyeceğiniz port. domain mapping için statik ip kullanıyorsanız onu yazmalısınız.
listen 192.168.1.1:80;
#sunucu adınız
server_name *.wpnotlari.com;
#sitenizin root klasörü buraya
root /www/wpnotlari;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
include conf.d/global/restrictions.conf;
include conf.d/global/wordpress.conf;
}

bu şekilde wordpress sitemizide yapılandırmış olduk.

Şimdi aşağıdaki komutlarla tüm servislere bir restart atalım, kendilerine gelsin

service nginx reload
service nginx restart
service php-fpm restart

Geçtiğimiz günlerde buna benzer bir yapılandırma ile lettoblog’u nginx’e geçirdik. Şu anda fena görünmüyor, ancak apc kurmak ve opcode cache yapmakta bir diğer önemli nokta. Zaten bu yazı yeterince uzun olduğundan nasip olursa  APC kurulumunu başka bir yazıda anlatmak istiyorum.

Bir kez daha tekrarlamakta fayda var; bu kurulum wordpress multisite subdomain şeklinde kullananlar için örnektir. Subdirectory yada single wordpress kullanıcıları baştaki adımları takip ettikten sonra wordpress ayarlarını kendi kurulumlarına göre düzeltmek zorundadır.

Eklemek istediğiniz bilgi varsa yorum olarak yazabilirsiniz. Elimden geldiğince soruları cevaplayama çalışıyorum ancak, lütfen sorunuzun cevabını internette aramadan bende bu çalışmadı şeklinde destek talebinde bulunmayın.

Nginx

Tavsiyeler;

  • Bu kurulumu yapabilmeniz için az çok konsol kullanmaya aşina olmanız gerekmektedir. Bu konuda hiç tecrübeniz yoksa herhangi bir ftp istemcisi ile (filezilla, winscp…) 22 portundan root girişi yaparak örnek verdiğimiz konfigurasyon dosyalarını kullanarak işlem yapabilirsiniz.
  • Versiyon olarak farklı bir işletim sistemi sürümü kullanıyorsanız, işletim sistemini güncelleyebilir yada kullandığınız repoları ona göre ayarlayabilirsiniz.
  • Private ip içinde çalışacaksanız 192.168.x.x  hosts dosyanızı ve network ayarının doğru yapıldığından emin olunuz.
  • Varsayılan olarak apache kurulu ve çalışıyorsa nginx ile port çakışmasına uğrayacağından “service httpd stop” komutu ile apache’yi durdurun.
  • Text editör olarak nano kullanmak istiyor ama hata ile karşılaşıyorsanız “yum install nano” komutu ile kurulumu gerçekleştirebilirsiniz. Vi kullananlar zaten bilirlerki nano da yapabileceklerini aynı şekilde vi ilede yapabilirsiniz.
  • 80 portunun açık olduğundan emin olunuz.Eğer kapalıysa iptables’ten açabilirsiniz.

Nginx Server SSL Kurulumu

  1. “SSL Sertifikanız” ile ” Ara Sertifikanızı” birleştirin.“SSL Sertifikanız” ile “Ara sertifikanızı” tek bir -pem- dosyasında birleştirmeniz gerekmektedir.Bu işlemi aşağıda yazan komutu  kullanarak gerçekleştirebilirsiniz.cat your_domain_name.crt ssl.crt >> bundle.crt
  2. Nginx Virtual Host Dosyanızı Düzenleyin.Şimdi,güvenli websiteniz için Nginx virtual host dosyanızı açın.Eğer, websitenizin güvenli bağlantı (https) ve güvenli olmayan bağlantı(http)üzerinden  erişilebiliir olması gerekiyorsa, her bir bağlantı türü için farklı bir sunucu modülüne ihtiyacınız vardır.Mevcut olan güvenli olmayan(http) sunucu modelini kopyalayıp, orjinal sunucu modülünün altına yapıştırın.Daha sonra, koyu renkle yazılan satırı ekleyin.
    server {
    
    listen   443;
    
    ssl    on;
    ssl_certificate    /etc/ssl/your_domain_name.crt; (or .pem)
    ssl_certificate_key    /etc/ssl/your_domain_name.key;
    
    server_name your.domain.com;
    access_log /var/log/nginx/nginx.vhost.access.log;
    error_log /var/log/nginx/nginx.vhost.error.log;
    location / {
    	root   /home/www/public_html/your.domain.com/public/;
    	index  index.html;
    }
    
    }

    ” SSL Sertifika” dosyası ile dosya adınızı eşleştirin:

    • ssl_certificate  önceki adımda yaptığınız “SSL Sertifikası” ve ” SSL Ara Kök Sertifikası” birleştirme işleminden oluşmalıdır.
    • ssl_certificate_key dosyası, CSR dosyanızı oluşturduğunuzda otomatik olarak oluşmuş olmalıdır.
  3. Sunucunuzu yeniden başlatın.Nginx sunucunuzu yeniden başlatmak için aşağıdaki komutu takip edin.sudo /etc/init.d/nginx restart

Daha detaylı bilgiye  web sitesi üzerinden ulaşabilrisiniz

.

1 Yorum

1 Yorum

  1. maillots de foot

    5 Eylül 2016 at 11:34

    Great, thanks for sharing this article.

Cevap bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Popüler

To Top
Creampie