Nginx Sanal Ana Bilgisayarlar ve SSL Sertifikası ile Nasıl Kurulur


Nginx (Engine-x'in kısaltması) ücretsiz, açık kaynaklı, güçlü, yüksek performanslı ve ölçeklenebilir bir HTTP ve ters proxy sunucusu, bir posta ve standart TCP/UDP proxy'sidir. sunucu. Basit bir yapılandırma dili ile kullanımı ve yapılandırılması kolaydır. Nginx, ölçeklenebilirliği ve performansı nedeniyle artık ağır yüklü sitelere güç sağlamak için tercih edilen web sunucusu yazılımıdır.

Bu makalede Nginx'in bir HTTP sunucusu olarak nasıl kullanılacağı, web içeriği sunacak şekilde nasıl yapılandırılacağı ve isme dayalı sanal ana bilgisayarların nasıl kurulacağı ve Ubuntu ve CentOS'ta kendinden imzalı bir sertifika da dahil olmak üzere güvenli veri aktarımları için SSL oluşturulup kurulacağı tartışılacaktır. .

Nginx Web Sunucusu Nasıl Kurulur

Öncelikle gösterildiği gibi paket yöneticinizi kullanarak Nginx paketini resmi depolardan yükleyerek başlayın.

------------ On Ubuntu ------------ 
sudo apt update 
sudo apt install nginx 

------------ On CentOS ------------
sudo yum update 
sudo yum install epel-release 
sudo yum install nginx 

Nginx paketi kurulduktan sonra aşağıdaki komutları kullanarak servisi şimdilik başlatmanız, açılışta otomatik başlamasını etkinleştirmeniz ve durumunu görüntülemeniz gerekiyor. Ubuntu'da, paket önceden yapılandırılmışken otomatik olarak başlatılıp etkinleştirilmesi gerektiğini unutmayın.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

Bu noktada Nginx web sunucusunun çalışır durumda olması gerekir, durumu netstat komutuyla doğrulayabilirsiniz.

sudo netstat -tlpn | grep nginx

Sisteminizde etkin bir güvenlik duvarı varsa, HTTP ve HTTPS trafiğine izin vermek için 80 ve 443 bağlantı noktalarını açmanız gerekir. sırasıyla koşarak.

------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload 

Nginx kurulumunu test etmek ve çalışıp çalışmadığını ve web sayfalarını sunup sunamayacağını kontrol etmek için ideal yöntem, bir web tarayıcısı açmak ve sunucunun IP'sini işaret etmektir.

http://Your-IP-Address
OR
http://Your-Domain.com

Çalışan bir kurulum aşağıdaki ekranla belirtilmelidir.

Nginx Web Sunucusu Nasıl Yapılandırılır

Nginx'in yapılandırma dosyaları /etc/nginx dizininde bulunur ve genel yapılandırma dosyası hem CentOS hem de Ubuntu'da /etc/nginx/nginx.conf konumunda bulunur.

Nginx, yönergeler olarak bilinen çeşitli yapılandırma seçenekleriyle kontrol edilen modüllerden oluşur. Bir direktif basit olabilir (form adı ve ; ile sonlandırılmış değerlerde) veya blok ( kullanılarak eklenen ekstra talimatlar içerir) olabilir {}). Diğer direktifleri içeren blok direktifine de bağlam adı verilir.

Tüm direktifler proje web sitesindeki Nginx belgelerinde kapsamlı bir şekilde açıklanmaktadır. Daha fazla bilgi için ona başvurabilirsiniz.

Bağımsız Modda Nginx Kullanarak Statik İçerik Nasıl Sunulur

