Nginx Nedir?

Nginx aslen Rambler isimli yoğun trafiği olan rus sitesinde kullanılmak üzere Rus yazılım mühendisi Igor Sysoev tarafından geliştirilen hafif, stabil, hızlı websunucudur.

Nginx kurulumu ve konfigurasyonunu daha farklı bir yazıda anlatmayı düşünüyorum. Bu yazıdaki amacım Nginx i bir kez olsun kurup + php yi çalıştırıp apache nin .htaccess dosyasını çalıştıramamış kişilere bir örnekle olayı anlatmam.

Apache bildiğiniz üzere dokuman root dizinindeki .htaccess dosyasındaki yönergeleri okuyarak işlem yapabilmektedir. fakat diğer web sunucularda (lighttpd, nginx, zeus vb..) şimdilik böyle bir standart düşünülmemektedir.
dolayısı ile nginx in rewrite modulunu ancak config dosyasının içerisinde tanımlamamız gerekmektedir.

Aşağıda örnek bir Nginx.conf dosyası vardır.
worker_processes  1;
events { worker_connections  1024;}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  domain.com domain.com;

        location / {
        root   html;
        index  index.html index.htm index.php;
        }
        
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }}
    
}
burada 2 adet locasyonumuz tanımlıdır. Bunlardan birisi "location ~ \.php$" dir ki bu lokasyon php kurduğumuzda eklemiz geren .php uzantıları çalıştıracak parametrenin bulunduğu kısımdır. diğeri ise "location /" dir yani apachenin "htdocs" u yada "publick_html" sidir.
.htaccess ayarlarımız işde tam bu "location /" de yapıcaz
örnek .htaccess dosyam :
ReWriteRule ^index.html$ index.php [L,NC]
ReWriteRule ^tum-videolar.html$ tumvideolar.php [L,NC]
ReWriteRule ^en-cok-izlenen-videolar.html$ encokizlenen.php [L,NC]
ReWriteRule ^en-cok-izlenen-videolar-sayfa(.*).html$ encokizlenen.php?sayfa=$1 [L,NC]
ReWriteRule ^tum-videolar-sayfa(.*).html$ tumvideolar.php?sayfa=$1 [L,NC]
ReWriteRule ^aranilanlar-sayfa(.*).html$ etiketler.php?sayfa=$1 [L,NC]
RewriteRule ^(.*)-ara-sayfa(.*).html$ arananlar.php?aranan=$1&sayfa=$2
RewriteRule ^(.*)-Sayfa(.*).html$ kategoriler.php?katseolink=$1&sayfa=$2 [L,NC]
ReWriteRule ^iletisim.html$ iletisim.php [L,NC]
ReWriteRule ^arama.html$ arananlar.php [L,NC]
ReWriteRule ^arananlar.html$ etiketler.php [L,NC]
ReWriteRule ^puanver.html$ puanver.php [L,NC]
RewriteRule ^(.*)-izle.html$ videoizle.php?basliktr=$1 [L]
RewriteRule ^(.*)-ara.html$ arananlar.php?etiketaranan=$1 [L,QSA]
RewriteRule ^(.*).html$ kategoriler.php?katseolink=$1 [L]
Nginx de rewrite yazmaya başlarken if koşulunu yazmak mecburiyetindeyiz.
yukarıdaki gördüğünüz .htaccess dosyasından çok farklı ruleset iniz yoksa sizinde yazıcağınız ifade if (!-f $request_filename) olucaktır.
Yani istek gönderilen dosya yoksa sizin belirleyeceğinize rewrite yapsın.

yani kısaca yukarıdaki kodum şu şekilde değişecek :

if (!-f $request_filename) {
                rewrite /index.html  /index.php last;
                rewrite /tum-videolar.html  /tumvideolar.php last;
                rewrite /en-cok-izlenen-videolar.html  /encokizlenen.php last;
                rewrite /en-cok-izlenen-videolar-sayfa(.*).html  /encokizlenen.php?sayfa=$1 last;
                rewrite /tum-videolar-sayfa(.*).html  /tumvideolar.php?sayfa=$1 last;
                rewrite /aranilanlar-sayfa(.*).html  /etiketler.php?sayfa=$1 last;
                rewrite /(.*)-ara-sayfa(.*).html  /arananlar.php?aranan=$1&sayfa=$2 last;
                rewrite /(.*)-Sayfa(.*).html  /kategoriler.php?katseolink=$1&sayfa=$2 last;
                rewrite /iletisim.html  /iletisim.php last;
                rewrite /arananlar.html  /etiketler.php last;
                rewrite /puanver.html  /puanver.php last;
                rewrite /(.*)-izle.html  /videoizle.php?basliktr=$1 last;
                rewrite /(.*)-ara.html  /arananlar.php?etiketaranan=$1 last;
                rewrite /(.*).html  /kategoriler.php?katseolink=$1 last;
                }
görüldüğü gibi arasında çokda fark yok.
bu oluşturduğunu ruleleri "location /" e ekleyip ngin i restart yaptıkdan sonra artık elveda apache diyebilirsiniz.
worker_processes  1;
events { worker_connections  1024;}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  www.domain.com domain.com;
        access_log  logs/host.access.log  main;
        location / {
        root   html;
        index  index.html index.htm index.php;
        if (!-f $request_filename) {
                rewrite /index.html  /index.php last;
                rewrite /tum-videolar.html  /tumvideolar.php last;
                rewrite /en-cok-izlenen-videolar.html  /encokizlenen.php last;
                rewrite /en-cok-izlenen-videolar-sayfa(.*).html  /encokizlenen.php?sayfa=$1 last;
                rewrite /tum-videolar-sayfa(.*).html  /tumvideolar.php?sayfa=$1 last;
                rewrite /aranilanlar-sayfa(.*).html  /etiketler.php?sayfa=$1 last;
                rewrite /(.*)-ara-sayfa(.*).html  /arananlar.php?aranan=$1&sayfa=$2 last;
                rewrite /(.*)-Sayfa(.*).html  /kategoriler.php?katseolink=$1&sayfa=$2 last;
                rewrite /iletisim.html  /iletisim.php last;
                rewrite /arananlar.html  /etiketler.php last;
                rewrite /puanver.html  /puanver.php last;
                rewrite /(.*)-izle.html  /videoizle.php?basliktr=$1 last;
                rewrite /(.*)-ara.html  /arananlar.php?etiketaranan=$1 last;
                rewrite /(.*).html  /kategoriler.php?katseolink=$1 last;
                }
        }
        
    location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }}
    
}
bu konuyla alakalı sorularınızı / sorunlarınızı yazarsanız cevaplamaya çalışırım.