/ solution

Ubuntu Server - Nginx Kurulumu

Bir önceki yazımda (FTP Kurulumu) üzerinde ubuntu yüklü olan sunucumuzda ftp için gerekli ayarlarımızı yapmıştık. Bu yazımda ise "/var/www/demiremrece" dosya yolunda olan sitemizi en yaygın web sunucularından biri olan nginx ile host edeceğiz.

Bir terminal açıp,
$ ssh kullanıcı_adınız@SERVER_IP_ADRESINIZ
ile sunucumuza bağlandıktan sonra öncelikle nginx kurulumunu yapalım.

$ sudo apt-get update
$ sudo apt-get install nginx

Gerekli prosedürü kabul ettiken sonra nginx için lazım olan tüm paketler kurulacakır.

Güvenlik İzni

Nginx yapılandırmasından önce, servisin çalışabilmesi için güvenlik duvarında (firewall) izin verilmiş olması gerekmektedir.

$ sudo ufw allow app list
ile nginx profillerini görebiliriz.

-- Çıktı --
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
  • Nginx HTTP: Bu profil için 80 portu açılıyor. Dolayısıyla normal ve şifrelenmemiş http protokolüne izin vermiş oluyoruz.
  • Nginx HTTPS: Bu profil için 443 portu açılıyor ve SSL/TSL protokollerine izin vermiş oluyoruz.
  • Nginx Full: Bu profile izin verirsek ise hem http hem de https protokolleriyle sunucumuz çalışabilmektedir.

Ben herhangi bir SSL ayarı yapılandırması yapmayacağımdan dolayı sadece http trafiğine izin vermem yeterli. Şu an kendi blogumda da durum bu yönde.

$ sudo ufw allow 'Nginx HTTP'

$ sudo ufw status

-- Çıktı --
20/tcp                     ALLOW       Anywhere                  
21/tcp                     ALLOW       Anywhere                  
990/tcp                    ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
22                         ALLOW       Anywhere                  
20/tcp (v6)                ALLOW       Anywhere (v6)             
21/tcp (v6)                ALLOW       Anywhere (v6)             
990/tcp (v6)               ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
22 (v6)                    ALLOW       Anywhere (v6) 

Görüldüğü üzere 80 portu nginx kullanımı için listeye eklenmiş.

Nginx Status

Başarılı bir kurulum yaptıysak, nginx servisinin otomatik olarak başlatılmış olması gerekiyor. Kontrol etmek için;

$ sudo systemctl nginx status

--Çıktı--

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
   Active: active (running) since Tue 2018-05-08 14:45:41 UTC; 3 weeks 0 days ag
 Main PID: 1466 (nginx)
    Tasks: 2
   Memory: 3.6M
      CPU: 15.331s
   CGroup: /system.slice/nginx.service
           ├─1466 nginx: master process /usr/sbin/nginx -g daemon on; master_pro
           └─1490 nginx: worker process  

Görüldüğü üzere nginx arkaplanda size hizmet etmek için çalışıyor. Bunu nginx kurulumunun oluşturduğu varsayılan nginx sayfasına giderek de anlayabiliriz. Eğer ip adresinizi bilmiyorsanız curl kullanarak öğrenebilirsiniz.

$ curl ipecho.net/plain; echo

-- Çıktı --
SERVER_IP_ADRESINIZ

Tarayıcınızı açıp adrese (http://SERVER_IP_ADRESINIZ) gittiğinizde, aşağıdaki sayfayı görüyor olmanız gerekiyor. Aksi durumda yukarıdaki işlemlerde bir hata yapmışsınız ya da nginx çalışmıyordur.

nginx-default-page

Server Blokları

Eğer daha önce nginx yerine apache ile çalıştıysanız "Virtual Host" terimine aşinasızdır demektir. Kısacası bize farklı domainlere aynı sunucuda hizmet verebilmemizi sağlar. Apache'deki virtual hostun karşılığı nginx'de "Server Block" tur.

İlk önce FTP ile ilgizi yazımdaki gibi sitemizin dosyalarını barındırmak için bir dizin oluşturalım.

$ sudo mkdir /var/www/demiremrece

Bu klasörün içindekilerin okunabilir ve çalıştırılabilir olması için izin vermeliyiz.

$ sudo chmod -R 755 /var/www/demiremrece

İçine de örnek bir index.html dosyası atalım.

<html>
    <head>
        <title>demiremrece.com</title>
    </head>
    <body>
        <h1>Harika! Sayfamız çalışıyor.</h1>
    </body>
</html>

Artık bu siteyi server blokları kullanarak yayınlayabiliriz.

$ cd /etc/nginx/sites-available/

Default ayarları kopyalayıp örnek sitemiz için bir .conf dosyası oluşturuyoruz.
$ sudo cp /etc/nginx/sites-availabe/default.conf /etc/nginx/sites-availabe/demiremrece.com.conf

Şimdi bu dosyayı açıp ayarlarımızı yapalım.
$ sudo nano /etc/nginx/sites-available/demiremrece.com.conf

Dosya içeriğini aşağıdakiyle değiştirelim:

server {
    listen 80;
    listen [::]:80;

    server_name demiremrece.com;
    root /var/www/demiremrece/;

    index index.html;

    server_name demiremrece.com;

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

Daha sonrasında nginx'in yeniden başladığında okuyacağı /sites-enabled klasörüne .conf dosyamızı linkleyelim.
$ sudo ln -s /etc/nginx/sites-available/demiremrece.com.conf /etc/nginx/sites-enabled/

Bu değişiklikle birlikte sunucumuz demiremrece.com harici gelen isteklere default.conf kullanarak cevap verecek, eğer sitemize erişim isteniyorsa ise demiremrece.conf ayarlarına göre yönlendirme yapılacaktır. Aynı şekilde başka server blokları da tanımlayarak birden fazla domaine hizmet verebilirsiniz.

Değişikliklere göre nginx'i yeniden başlatmak için:
$ sudo systemctl restart nginx

DNS ayarları yapılandırıldıysa oluşturduğunuz domaine herhangi bir tarayıcıdan ya da eğer yerel ortamda çalışıyorsanız sunucudaki tarayıcınızdan örnek sayfamıza erişebileceğinizi göreceksiniz.