NGINX

tarafından
1910
NGINX

KURULUM

Burada anlatılacak kurulum çalışmaları manuel kurulum üzerinden olacaktır. Öcelikle kurulum için .rpm uzantılı dosyanın indirilmesi gerekmektedir. Buradan ilgili nginx sürümünün güncel versiyonu indirilir. Kurulum rhel 7.6 üzerinde yapılmıştır.

Nginx rpm dosyası indirlmesi

Dosya indirildikten sonra WinSCP proğramı(buradan indirebilirsiniz) üzerinden linux makinesinde istediğimiz dizine atılır. Ben burada /opt/nginxrpm/ dosya yolunu kullanacağım.

Klasör oluşturulması
Dosyanın WinSCP üzerinden oluşturduğumuz nginxrpm klasörü altına atılması
 cd /opt/nginxrpm/
yum localinstall nginx-1.16.1-1.el7.ngx.x86_64.rpm

Dosya atıldıktan sonra kurulum yukarıdaki komut ile kurulum işlemi yapılır. Yukarıdaki komut nginxrpm dizini altında çalıştırılır.

Yum komutu ile yükleme işlemi
Kurulumun tamamlanması

Kurulum tamamlandıktıktan sonra nginx servisi başlatılır ve durumu kontrol edilir.

systemctl start nginx 
systemctl status nginx
Nginx servisinin başlatılması ve durum kontrolü

Nginx kurulduktan sonra local bilgisayardan tarayıcı üzerinden sanal makineye bağlantı sağlayarak nginx sayfasına bağlantı sağlanabalir.

NOT:Eğer bağlantı sağlayamazsanız firewall ayarlarını kapatmanız gerekebilir. Aşağıdaki komut ile bunu gerçekleştirebilirsiniz.

systemctl stop firewalld 
Firewall kapatılması
Nginx Default Html Sayfası

Yukarıdaki gibi ip adresi girilerek nginx uygulamasının default web sayfası açılabilir.

LINUX ÜZERİNE TAR DOSYASI İLE NGINX KURULUMU

Aşağıdaki anlatımda LINUX Rhel 7.6 üzerine tar dosyası üzerinden nginx kurulumu gerçekleştirilecektir. Bu kurulumun rpm dosyası ile kurulumdan farklı olarak özelleştirilmiş bir şekilde kurulum yapılması sağlanır. İlgili dosya istenilen versiyon durumuna göre buradan indirilir. Bu anlatımda nginx-1.18.0 versiyonu kullanılacaktır.

Nginx Web Server Dosyasının İndirilmesi

Kurulum yapılacak makinenin internet ortamına erişimi var ise aşağıdaki şekilde belirli bir klasör içerisine indirilmesi sağlanır.

mkdir /opt/nginx && cd /opt/nginx
wget http://nginx.org/download/nginx-1.18.0.tar.gz
Nginx Web Server Uygulamasının İndirilmesi
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

NOT: Bu adımlardan sonra derleme işlemi yapılacaktır. Derleme işleminde log, pid, vb. dizinlerin belirlenmesi gibi işlemleri yapabilirsiniz. Gerekli düzenlemeler için bu sayfayı kullanabilirsiniz. Ayrıca aşağıdaki şekilde header bilgisi gizlenebilir. Aşağıdaki komut seti ile .c uzantılı yapılandırma dosyaları içerisinde değişiklikler yapılır. Ve header bilgisi gizlenmiş olur.

sed -i 's@"nginx/"@"-/"@g' src/core/nginx.h
sed -i 's@r->headers_out.server == NULL@0@g' src/http/ngx_http_header_filter_module.c
sed -i 's@r->headers_out.server == NULL@0@g' src/http/v2/ngx_http_v2_filter_module.c
sed -i 's@<hr><center>nginx</center>@@g' src/http/ngx_http_special_response.c

NOT: Derleme işlemi içerisinde bazı gereksinimlere ihtiyaç vardır. Bu sebeble internet ortamına çıkan makine üzerinde yapılması büyük kolaylık sağlayacaktır. Kullanılan makine internet ortamına çıkmıyor ise gereksinimler manuel olarak indirilip makine içerisine atılarak yüklenmesi sağlanabilir.

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/run/nginx.pid --with-http_ssl_module

Yukarıdaki komut ile bazı dosyaların çalışma dizini belirtilmiştir. Dizin belirtilmeden yapılacak derleme işleminde default olarak gelen değerlerde yükleme yapılacaktır. Ayrıca SSL sertifikaların kullanılması için yukarıdaki modülün eklenmesi sağlanır. Buna benzer bazı modüllerin yükleme işlemi default olarak gelmediği için yukarıda belirttiğim link içerisinden projenize uygun modül seçilerek kullanılması sağlanır.

