NGINX Temel Yapılandırılması

Bu makale, Nginx’te temel yapılandırmanın nasıl yapılacağını içerir.

Emre Emanet
5 min readDec 1, 2020

Nginx, esas olarak yük dengeleme için ancak daha farklı amaçlar için kullanılan modern bir teknolojidir. Çok karmaşık bir teknoloji gibi görünse de, temelleri öğrenirseniz, Nginx ile çalışmak çok basittir. Bu yüzden, konfigürasyonlara girmeden önce size Nginx’e bir giriş yapmamız gerekmekte. Nginx, reverse proxy (ters proxy) , load balancer (yük dengeleme) veya HTTP cache olarak kullanılabilen bir web sunucusudur. Ngnix özellikle yüksek trafiği olan web siteleri için için çok elverişlidir. Diğer web sunucularla kıyaslandığında çok daha az CPU kullanımıyla ön plana çıkmaktadır. Nginx’in bazı önemli özellikleri aşağıdadır.

  • Önbelleğe alma ile ters proxy
  • IPv6
  • Yük dengeleme
  • Önbelleğe alma ile FastCGI desteği
  • WebSockets
  • SNI ile TLS / SSL

NGINX’i Yükleme

Nginx, işletim sistemine bağlı olarak farklı şekilde kurulabilir. Nginx’i yüklemek için aşağıdaki bağlantıya bağlantıya bakabilirsiniz.

NGINX Kurulumu

Nginx’i kurmadan önce SELinux’u kapatmamız gerekmekte. SELinux’un durumunu kontrol etmek için sestatus komutunu kullanıyoruz.

