Ana içeriğe geç

Yucca önünde Nginx + Let's Encrypt ters proxy kurulumu

Giriş

Bu kılavuzda, otomatik olarak yenilenecek bir Let's Encrypt SSL sertifikası nasıl kurulur ve Nginx nasıl yapılandırılır anlatacağım. Nginx, SSL oturumunu sonlandırmak ve 80 numaralı porttan 443 numaralı porta yönlendirme yapmak için Yucca'nın önünde basit bir web sunucusu olarak görev yapacak.
Yucca kendisi de SSL'i sonlandırabiliyorken ve hatta bunun için bayrakları varken neden Nginx kurmalı? Bu doğru, ancak 443 portunu işgal ettiğinizde bu port başka bir yazılım için kullanılamaz hale gelir ve farklı bir port kullanmanız gerekir, ayrıca HTTP'den HTTPS'e yönlendirme de olmaz – bu sizin için sorun değilse, Nginx kurulum ve yapılandırma bölümünü, Adım 1'i güvenle atlayıp doğrudan Adım 2'ye geçebilirsiniz.
Tüm adımları Ubuntu Server 22.04 üzerinde gerçekleştireceğim, ancak her şey SUSE, CentOS, Fedora, Debian ve benzerlerinde de aynı şekilde çalışacaktır. Tek fark, herkesin kendi paket yöneticisine sahip olmasıdır, ancak apt ile zypper'ı ayırt edebileceğinizi umuyorum 🙂

Adım 0. Hazırlık

Şimdi ihtiyacımız olanlar:

  1. Genel bir IP adresine sahip bir host
  2. Bu adrese yönlendirilmiş bir alan adı veya alt alan adı
  3. Kurulu Yucca

Bu kılavuzda foobar.yuccastream.com alan adını kullanacağım, sizin alan adınız farklı olacaktır.

nslookup foobar.yuccastream.com
Server: 127.0.0.53
Address: 127.0.0.53#53

Non-authoritative answer:
Name: foobar.yuccastream.com
Address: 128.140.2.103

nginx1

Yani http://foobar.yuccastream.com:9910 adresinde erişilebilir bir Yucca'm var

Adım 1. Nginx kurulumu ve yapılandırması

nginx'i kuralım:

sudo apt install nginx

http://foobar.yuccastream.com adresini kontrol edelim

nginx2

Ardından Yucca için bir yapılandırma dosyası oluşturalım:

sudo nano /etc/nginx/conf.d/yucca.conf
uyarı

foobar.yuccastream.com alan adını kendi alan adınızla değiştirmeniz gerekir

upstream yucca_upstream {
server 127.0.0.1:9910 fail_timeout=0;
}

server {
listen 80;
server_name foobar.yuccastream.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yucca_upstream;
}
}

Dosyayı kaydedin ve yapılandırmanın doğru olduğunu kontrol edin:

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Her şey doğruysa syntax is ok göreceksiniz nginx yapılandırmasını yeniden yükleyin:

nginx -s reload

Sayfayı yenileyin ve artık http://foobar.yuccastream.com adresinde Yucca web arayüzünü göreceksiniz

nginx3

Adım 2. Certbot kurulumu ve Let's Encrypt sertifikası oluşturma

Paketleri kuralım:

sudo apt install certbot python3-certbot-nginx

Alan adımız için bir sertifika oluşturalım:

uyarı

foobar.yuccastream.com alan adını kendi alan adınızla değiştirmeniz gerekir

sudo certbot --nginx -d foobar.yuccastream.com

nginx4

Certbot sizden bir e-posta (1) isteyecek; gerçek posta kutunuzu girmenizi öneririm, sertifika süresi dolmak üzereyken ve otomatik olarak yenilenemezse Let's Encrypt size bu konuda bir bildirim gönderir. Ayrıca şartlar ve koşulları (2), (3) kabul etmeniz gerekecek. Ardından certbot, gerekli alan adına sahip doğru yapılandırma dosyasını kendisi bulacak, SSL bölümünü ve yönlendirmeyi yapılandıracak ve sonunda size bir bağlantı gösterecek. Sonucun nasıl göründüğünü /etc/nginx/conf.d/yucca.conf dosyasında görebilirsiniz


upstream yucca_upstream {
server 127.0.0.1:9910 fail_timeout=0;
}

server {
server_name foobar.yuccastream.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yucca_upstream;
}

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/foobar.yuccastream.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/foobar.yuccastream.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
if ($host = foobar.yuccastream.com) {
return 301 https://$host$request_uri;
} # managed by Certbot

listen 80;
server_name foobar.yuccastream.com;
return 404; # managed by Certbot
}

certbot'un sertifikayı yenilemek için bir zamanlayıcı oluşturduğundan emin olmanızı öneririm; bu zamanlayıcı etkin olmalıdır:

sudo systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Fri 2023-09-22 11:54:02 UTC; 7min ago
Trigger: Fri 2023-09-22 14:13:25 UTC; 2h 11min left
Triggers: ● certbot.service

Sep 22 11:54:02 foobar systemd[1]: Started Run certbot twice daily.

http://foobar.yuccastream.com sayfasını yenileyin ve artık her şeyin HTTPS üzerinden çalıştığını, yönlendirmenin de çalıştığını göreceksiniz.

nginx5

Adım 3. Güvenlik yapılandırması

nginx üzerinden HTTPS erişimini yapılandırdık, ancak Yucca hâlâ http://foobar.yuccastream.com:9910 adresinde HTTP üzerinden erişilebilir durumda. Bunun nedeni şu varsayılan ayardır:

listen_address = ":9910"

Yucca yapılandırma dosyasına gidin ve bu parametreyi düzenleyin:

sudo nano /opt/yucca/yucca.toml

Yucca'nın yalnızca localhost'u dinlemesini sağlayın:

listen_address = "127.0.0.1:9910"

Ve Yucca sunucusunu yeniden başlatın:

sudo systemctl restart yucca

Kontrol edin, artık http://foobar.yuccastream.com:9910 adresinde hiçbir şey yok, https://foobar.yuccastream.com adresinde ise her şey çalışıyor.