Komutun çalıştırılması esnasında aşağıdaki gibi hata alınması durumunda C derleyicisinin yüklenmesi sağlanarak derleme işlemine devam edilir. Bun benzer alınan hata durumunda ilgili kurulumlar yum install <paket adı> komutu kullanılarak yüklenir. Anlatıma LINUX Rhel7.6 üzerinde değindiğim için yum komutu ile yüklenmesini anlatılmıştır.

Configure Komutu Sonrası Alınan Hata

Aşağıdaki paket ve gereksinimlerin sunucu üzerinde yüklü olması gerekir.

yum install gcc
yum install openssl
yum install openssl-devel
yum install pcre
yum install pcre-devel

Bu yüklemelerin ardından yukarıdaki ./configure ile başlayan komut tekrar çalıştırılır. Daha sonra oluşacak make dosyaları üzerinden kurulum bitirilir ve servis dosyası oluşturulması sağlanır.

make
make install
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
systemctl enable nginx
systemctl start nginx

Bu adımlardan sonra isteğe göre nginx.conf dosyası düzenlenir. Ayrıca aşağıdaki komut ile header bilgisinin gizlendiği gözlemlenebilir. Aşağıdaki görsel durumu açıklar, web sayfası düzenlenmediği için 404 hatası mevcuttur.

Header Bilgisinin Gizlenmesi

NGINX DEFAULT PORT NUMARASININ DEĞİŞTİRİLMESİ

Öncelikle nginx kofigürasyon dosyasına gidilir.Dosya açıldıktan sonra ilgili kısımlarda düzenleme yapılarak port numarası düzenlenir. Ayrıca sanal makinenin ip adreside düzenlenebilir.

vim /etc/nginx/conf.d/default.conf
Nginx Konfigürasyon Dosyasının Düzenlenmesi

İlgili düzenlemeler yapıldıktan sonra dosya kaydedilerek kapatılır ve nginx servisi restart edilir, dinlediği port’a bakılır.

systemctl restart nginx 
netstat -tulpn

NGINX ÜZERİNE SERTİFİKA YÜKLENMESİ

Burada yapılacak işlemler kendinden imzalı sertifika üzerinden yapılacaktır. Sertifika üretmek için openssl kullanılmıştır.

openssl req -newkey rsa:4096 \
-x509 \
-sha256 \
-days 3650 \
-nodes \
-out selfsigned.crt \
-keyout selfsigned.key
SSL Sertifika Üretimi

Gelen alanlar istege göre doldurulur veya boş geçilebilir.

SSL Sertifika Üretimi
mkdir /etc/nginx/certificates

Yukarıdaki komut ile certificates adında klasör oluşturulur. Ve bu klasör altına oluşturduğumuz sertifika dosyaları taşınır.Daha sonra bu sertifikalar nginx konfigürasyon dosyasında dizin belirtilerek tanıtılır.

mv selfsigned.crt /etc/nginx/certificates
mv selfsigned.key /etc/nginx/certificates
Sertifika ayarları

Sertifikalar ilgili klasöre atıldıktan sonra nginx konfigürasyon dosyası düzenlenmek  üzere açılır. Ve içerisine ilgili satırlar yazılır. Bu satırlar server blogu arasına yazılır.Satırlar yazıldıktan sonra kaydedilip kapatılır ve nginx servisi restart edilir.
NOT: Eğer servis restart edildiğinde nginx servisi ayağa kalkmıyor ise linux selinux ayarlarından olabilir.  
Dosya yoluna gidilerek disabled seçeneği yazılır ve makine restart edilir. Aşağıdaki görsellerde inceleyebilirsiniz.

vim /etc/nginx/conf.d/default.conf
listen 443 ssl;
ssl_certificate /etc/nginx/certificates/selfsigned.crt;
ssl_certificate_key /etc/nginx/certificates/selfsigned.key;
systemctl restart nginx
Nginx Konfigürasyon Dosyasının Açılması
Nginx Konfigürasyon Dosyasının Düzenlenmesi
Selinux Konfigürasyon Dosyasının Açılması
Selinux Ayarlarının Kapatılması
Sistemin Restart Edilmesi
Nginx Servis Durum Kontrolü
Bağlantının Sağlanması
SSL İle Güvenli Bağlantının Sağlanması
Nginx Default Web Sayfasının Açılması

NGINX HTTP TO HTTPS REDIRECT İŞLEMİ (HTTP İLE GELEN İSTEKLERİ HTTPS OLARAK YÖNLENDİRME)

Http olarak yapılan istekleri https olarak yönlendirme için aşağıdaki işlemeler yapılabilir. İlgili ayarlar nginx konfigürasyon dosyası üzerinden yapılacaktır . Ayarlamalar sonrası nginx restart edilerek tarayıcı üzerinden http olarak istek gönderilip https ‘e çevrildiğine bakılacaktır.