Temel düzeyde, Nginx, HTML ve medya dosyaları gibi statik içeriği, yalnızca varsayılan sunucu bloğunun kullanıldığı bağımsız modda sunmak için kullanılabilir (hiçbir sanal ana bilgisayarın yapılandırılmadığı Apache'ye benzer).

Ana konfigürasyon dosyasındaki konfigürasyon yapısını kısaca açıklayarak başlayacağız.

 
sudo vim /etc/nginx/nginx.conf

Bu Nginx konfigürasyon dosyasına baktığınızda konfigürasyon yapısı aşağıdaki gibi görünmelidir ve buna diğer birçok basit ve blok direktifi içeren ana içerik denir. Tüm web trafiği http bağlamında işlenir.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Aşağıda örnek bir Nginx ana yapılandırma (/etc/nginx/nginx.conf) dosyası yer almaktadır; burada yukarıdaki http bloğu, Nginx'e web sitesi yapılandırma dosyalarını (sanal ana bilgisayar yapılandırmaları) nerede bulacağını söyleyen bir içerme yönergesi içerir. .

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

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

Ubuntu'da ayrıca ek bir içerme yönergesi (include /etc/nginx/sites-enabled/*;) bulacağınızı unutmayın; burada /etc dizini vardır. /nginx/sites-enabled/, siteleri etkinleştirmek için /etc/nginx/sites-available/'de oluşturulan web sitesi yapılandırma dosyalarına yönelik sembolik bağlantıları saklar. Ve bir sembolik bağlantıyı silmek söz konusu siteyi devre dışı bırakır.

Kurulum kaynağınıza bağlı olarak, varsayılan web sitesi yapılandırma dosyasını /etc/nginx/conf.d/default.conf adresinde bulacaksınız (eğer resmi NGINX deposundan yüklediyseniz) ve EPEL) veya /etc/nginx/sites-enabled/default (Ubuntu depolarından yüklediyseniz).

Bu, test sistemindeki /etc/nginx/conf.d/default.conf konumunda bulunan örnek varsayılan nginx sunucu bloğumuzdur.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Yukarıdaki konfigürasyondaki direktiflerin kısa bir açıklaması:

  • dinle: sunucunun dinlediği bağlantı noktasını belirtir.
  • sunucu_adı: tam adlar, joker karakter adları veya normal ifadeler olabilen sunucu adını tanımlar.
  • kök: Nginx'in web sayfalarını ve diğer belgeleri sunacağı dizini belirtir.
  • dizin: sunulacak dizin dosyasının/dosyalarının türünü/türlerini belirtir.
  • konum: belirli dosya ve klasörlere yönelik istekleri işlemek için kullanılır.

Bir web tarayıcısından, ana bilgisayar adı localhost'unu veya IP adresini kullanarak sunucuya işaret ettiğinizde, sunucu isteği işler ve /var/www/html/index.html dosyasını sunar. ve etkinliği hemen 200 (OK) yanıtıyla erişim günlüğüne (/var/log/nginx/access.log) kaydeder. Bir hata durumunda (başarısız olay), mesajı hata günlüğüne (/var/log/nginx/error.log) kaydeder.

Nginx'te oturum açma hakkında daha fazla bilgi edinmek için Nginx'te Özel Erişimi veya Hata Günlüğü Formatlarını Yapılandırma başlıklı makaleye başvurabilirsiniz.

Varsayılan log dosyalarını kullanmak yerine, daha sonra inceleyeceğimiz gibi, “isim bazlı sanal host kurulumu (sunucu blokları)” bölümünde farklı web siteleri için özel log dosyaları tanımlayabilirsiniz.

Nginx ile Bir Web Sayfasına Erişim Nasıl Kısıtlanır

Web sitenize/uygulamanıza veya bazı bölümlerine erişimi kısıtlamak için temel HTTP kimlik doğrulamasını ayarlayabilirsiniz. Bu, esasen tüm HTTP sunucusuna, bireysel sunucu bloklarına veya konum bloklarına erişimi kısıtlamak için kullanılabilir.

htpasswd yardımcı programını kullanarak erişim kimlik bilgilerinizi (kullanıcı adı/şifre) saklayacak bir dosya oluşturarak başlayın.

 
yum install httpd-tools		#RHEL/CentOS
sudo apt install apache2-utils	#Debian/Ubuntu

