giriiş
Nginx, internetteki en büyük ve en çok ziyaret edilen sitelerin bazılarını barındıran, dünyanın en popüler web sunucularından biridir. Web sunucusu veya ters proxy olarak kullanılabilen hafif bir seçenektir.
Bu rehberde Ubuntu 20.04 sunucusuna Nginx kurulumu, güvenlik duvarı kurulumu, Nginx sürecinin yönetimi ve tek bir sunucudan birden fazla domain barındırmak için sunucu bloklarının kurulumu gibi konuları ele alacağız.
Ön koşullar
- Bu kılavuza başlamadan önce sunucunuzda sudo ayrıcalıklarına sahip normal, kök olmayan bir kullanıcınızın yapılandırılmış olması gerekir.
- Bir Ubuntu sunucusu satın almak için Tıklamak Yap bunu.
Adım 1 – Nginx'i yükleyin
Nginx, varsayılan Ubuntu depolarında mevcut olduğundan, apt paketleme sistemini kullanarak bu depolardan kurulabilir.
Bu oturumda apt paketleme sistemiyle ilk etkileşimimiz olacağından, en güncel paket listelerine erişebilmek için yerel paket dizinimizi güncelleyeceğiz. Ardından nginx'i kurabiliriz:
sudo apt update
sudo apt install nginxİşlemi kabul ettikten sonra apt, Nginx'i ve gerekli tüm bağımlılıkları sunucunuza kuracaktır.
Adım 2 – Güvenlik Duvarını Yapılandırın
Nginx'i test etmeden önce, güvenlik duvarı yazılımının servise erişime izin verecek şekilde yapılandırılması gerekir. Kurulumdan sonra Nginx, UFW ile kendini bir servis olarak kaydeder ve bu da Nginx'e erişime izin vermeyi kolaylaştırır.
ufw'nin nasıl çalışacağını bildiği uygulama yapılandırmalarını yazarak listeleyin:
sudo ufw app list
Uygulama profillerinin bir listesini almalısınız:
Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHÇıktıda görüldüğü gibi Nginx için üç profil bulunmaktadır:
- Nginx Tam: Bu profil hem 80 portunu (normal, şifrelenmemiş web trafiği) hem de 443 portunu (TLS/SSL şifreli trafik) açar.
- Nginx HTTP: Bu profil yalnızca 80 numaralı portu açar (normal, şifrelenmemiş web trafiği)
- Nginx HTTPS: Bu profil yalnızca 443 portunu açar (TLS/SSL şifreli trafik)
Yapılandırdığınız trafiğe izin veren en kısıtlayıcı profili etkinleştirmeniz önerilir. Şimdilik, yalnızca 80 numaralı porttaki trafiğe izin vermemiz gerekiyor.
Bunu şu komutu yazarak etkinleştirebilirsiniz:
sudo ufw allow 'Nginx HTTP'
Bu değişikliği şu komutu yazarak onaylayabilirsiniz:
sudo ufw status
Çıktı hangi HTTP trafiğine izin verildiğini gösterir:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Adım 3 – Web sunucunuzu kontrol edin
Kurulum işleminin sonunda Ubuntu 20.04 Nginx'i başlatacaktır. Web sunucusu zaten başlatılmış olmalıdır.
Bunu şunu yazarak yapabiliriz:
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 processBu durumda da görüldüğü üzere, hizmet başarıyla başlatılmıştır. Ancak, test etmenin en iyi yolu Nginx'ten bir sayfa isteğinde bulunmaktır.
Yazılımın düzgün çalıştığını doğrulamak için sunucunuzun IP adresine giderek varsayılan Nginx açılış sayfasına erişebilirsiniz. Sunucunuzun IP adresini bilmiyorsanız, icanhazip.com aracını kullanarak bulabilirsiniz. Bu araç, internetteki başka bir yerden alınmış gibi genel IP adresinizi verecektir:
curl -4 icanhazip.com
Sunucunuzun IP adresini aldıktan sonra, bunu tarayıcınızın adres çubuğuna girin:
http://your_server_ipVarsayılan Nginx açılış sayfasını almalısınız:
Eğer bu sayfadaysanız sunucunuz düzgün çalışıyor ve yönetilmeye hazır demektir.
Adım 4 – Nginx Sürecini Yönetin
Artık web sunucunuzu kurduğunuza 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 sunucusu durduğunda onu başlatmak için şunu yazın:
sudo systemctl start nginx
Hizmeti durdurup 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 yüklenebilir. 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. Eğer bu sizin isteğiniz değilse, şu komutu yazarak bu davranışı devre dışı bırakabilirsiniz:
sudo systemctl disable nginx
Hizmetin önyükleme sırasında yeniden başlatılmasını sağlamak için şunu yazabilirsiniz:
sudo systemctl enable nginx
Artık temel yönetim komutlarını öğrendiniz ve sitenizi birden fazla alan adına ev sahipliği yapacak şekilde yapılandırmaya hazır olmalısınız.
Adım 5 – Sunucu bloklarını ayarlayın (önerilir)
Nginx web sunucusunu kullanırken, yapılandırma ayrıntılarını kapsüllemek ve tek bir sunucudan birden fazla etki alanı barındırmak için sunucu blokları (Apache'deki sanal ana bilgisayarlara benzer) kullanılabilir. Biz your_domain adında bir etki alanı oluşturacağız, ancak bunu kendi etki alanı adınızla değiştirmelisiniz.
Ubuntu 20.04'teki Nginx, varsayılan olarak etkin olan ve belgeleri /var/www/html dizininin dışında sunmak üzere yapılandırılmış bir sunucu bloğuna sahiptir. Bu, tek bir site için iyi çalışsa da, birden fazla site barındırıyorsanız zahmetli olabilir. /var/www/html dizinini değiştirmek yerine, your_domain sitemiz için /var/www dizininde bir dizin yapısı oluşturalım ve istemcinin isteğiyle eşleşmemesi durumunda hizmet verilecek varsayılan dizin olarak /var/www/html dizinini bırakalım. Diğer siteler
Aşağıdaki gibi your_domain için bir dizin oluşturun ve gerekli tüm üst dizinleri oluşturmak için -p bayrağını kullanın:
sudo mkdir -p /var/www/your_domain/html
Daha sonra dizinin sahipliğini $USER ortam değişkeniyle atayın:
sudo chown -R $USER:$USER /var/www/your_domain/html
Varsayılan dosya izinlerini ayarlayan umask değerinizi değiştirmediyseniz, web kökü izinleriniz doğru olmalıdır. İzinlerinizin doğru olduğundan ve sahibinin yalnızca gruplara ve diğerlerine 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/your_domain
Daha sonra nano veya favori düzenleyicinizi kullanarak örnek bir index.html sayfası oluşturun:
sudo nano /var/www/your_domain/html/index.html
İçerisine aşağıdaki HTML örneğini ekleyin:
<html>
<head>
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain server block is working!</h1>
</body>
</html>Dosyayı kaydedip kapatmak için Ctrl+X'e basın, ardından kaydetmeniz istendiğinde Y'ye ve ardından Enter'a basın.
Nginx'in bu içeriği sunabilmesi için doğru talimatlarla bir sunucu bloğu oluşturmanız gerekir. Varsayılan yapılandırma dosyasını doğrudan değiştirmek yerine, /etc/nginx/sites-available/your_domain dizininde yeni bir dosya oluşturalım:
sudo nano /etc/nginx/sites-available/your_domain
Yeni dizinimiz ve alan adımız için varsayılana benzer ancak güncellenmiş olan aşağıdaki yapılandırma bloğunu yapıştırın:
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}Kök yapılandırmasını yeni dizinimize ve server_name'i alan adımıza güncellediğimizi unutmayın.
Daha sonra dosyayı sites-enabled dizinine bir bağlantı oluşturarak etkinleştirelim; Nginx başladığında bu dizinden okuma yapacaktır:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
Artık iki sunucu bloğu etkinleştirildi ve listen ve server_name yönergelerine dayalı isteklere yanıt verecek şekilde yapılandırıldı (Nginx'in bu yönergeleri nasıl işlediği hakkında daha fazla bilgiyi burada okuyabilirsiniz):
- alan_adınız: your_domain ve www.your_domain isteklerine yanıt verir.
- Varsayılan: Diğer iki blokla eşleşmeyen 80 numaralı porttaki herhangi bir isteğe yanıt verir.
Ek sunucu adları eklemekten kaynaklanabilecek olası karma kovası bellek sorununu önlemek için, /etc/nginx/nginx.conf dosyasında tek bir değer ayarlamak gerekir. Dosyayı açın:
sudo nano /etc/nginx/nginx.conf
server_names_hash_bucket_size komutunu bulun ve satırın yorumunu kaldırmak için # simgesini kaldırın. Nano kullanıyorsanız, CTRL ve w tuşlarına basarak dosyadaki kelimeleri hızlıca arayabilirsiniz.
...
http {
...
server_names_hash_bucket_size 64;
...
}
...İşiniz bittiğinde dosyayı kaydedip kapatın.
Daha sonra 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, yaptığınız değişikliklerin etkili olması için Nginx'i yeniden başlatın:
sudo systemctl restart nginx
Nginx artık alan adınıza hizmet veriyor olmalı. Bunu http://your_domain adresine giderek test edebilirsiniz. Burada aşağıdaki gibi bir şey görmelisiniz:
Adım 6 – Önemli Nginx dosyaları ve dizinleriyle tanışın
Artık Nginx servisini nasıl yöneteceğinizi öğrendiğinize göre, birkaç önemli dizin ve dosyaya aşina olmak için birkaç dakikanızı ayırmanız gerekir.
İçerik
- /var/www/html: Varsayılan olarak yalnızca daha önce gördüğünüz Nginx varsayılan sayfasından oluşan gerçek web içeriği, /var/www/html dizininin dışında sunulur. Bu, Nginx yapılandırma dosyaları değiştirilerek değiştirilebilir.
Sunucu yapılandırması
- /etc/nginx: Nginx yapılandırma dizini. Tüm Nginx yapılandırma dosyaları burada bulunur.
- /etc/nginx/nginx.conf: Ana Nginx yapılandırma dosyası. Bu dosya, genel Nginx yapılandırmasında değişiklik yapmak için değiştirilebilir.
- /etc/nginx/siteler-kullanılabilir/: Her site için sunucu bloklarının depolanabileceği bir dizin. Nginx, sites-enabled dizinine bağlanmadıkları sürece bu dizindeki yapılandırma dosyalarını kullanmaz. Genellikle tüm sunucu bloğu yapılandırması bu dizinde yapılır ve ardından başka bir dizine bağlanarak etkinleştirilir.
- /etc/nginx/sites-enabled/: Her site için etkin sunucu bloklarının depolandığı dizin. Bunlar genellikle mevcut site dizinindeki yapılandırma dosyalarına bağlanılarak oluşturulur.
- /etc/nginx/snippet'leri: Bu dizin, Nginx yapılandırmasının başka yerlerine eklenebilecek yapılandırma parçalarını içerir. Potansiyel olarak tekrarlanabilir yapılandırma bölümleri, parçalara yeniden yapılandırmak için iyi adaylardır.
Sunucu raporları
- /var/log/nginx/access.log: Nginx aksi şekilde yapılandırılmadığı sürece web sunucunuza yapılan her istek bu günlük dosyasına kaydedilir.
- /var/log/nginx/error.log: Herhangi bir Nginx hatası bu kayıtta kaydedilir.
Sonuç
Artık web sunucunuz kurulu olduğuna göre, daha zengin bir deneyim yaratmak için kullanmak istediğiniz içerik ve teknoloji türü konusunda birçok seçeneğiniz var.











