Nginx logo

Giriş

Nginx, dünyanın en popüler web sunucularından biridir ve internetteki en büyük ve en yüksek trafiğe sahip sitelerden bazılarının barındırılmasından sorumludur. Bir web sunucusu veya ters proxy olarak kullanılabilen hafif sunucunuzu yormayacak bir seçimdir.

Bu blog yazımızda, Ubuntu 20.04 sunucunuza Nginx’i nasıl kuracağınızı, güvenlik duvarını nasıl ayarlayacağınızı, Nginx sürecini nasıl yöneteceğinizi ve tek bir sunucudan birden fazla etki alanı barındırmak için sunucu bloklarını nasıl kuracağınızı göstermeye çalışacağız.

Ön Gereksinimler

Bu kılavuza başlamadan önce, sunucunuzda yapılandırılmış sudo ayrıcalıklarına sahip normal, root olmayan bir kullanıcınız olmalıdır. Ubuntu 20.04 sunucu kurulduktan sonra ilk yapılması gerekenler yazımıza bakarak normal bir kullanıcı hesabını nasıl yapılandıracağınızı öğrenebilirsiniz.

Kullanılabilir bir hesabınız olduğunda, başlamak için root olmayan kullanıcınız ile oturum açın.

1.Adım – Nginx Kurulumu

Nginx, Ubuntu’nun varsayılan depolarında mevcut olduğundan, apt paketleme sistemini kullanarak bu depolardan kurulum yapmak mümkün.

Bu oturumda apt paketleme sistemiyle ilk etkileşimimiz olduğundan, en son paket listelerine erişebilmemiz için yerel paket dizinimizi güncelleyeceğiz. Daha sonra Nginx’i kurabiliriz:

sudo apt update
sudo apt install nginx

Prosedürü kabul ettikten sonra apt, Nginx’i ve gerekli tüm bağımlılıkları sunucunuza yükleyecektir.

2.Adım – Güvenlik Duvarı Ayarları

Nginx’i test etmeden önce, güvenlik duvarı yazılımının hizmete erişime izin verecek şekilde ayarlanması gerekir. Nginx, kurulum sırasında kendisini ufw ile bir hizmet olarak kaydeder ve bu da Nginx erişimine izin vermeyi kolaylaştırır.

ufw’nin nasıl çalışacağını bildiği uygulama yapılandırmalarını aşağıdakileri yazarak listeleyin:

sudo ufw app list

Uygulama profillerinin bir listesini görmeniz gerekiyor:

OutputAvailable applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Çıktının gösterdiği gibi, Nginx için kullanılabilen üç profil vardır:

  • Nginx Full: Bu profil, hem 80 numaralı bağlantı noktasını (normal, şifrelenmemiş web trafiği) hem de 443 numaralı bağlantı noktasını (TLS/SSL şifreli trafik) açar
  • Nginx HTTP: Bu profil yalnızca 80 numaralı bağlantı noktasını açar (normal, şifrelenmemiş web trafiği)
  • Nginx HTTPS: Bu profil yalnızca 443 numaralı bağlantı noktasını açar (TLS/SSL şifreli trafik)

Yapılandırdığınız trafiğe izin verecek en kısıtlayıcı profili etkinleştirmeniz önerilir. Şu anda yalnızca 80 numaralı bağlantı noktasında trafiğe izin vermemiz gerekecek.

Bunu yazarak etkinleştirebilirsiniz:

sudo ufw allow 'Nginx HTTP'

Değişikliği aşağıdaki komut ile doğrulayabilirsiniz:

sudo ufw status

Çıktı, hangi HTTP trafiğine izin verildiğini gösterecektir:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

3.Adım – Web Sunucusunu Kontrol Etme

Kurulum işleminin sonunda Ubuntu 20.04, Nginx’i başlatır. Web sunucusu zaten çalışır durumda olmalıdır.

Hizmetin çalıştığından emin olmak için systemd sistemiyle şunu yazarak kontrol edebiliriz:

systemctl status nginx
Output● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
     Docs: man:nginx(8)
 Main PID: 2369 (nginx)
    Tasks: 2 (limit: 1153)
   Memory: 3.5M
   CGroup: /system.slice/nginx.service
           ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─2380 nginx: worker process

Bu çıktı tarafından onaylandığı gibi, hizmet başarıyla başlatıldı. Ancak bunu test etmenin en iyi yolu aslında Nginx’ten bir sayfa istemektir.

Sunucunuzun IP adresine giderek yazılımın düzgün çalıştığını doğrulamak için varsayılan Nginx açılış sayfasına erişebilirsiniz. Sunucunuzun IP adresini bilmiyorsanız, icanhazip.com aracını kullanarak, sunucu IP adresini bulabilirsiniz:

curl -4 icanhazip.com

Sunucunuzun IP adresine sahip olduğunuzda, bunu tarayıcınızın adres çubuğuna girin:

http://sunucu_ip_adresiniz

Varsayılan Nginx açılış sayfasını almalısınız:

Bu sayfadaysanız, sunucunuz düzgün çalışıyor ve yönetilmeye hazır.

4.Adım – Nginx Sürecini Yönetme

Artık web sunucunuz hazır ve çalışır durumda olduğuna göre, bazı temel yönetim komutlarını gözden geçirelim.

Web sunucunuzu durdurmak için şunu yazın:

sudo systemctl stop nginx

Web sunucusunu durdurulduğunda başlatmak için şunu yazın:

sudo systemctl start nginx

Hizmeti durdurmak ve ardından yeniden başlatmak için şunu yazın:

sudo systemctl restart nginx

Yalnızca yapılandırma değişiklikleri yapıyorsanız, Nginx genellikle bağlantıları kesmeden yeniden başlatılabilir. Bunu yapmak için şunu yazın:

sudo systemctl reload nginx

Varsayılan olarak, Nginx, sunucu başlatıldığında otomatik olarak başlayacak şekilde yapılandırılmıştır. İstediğiniz bu değilse, şunu yazarak bu davranışı devre dışı bırakabilirsiniz:

sudo systemctl disable nginx

Hizmetin başlangıçta başlamasını yeniden etkinleştirmek için şunu yazabilirsiniz:

sudo systemctl enable nginx

Artık temel yönetim komutlarını öğrendiniz ve sunucunuzu birden fazla alan adını barındıracak şekilde yapılandırmaya hazırsınız.

5.Adım – Sunucu Bloklarını Ayarlama (Önerilen)

Nginx web sunucusunu kullanırken, yapılandırma ayrıntılarını kapsüllemek ve tek bir sunucudan birden fazla etki alanını barındırmak için sunucu blokları (Apache’deki sanal ana bilgisayarlara benzer) kullanılabilir. alan_adınız adında bir alan oluşturacağız, ancak bunu kendi alan adınızla değiştirmelisiniz.

Ubuntu 20.04’teki Nginx, /var/www/html dizinindeki belgeleri sunmak üzere yapılandırılmış, varsayılan olarak etkinleştirilmiş bir sunucu bloğuna sahiptir. Bu, tek bir site için iyi olsa da, birden fazla site barındırmayı düşünüyorsanız, sizin için uygun olmayabilir. /var/www/html’yi değiştirmek yerine, /var/www içinde alan adınız için bir dizin yapısı oluşturalım ve /var/www/html’yi, bir istemci isteği herhangi biriyle eşleşmezse sunulacak varsayılan dizin olarak yerinde bırakalım.

Gerekli üst dizinleri oluşturmak için -p bayrağını kullanarak alan adınız için dizini aşağıdaki gibi oluşturun:

sudo mkdir -p /var/www/alan_adınız/html

Ardından, $USER ortam değişkeniyle dizinin sahipliğini atayın:

sudo chown -R $USER:$USER /var/www/alan_adınız/html

Varsayılan dosya izinlerini ayarlayan umask değerinizi değiştirmediyseniz, web roots izinleri doğru olmalıdır. İzinlerinizin doğru olduğundan emin olmak ve sahibin, gruplara ve diğerlerine yalnızca okuma ve yürütme izinleri verirken dosyaları okumasına, yazmasına ve yürütmesine izin vermek için aşağıdaki komutu girebilirsiniz:

sudo chmod -R 755 /var/www/alan_adınız

Ardından, nano veya favori düzenleyicinizi kullanarak örnek bir index.html sayfası oluşturun:

nano /var/www/alan_adınız/html/index.html

Oluşturduğunuz dosyaya aşağıdaki örnek içeriği ekleyebilirsiniz HTML:/var/www/alan_adınız/html/index.html

<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success!  The alan_adiniz server block is working!</h1>
    </body>
</html>

İşiniz bittiğinde CTRL ve X, ardından Y ve ENTER ile dosyayı kaydedin ve kapatın.

Nginx’in bu içeriği sunabilmesi için doğru yönergelere sahip bir sunucu bloğu oluşturmak gerekiyor. Varsayılan konfigürasyon dosyasını direkt olarak değiştirmek yerine /etc/nginx/sites-available/alan_adınız dosyası ile yeni bir tane yapalım:

sudo nano /etc/nginx/sites-available/alan_adınız