Örnek olarak, şifre dosyasını belirtmek için -c seçeneğinin kullanıldığı ve -B seçeneğinin kullanıldığı bu listeye admin kullanıcısını ekleyelim (mümkün olduğu kadar çok kullanıcı ekleyebilirsiniz). şifreyi şifrelemek için. [Enter] tuşuna bastığınızda sizden kullanıcının şifresini girmeniz istenecektir:

sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

Ardından, şifre dosyasına uygun izinleri ve sahipliği atayalım (Ubuntu'da kullanıcı ve grup nginx'ini www-data ile değiştirin).

sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Daha önce de belirttiğimiz gibi, web sunucunuza, tek bir web sitesine (sunucu bloğunu kullanarak) veya belirli bir dizine veya dosyaya erişimi kısıtlayabilirsiniz. Bunu başarmak için iki faydalı direktif kullanılabilir:

  • auth_basic – “HTTP Temel Kimlik Doğrulaması” protokolünü kullanarak kullanıcı adı ve şifrenin doğrulanmasını açar.
  • auth_basic_user_file – kimlik bilgisi dosyasını belirtir.

Örnek olarak /var/www/html/protected dizininin nasıl şifreyle korunacağını göstereceğiz.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Şimdi değişiklikleri kaydedin ve Nginx hizmetini yeniden başlatın.

sudo systemctl restart nginx 

