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.
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.
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.
Kurulum tamamlandıktıktan sonra nginx servisi başlatılır ve durumu kontrol edilir.
systemctl start nginx
systemctl status nginx
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
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.
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
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.
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.
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
İ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
Gelen alanlar istege göre doldurulur veya boş geçilebilir.
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
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 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 İ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 İ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
vim /etc/nginx/conf.d/default.conf
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;
}
}
vim /etc/nginx/conf.d/default1.conf
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
Vakit buldukça yazmaya devam edeceğim.
No responses yet