Varsayılana benzer ancak yeni dizin ve alan adımız için güncellenen aşağıdaki yapılandırmayı oluşturduğunuz dosyaya yapıştırın:/etc/nginx/sites-available/alan_adınız

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

        root /var/www/alan_adınız/html;
        index index.html index.htm index.nginx-debian.html;

        server_name alan_adınız www.alan_adınız;

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

root yapılandırmasını yeni dizinimize ve kendi alan adımıza güncellediğimize dikkat edin.

Ardından, Nginx’in başlatma sırasında okuduğu sitelerin etkin olduğu dizine bir bağlantı oluşturarak dosyayı etkinleştirelim:

sudo ln -s /etc/nginx/sites-available/alan_adınız /etc/nginx/sites-enabled/

Artık iki sunucu bloğu etkinleştirildi ve alan_adınız yönergelerine göre isteklere yanıt verecek şekilde yapılandırıldı:

  • server_name:  alan_adınız ve www.alan_adınız şeklinde gelen isteklere yanıt verecek.
  • default: 80 numaralı bağlantı noktasındaki diğer iki blokla eşleşmeyen tüm isteklere yanıt verir.

Ek sunucu adlarının eklenmesinden kaynaklanabilecek olası bir hash bucket memory sorununu önlemek için /etc/nginx/nginx.conf dosyasında tek bir değeri ayarlamak gerekir. Dosyayı aç:

sudo nano /etc/nginx/nginx.conf

server_names_hash_bucket_size yönergesini /etc/nginx/nginx.conf dosyası içinde bulun ve satırın yorumunu kaldırmak için # sembolünü kaldırın. Nano kullanıyorsanız, CTRL ve W tuşlarına basarak aradığınız kelimeyi hızlıca bulabilirsiniz.

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

işlemi tamamladıktan sonra kayıt edip kapatabilirsiniz. Nano kullanıyorsanız CTRL+X sonra Y ve Enter yapabilirsiniz.

Ardından, Nginx dosyalarınızın hiçbirinde sözdizimi hatası olmadığından emin olmak için test edin:

sudo nginx -t

Herhangi bir sorun yoksa, değişikliklerinizi etkinleştirmek için Nginx’i yeniden başlatın:

sudo systemctl restart nginx

Nginx şimdi alan adınızı yayınlıyor olmalıdır. Bunu http://alan_adınız adresine giderek test edebilirsiniz, burada şöyle bir şey görmeniz gerekir:

Success! The alan_adiniz.com server block is working!

6.Adım – Önemli Nginx Dosyalarını ve Dizinlerini Tanımak

Artık Nginx hizmetinin kendisini nasıl yöneteceğinizi bildiğinize göre, birkaç önemli dizini ve dosyayı tanımak için birkaç dakikanızı ayırmanız ileride yaşayabileceğiniz sorunları daha hızlı çözmeniz için faydalı olacaktır.

İçerik

  • /var/www/html: Varsayılan olarak buradaki içerik sunulur. Bu varsayılan klasörü değiştirmek için Nginx yapılandırma dosyalarında değişiklik yapabilirsiniz.

Sunucu Konfigürasyonu

  • /etc/nginx: Nginx ile ilgili tüm konfigürasyon dosyalarının olduğu klasör.
  • /etc/nginx/nginx.conf: Ana Nginx yapılandırma dosyası. Bu, Nginx genel yapılandırmasında değişiklik yapmak için değiştirilebilir.
  • /etc/nginx/sites-available/: Her farklı site için sunucu bloklarının depolandığı dizin. Nginx, sitelerin etkin olduğu dizine bağlanmadıkça bu dizinde bulunan yapılandırma dosyalarını kullanmaz. Tipik olarak, tüm sunucu bloğu yapılandırması bu dizinde yapılır ve ardından diğer dizine bağlanarak etkinleştirilir.
  • /etc/nginx/sites-enabled/: Site başına etkinleştirilmiş sunucu bloklarının depolandığı dizin. Genellikle bunlar, sitelerde kullanılabilir dizinde bulunan yapılandırma dosyalarına bağlanarak oluşturulur.
  • /etc/nginx/snippets: Bu dizin, Nginx yapılandırmasında başka bir yere eklenebilecek yapılandırma parçalarını içerir. Potansiyel olarak tekrarlanabilir yapılandırma segmentlerini burada tanımlayarak farklı konfigürasyon dosyalarına ekleyebilirsiniz.

Sunucu Günlükleri (Logs)

  • /var/log/nginx/access.log: Nginx’e gelen tüm istekler aksi şekilde yapılandırılmadığı müddetçe burada depolanır.
  • /var/log/nginx/error.log: Hatalar ise bu dosyada depolanır.