Tarayıcınızı bir sonraki sefer yukarıdaki dizine (http://localhost/protected) yönlendirdiğinizde sizden oturum açma bilgilerinizi (kullanıcı adı admin ve seçilen şifre) girmeniz istenecektir. ).

Başarılı bir giriş, dizinin içeriğine erişmenizi sağlar, aksi takdirde "401 Yetkilendirme Gerekiyor" hatası alırsınız.

Nginx'te İsme Dayalı Sanal Ana Bilgisayarlar (Sunucu Blokları) Nasıl Kurulur

Sunucu bağlamı, birden fazla alanın/sitenin aynı fiziksel makinede veya sanal özel sunucuda (VPS) saklanmasına ve buradan sunulmasına olanak tanır. Her site/etki alanı için http bağlamı içinde birden fazla sunucu bloğu (sanal ana bilgisayarları temsil eden) bildirilebilir. Nginx, aldığı istek başlığına göre hangi sunucunun bir isteği işleyeceğine karar verir.

Bu konsepti, her biri belirtilen dizinde bulunan aşağıdaki sahte alan adlarını kullanarak göstereceğiz:

  • Wearelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

Daha sonra, her site için dizine uygun izinleri atayın.

sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Şimdi her public_html dizininde örnek bir index.html dosyası oluşturun.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

Daha sonra, /etc/httpd/conf.d dizini içindeki her site için sunucu bloğu yapılandırma dosyalarını oluşturun.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf

wearelinux-console.net.conf dosyasına aşağıdaki sunucu bloğu bildirimini ekleyin.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Daha sonra, welovelinux.com.conf dosyasına aşağıdaki sunucu bloğu bildirimini ekleyin.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Son değişiklikleri uygulamak için Nginx web sunucusunu yeniden başlatın.

sudo systemctl restart nginx

ve web sunucunuzu yukarıdaki adreslere yönlendirmeniz, sahte alanların ana sayfalarını görmenizi sağlayacaktır.

http://wearelinux-console.net
http://welovelinux.com

Önemli: SELinux'u etkinleştirdiyseniz, varsayılan yapılandırması Nginx'in iyi bilinen yetkili konumlar dışındaki dosyalara (ör. Yapılandırmalar için /etc/nginx, günlükler için /var/log/nginx, web dosyaları için /var/www/html vb.) .

Bunu SELinux'u devre dışı bırakarak veya doğru güvenlik içeriğini ayarlayarak halledebilirsiniz. Daha fazla bilgi için şu kılavuza bakın: Nginx Plus web sitesinde Nginx ve Nginx Plus'ı SELinux ile kullanma.

Nginx ile SSL Nasıl Kurulur ve Yapılandırılır

SSL sertifikaları sitenizde güvenli http'yi (HTTPS) etkinleştirmenize yardımcı olur; bu, son kullanıcılarla sunucunuz arasında, sitenizdeki bilgileri şifreleyerek güvenilir/güvenli bir bağlantı kurmanız için gereklidir. sitenize, sitenizden veya sitenizin içinden iletilir.

Kendinden imzalı bir sertifikanın nasıl oluşturulup kurulacağını ve bir sertifika yetkilisinden (CA) SSL sertifikası almak için bir sertifika imzalama isteğinin (CSR) nasıl oluşturulacağını ele alacağız, Nginx ile kullanmak için.

Kendinden imzalı sertifikaların oluşturulması ücretsizdir ve test amacıyla ve yalnızca dahili LAN hizmetleri için pratik olarak kullanıma uygundur. Herkese açık sunucular için, orijinalliğini korumak amacıyla CA tarafından verilen bir sertifikanın (örneğin Let's Encrypt) kullanılması önemle tavsiye edilir.

Kendinden imzalı bir sertifika oluşturmak için öncelikle sertifikalarınızın saklanacağı bir dizin oluşturun.

sudo mkdir /etc/nginx/ssl-certs/

Daha sonra openssl komut satırı aracını kullanarak kendinden imzalı sertifikanızı ve anahtarı oluşturun.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

Yukarıdaki komutta kullanılan seçenekleri kısaca açıklayalım:

  • req -X509 – bir x509 sertifikası oluşturduğumuzu gösterir.
  • -nodes (NO DES) – “anahtarı şifrelemeyin” anlamına gelir.
  • -days 365 – sertifikanın geçerli olacağı gün sayısını belirtir.
  • -newkey rsa:2048 – RSA algoritması kullanılarak oluşturulan anahtarın 2048 bit olması gerektiğini belirtir.
  • -keyout /etc/nginx/ssl-certs/nginx.key – RSA anahtarının tam yolunu belirtir.
  • -out /etc/nginx/ssl-certs/nginx.crt – sertifikanın tam yolunu belirtir.

Daha sonra, sanal ana bilgisayar yapılandırma dosyanızı açın ve 443 bağlantı noktasını dinleyen sunucu bloğu bildirimine aşağıdaki satırları ekleyin. /etc/nginx/conf.d/wearelinux-console.net.conf sanal ana bilgisayar dosyasıyla test yapacağız.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

Daha sonra nginx konfigürasyon dosyasına ssl direktifini ekleyin, aşağıdakine benzer görünmelidir.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Şimdi Nginx'i yeniden başlatın ve tarayıcınızı aşağıdaki adrese yönlendirin.

https://www.wearelinux-console.net

Bir CA'dan SSL sertifikası satın almak istiyorsanız gösterildiği gibi bir sertifika imzalama isteği (CSR) oluşturmanız gerekir.

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

Ayrıca mevcut bir özel anahtardan da bir CSR oluşturabilirsiniz.

sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Daha sonra, CA imzalı bir SSL sertifikası verilmesini istemek için oluşturulan CSR'yi bir CA'ya göndermeniz gerekir. Sertifikanızı CA'dan aldıktan sonra yukarıda gösterildiği gibi yapılandırabilirsiniz.

Ayrıca Okuyun: Nginx Web Sunucusunun Güvenliğini Sağlamak, Güçlendirmek ve Performansını Artırmak için Temel Kılavuz

Özet

Bu yazımızda Nginx nasıl kurulacağını ve yapılandırılacağını anlattık; web sunucusu ile istemci arasındaki veri aktarımını güvenli hale getirmek için SSL ile isme dayalı sanal barındırmanın nasıl kurulacağını anlattı.

Nginx kurulum/yapılandırma süreciniz sırasında herhangi bir aksaklık yaşadıysanız veya herhangi bir sorunuz veya yorumunuz varsa bize ulaşmak için aşağıdaki geri bildirim formunu kullanın.