vim /etc/nginx/conf.d/default.conf
server {
      listen 80;
      server_name $servername;
      return 301 https://$servername$request_uri;
}
systemctl restart nginx
Nginx Redirect İşlemi İçin Konfigürasyon Dosyasının Düzenlenmesi
Nginx’in Dinlediği Portlar
Tarayıcı Üzerinde Açılması
Web Sayfasının Görüntülenmesi

NGINX İLE REVERSE PROXY İŞLEMİ

Nginx ile reverse proxy işlemi için aşağıdaki adımlar yapılacaktır. Öncelikle nginx üzerinde örnek olacak şekilde 81 portunu dinleyen konfigürasyon düzenleme değişikliğine gidilir. Böylelikle 80 portuna gelen istekler 81 portunda çalışan nginx server’na yönlendirilecektir.
Reverse proxy yapacağımızın anlaşılması için açılacak default nginx server sayfasının üzerinde değişikliğe gidilir.

vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name 192.168.56.101;
location / {
proxy_pass http://192.168.56.101:81;
}
}
server {
listen 81;
server_name 192.168.56.101;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
vim /usr/share/nginx/html/index.html
<h1>Welcome to nginx!REVERSE PROXY</h1>
systemctl restart nginx

Yukarıdaki adımlar ile reverse proxy işlemi gerçekleştirilir. Böylelikle aracı site üzerine gelen istekler arka planda başka bir siteye yönlendirilebilir ve o sitenin içeriği görüntülenebilir.

Nginx Konfigürasyon Dosyasının Açılması
Nginx Konfigürasyon Dosyasının Düzenlenmesi
HTML Dosyasının Açılması
HTML Düzenleme İşlemleri
Nginx Servisi Restart Edilemsi
Nginx’in Dinlediği Portlar
Nginx Reverse Proxy İşleminin Gözlemlenmesi

NGINX İLE LOADBALANCER (YÜK DENGELEME) İŞLEMİ

Nginx ile yük dengeleme işlemi için aşağıdaki adımlar kullanılacaktır. Burada kullanacağımız metot varsayılan yük dengeleme işlemi olacaktır. Burada yapacağımız işlemlerden bahsedecek olursak öncelikle nginx’in default konfigürasyon dosyası üzerinde 81, 82 ve 83 portlarını dinleyen server ayarları yapılacaktır. Daha sonra default1 isimli bir konfigürasyon dosyası oluşturularak bu dosyanın içeriği load balancer konfigürasyonu olarak ayarlanacaktır. Ayrıca her bir serverin açılacak web sayfası değiştirilecektir. Değiştirme amacımız loadbalancer olayını gözlemlemektir.

NOT: ikinci oluşturduğumuz konfig dosyasını Nginx nasıl tanıyacak diye soracak olursanız; Nginx çalışırken nginx.conf dosyası üzerinden çalışmaya başlar. Ve bu dosya içerisinde include satırında conf.d klasörü altındaki bütün .conf uzantılı dosyanın include edilmesini sağlar. Bu sebebten ötürü .conf dosyası olarak tanımladığımız dosyalar nginx tarafından uygulanacaktır.
vim /etc/nginx/nginx.conf
aşağıdaki satır include eder;

keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}

vim /usr/share/nginx/html/index1.html
loadbalancer1
  vim /usr/share/nginx/html/index2.html
loadbalancer2
WEB Sayfası Düzenlenmesi
Web Ssayfası İçeriğinin Oluşturulması
Açılacak İkinci Web Sayfası Ayarı
Web Sayfası İçeriğinin Oluşturulması

vim /etc/nginx/conf.d/default.conf

Nginx Konfigürasyon Dosyası Açılması
server {
listen 81;
server_name 192.168.56.101;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 82;
server_name 192.168.56.101;
location / {
root /usr/share/nginx/html;
index index1.html index.htm;
}
}
server {
listen 83;
server_name 192.168.56.101;
location / {
root /usr/share/nginx/html;
index index2.html index.htm;
}
}
Bu görsel boş bir alt niteliğe sahip; dosya adı image-47.png
Konfigürasyon Dosyasının Eklenmesi
vim /etc/nginx/conf.d/default1.conf
Bu görsel boş bir alt niteliğe sahip; dosya adı image-48.png
Konfigürasyon Dosyasının Açılması
upstream loadbalancer {
server 192.168.56.101:81; 
server 192.168.56.101:82;
server 192.168.56.101:83;
}
server {
listen 80;
location / {
proxy_pass http://loadbalancer;
}
}
systemctl restart nginx
Default1 Konfigürasyon Dosyasının İçeriğinin Düzenlenmesi
Nginx Servisinin Restart Edilmesi Ve Çalıştığının Gözlemlenmesi
Nginx Web Serverinin Dinlediği Portlar
İlk Web Serverin Web Sayfasının Açılması
İkinci web serverin web sayfasının açılması
Üçüncü web serverin web sayfasının açılması

Vakit buldukça yazmaya devam edeceğim.