[root@server ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

SELinux yapılandırmasını açıp ve ayarlarınız düzenliyoruz.

# vi /etc/sysconfig/selinux

“SELINUX=enforcing” kodunu “SELINUX=disabled” ile değiştirin.
Dosyayı kaydedin ve çıkın. Ardından sistemi yeniden başlatın.

# reboot

SELinux’un tekrar durumunu kontrol etmek için:

[root@server~# sestatus
SELinux status: disabled

Nginx’i kurmak için:

# yum install epel-release
# yum install nginx

Nginx kurulduktan sonra başlatılması gerekmektedir.

# systemctl start nginx

Nginx’in çalışıp çalışmadığını kontrol etmek için:

# systemctl status nginx

Nginx çalıştırıldıktan sonra web tarayıcısından IP adresi yazılarak yada hostname yazılarak Nginx’in bir web sayfasını publish ettiği görülebilir.

Nginx Konfigürasyonu

Nginx varsayılan yapılandırma dosyası nginx.confdosyasıdır. Bu dosya işletim sisteminden işletim sistemine göre değişiklik gösterebilir.

Nginx’in konfigürasyon dosyası çeşitli işletim sistemlerinde /usr/local/nginx/conf, /etc/nginxyada /usr/local/etc/nginx dizini içerisinde bulunur. Bu dosyanın dizini değiştirilebilir.

ÖNEMLİ : Nginx konfigürasyonunda eğer bir directive’e ayar yapılmamışsa default ayarlarını kullanır.

Nginx Konfigürasyon Dosyası Nasıl Oluşturulur?

Nginx yapılandırma dosyası direktiflerden(directives) oluşur . Bu direktifler Nginx modüllerini kontrol eder. Direktifler basit direktifler ve blok direktifler olarak ikiye ayrılır.

Basit direktifler, isim ve noktalı virgül ( ;) ile biten boşlukla ayrılmış parametrelerden oluşur .

name parameter;

Blok direktifler basit bir direktif ile aynı yapıya sahiptir, ancak bu, noktalı virgül yerine bir çift küme paranteziyle başlar ( {ve }) biter. Bir blok direktif küme ayraçları içinde başka yönergelere sahipse, buna bağlam(context) denir . Bu tür bağlamlar event, http, server, location vb. olabilir.

Herhangi bir bağlamın dışına yerleştirilen direktifler ana(main) bağlamda kabul edilir.

#İşaretinden sonraki satırın geri kalanı yorum satırı olarak kabul edilir.

eventsve httpdirektifleri main directives’te, http’deki sunucu ve sunucudaki konumda bulunur.

İşte örnek bir Ngnix konfigürasyon dosyası:

#Ornek Bir konfigürasyon.
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

Bu yapılandırma dosyasında upstream, server, ip_hash directiveleri bulunmaktadır.

Upstream

Nginx’i yapılandırırken, load balancing yapmak için veya proxy oluşturmak için upstream adı verilen sunucuları tanımlamak gerekir. Sunucular farklı portlardan dinleyebilir. Bu karışıklığın önüne geçilmesi için upstream isimleri uniq(benzersiz) olmalıdır.

Öyleyse, sunucu1 IP 182.40.40.10 ile sunucu2 IP 182.40.40.20 olarak iki sunucunuz olduğunu varsayalım sample.server.com olarak tanımlanmalıdır,

upstream sample.server.com {
server 182.40.40.10:8080;
server 182.40.40.20:8081;
}

Upstream default olarak round robin load balancing yöntemini kullanır. Round Robin: Gelen istekleri eşit olarak sunuculara dağıtarak load balancing yapar.

weight — Bu anahtar kelimeyi kullanarak sunucular arasındaki trafiği kontrol edebilirsiniz. weight varsayılan değeri 1'dir.

upstream sample.server.com {
server 172.40.40.10:8080 weight=2;
server 172.40.40.20:8081;
}

Yukarıdaki örnekte, her 3 istek aşağıdaki gibi dağıtılacaktır: 2 istek 172.40.40.10:8080 (server1) ve diğer istek 172.40.40.20:8081 (server2).

Bir sunucu ile iletişim sırasında bir hata oluşursa, istek bir sonraki sunucuya iletilir ve böylece tüm işleyen sunucular denenene kadar devam eder. Sunuculardan herhangi birinden başarılı bir yanıt alınamadıysa, istemci son sunucuyla iletişimin sonucunu alır.

backup- Sunucuyu bir backup sunucusu olarak işaretler. Birincil sunucular kullanılamıyor olduğunda istekleri geçirilir.

Daha fazla bilgi için: http://nginx.org/en/docs/http/ngx_http_upstream_module.html

Server

Server block, sanal sunucuların yapılandırmasını ayarlar. IP tabanlı (IP adresine göre) ve isim tabanlı (“ana bilgisayar” istek başlık alanına göre) Sanal sunucular arasında net bir ayrım yoktur. Sunucu adı, server_nameanahtar sözcüğü ile tanımlanır. Listen yönergesi, bağlantı noktası sunucusunun dinlemesi gerektiğini tanımlar. Nginx, HTTP port numarası olarak 80 nolu portu açık; HTTPS trafiği için 443 port numarasını kullanır.

Detaylı bilgi için: http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name

server {
listen 80;
server_name some.server.com;
}

Nginx sunucusuna bir talep geldiğinde, Nginx önce hangi sunucunun isteği işleyeceğine karar verir. Yukarıdaki senaryoda olduğu gibi, ana bilgisayar adının olması gerekir. Ayrıca birkaç ana bilgisayar adı ve / veya birkaç server block ile aşağıdaki gibi tanımlayabilirsiniz:

server {
listen 80;
server_name some.server.com www.some.server.com;
}server {
listen 80;
server_name some.server1.com www.some.server1.com;
}server {
listen 80;
server_name some.server2.com www.some.server2.com;
}

İsteklerin bir host olmadan gelmesi durumunda, sunucuyu şu şekilde ayarlayabilirsiniz.

server {
listen 80;
server_name " ";
return 444;
}

Burada, sunucu adı, “hostname” başlık alanı olmadan istekleri eşleştirecek boş bir dizeye ayarlanır ve bağlantıyı kapatan özel bir Nginx’in standart olmayan kodu 444 döndürülür.

Location

Server block içinde bir konum bloğu tanımlanır. Bu parametre request URI’sine bağlı olarak ayarlanır. Bir konum, bir prefix dizesi veya normal ifade ile tanımlanabilir.

As an example, you have two URI as, www.example.com/to/example www.example.com/sample.

Örnek olarak, iki URI olduğunu varsayalım.

www.example.com/to/example

www.example.com/sample

Şimdi her iki URI’nin de www.example.com olan aynı hostname adına sahip olduğunu görebilirsiniz.

location / {....}tüm talebinizi tek bir sunucu üzerinden iletecektir.

Nginx’in nasıl yapılandıracağınızı göreceksiniz.

upstream sample.server.com {
server 172.42.42.40:8080;
server 172.42.42.40:8081;
}

server {
listen 80;
server_name www.example.com;

location /to {
*****CONFIGURATIONS*****
proxy_pass http://sample.server.com;
}

location /to/example {
*****CONFIGURATIONS*****
proxy_pass http://sample.server.com;
}

location /sample {
*****CONFIGURATIONS*****
proxy_pass http://sample.server.com;
}
}

Yukarıdaki örnekte,

  • Gelen talepler www.example.com/toen üst konuma gönderilir.
  • Gelen talepler www.example.com/to/examplesorta konuma gönderilir.
  • Gelen istekler www.example.com/sampleen alt konuma gönderilir.

Her konum için farklı türde konfigürasyonlar ekleyebilirsiniz. Daha fazla bilgi için http://nginx.org/en/docs/http/ngx_http_core_module.html#location makalesine bakın.

pass_proxy directive, konumu upstream eşlemek için kullanılır. Bu, istek konuma geldiğinde proxy_pass aracılığıyla talebin, isteğin uygun sunucuya gönderildiği upstream yönlendirildiği anlamına gelir.

--

--

No responses yet