Nginx Alan Adı Tanımlama

DigitalOcean üzerinde oluşturduğumuz Ubuntu sunucuda Nginx ve Grav kurulumlarını gerçekleştirdik.

AA

Bu yazıda ise, daha önce bahsettiğim Nginx yapısı ve .conf işlemlerini detaylandıracak ve sahip olduğumuz domain (alan adı) tanımlamalarını gerçekleştireceğiz.

Tanımlama işlemlerini hem tek kurulum (Grav, WordPress MU, vb.) üzerinden cevap verecek alan adı hem de çoklu site kullanımında her alan adı ile başka bir alt sitenin görüntülenmesi üzerine gerçekleştireceğiz.

DigitalOcean üzerinden gerçekleştirilen temel kurulum sürecinin ardından eğer aksi belirtilmemişse yayın /var/www/html/ yolu üzerinden gerçekleştirilecektir.

Tek Alan Adı İle Erişim

Dosyalarınızı doğrudan /var/www/html/ içeriğinden sunabileceğiniz gibi bir alt klasör daha oluşturabilirsiniz. Örneğin Nginx ve Grav kurulumu ile ilgili yazımda grav adında bir klasör oluşturmuş /var/www/html/grav/ ve site yayınını bu klasör üzerinden gerçekleştirmiştik. Benzer bir tercihte bulunabilirsiniz. Önemli olan /etc/nginx/sites-available/ ve /etc/nginx/sites-enabled/ yapılarını doğru bir şekilde gerçekleştirmek olduğu için yapılandırma işlemlerini baştan planlamak uygun olacaktır.

Temel Bilgiler

sites-available içeriğine göz attığımızda default ve digitalocean yapılandırmalarını göreceğiz. default her yapılandırma için ön tanımlandırmaların tutulduğu dosyamız. digitalocean ise default üzerinden oluşturulmuş ve kullanımda olan ayarları barındırmakta. digitalocean dosyasını silebilir ya da içeriğini ihtiyaçlarınıza uygun şekilde değiştirerek kullanabilirsiniz. Bu düzenlemeler için aşağıdaki yönergeleri takip edebilirsiniz.

# digitalocean dosyası ve linkini siliyorum
rm /etc/nginx/sites-available/digitalocean
rm /etc/nginx/sites-enabled/digitalocean

Alan adı tanımlama1 işleminde default altındaki server_name, klasör değişikliklerinde ise root /var/www/html değerinin değiştirilmesi gerekmektedir. Örnek olarak ornekwebsitesi.com için işlemlerimizi alt klasör (ornekwebsitesi, ornekwebsitesi.com ya da istediğimiz başka bir isim ile oluşturabiliriz) oluşturarak yapalım. İşlemleri root olarak da devam ettirebilirsiniz.

cd /var/www/html
mkdir /var/www/html/ornekwebsitesi.com
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}

Domain Tanımlama

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/ornekwebsitesi.com
nano /etc/nginx/sites-available/ornekwebsitesi.com
server {
   listen 80;
   root /var/www/html/ornekwebsitesi.com;
   index index.php index.html index.htm;

   server_name ornekwebsitesi.com;
   access_log /var/log/nginx/ornekwebsitesi.com.access.log;
   error_log /var/log/nginx/ornekwebsitesi.com.error.log;

   location / {
      try_files $uri $uri/ =404;
   }

   location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
   }

   location ~ /\.ht {
      deny all;
   }
}
ln -s /etc/nginx/sites-available/ornekwebsitesi.com /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx

Kullanıcı Üzerinden Domain Tanımlama

Peki işlemleri oluşturduğunuz bir kullanıcı üzerinden devam ettirmek isterseniz?

adduser newuser
su - newuser
mkdir www;cd www;mkdir html;cd html;mkdir ornekwebsitesi.com # /home/newuser/www/html/ornekwebsitesi.com
exit

Oluşturacağım kullanıcı adının newuser olmasını istiyorum. Evet, şifre tanımlama işlemlerimin ardından newuser adlı kullanıcı hesabımı oluşturmuş olacağım. exit ile tekrar root olarak devam edeceğiz.

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/ornekwebsitesi.com
nano /etc/nginx/sites-available/ornekwebsitesi.com
server {
   listen 80;
   root /home/newuser/www/html/ornekwebsitesi.com;
   index index.php index.html index.htm;

   server_name ornekwebsitesi.com;
   access_log /var/log/nginx/ornekwebsitesi.com.access.log;
   error_log /var/log/nginx/ornekwebsitesi.com.error.log;

   location / {
      try_files $uri $uri/ =404;
   }

   location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
   }

   location ~ /\.ht {
      deny all;
   }
}
ln -s /etc/nginx/sites-available/ornekwebsitesi.com /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx

Çoklu Domain İle Erişim

WPMU üzerinden bu konuyu açıklayacağım2. Grav yazısında bahsettiğim subdirectory ve subdomain ile ilişkili olarak şöyle bir senaryo oluşturalım.

  • Site 1: ornekwebsitesi.com (ana alan adımız), WordPress ve Grav kurulumlarımız bu domain ile ilişkili olan klasör içerisinde barınıyor.
  • Site 2: site2.net, Subdomain: site2.ornekwebsitesi.com, Subdirectory: ornekwebsitesi.com/site2
  • Site 3: site3.org, Subdomain: site3.ornekwebsitesi.com, Subdirectory: ornekwebsitesi.com/site3

Elbette site sayısı ihtiyaçlarınıza göre artabilir. DNS yapılandırmalarınızı (A record) gerçekleştirdiğinizi varsayıyorum.

DNS add wildcard a record

Yukarıdaki düzenlemelerin ardından WordPress örneğindeki çoklu kullanım aktivasyonunu da yapmanız gerekmekte3. Define tanımlama sürecinde DOMAIN_CURRENT_SITE değerini ornekwebsitesi.com olarak düzenlemeyi unutmamalısınız4.

define('DOMAIN_CURRENT_SITE', 'ornekwebsitesi.com');

Bu işlemler ardından ise domain yönetimi için kullanacağınız nginx düzenlemesi şu şekilde olacaktır5.

server {
   listen [::]:80;
   root /var/www/html/wordpress;
   index index.php index.html index.htm;

   server_name ornekwebsitesi.com *.alandi.com site2.net site3.org;
   access_log /var/log/nginx/ornekwebsitesi.com.access.log;
   error_log /var/log/nginx/ornekwebsitesi.com.error.log;

   location / {
      try_files $uri $uri/ /index.php?$args;
      # try_files $uri $uri/ =404;
   }

   location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
   }

   location ~ /\.ht {
      deny all;
   }
}

Temel işlemleri bu şekilde özetleyebiliriz. Süreç içerisinde karşılaştığınız problemler ya da ek ihtiyaçlar olursa yorum olarak iletebilirsiniz.