Bir Nginx Ters Proxy kullanarak SSL ile Jenkins Yapılandırma

Bu öğreticinin önceki bir sürümü Melissa Anderson tarafından yazılmıştır.

Giriş

Varsayılan olarak, Jenkins, başlangıç ​​için uygun olan 8080 bağlantı noktasını dinleyen kendi yerleşik Winstone web sunucusuyla birlikte gelir. Bununla birlikte, web arayüzü aracılığıyla iletilen şifreleri ve hassas verileri korumak için Jenkins'i SSL ile güvenli hale getirmek de iyi bir fikir.

Bu öğreticide, Nginx'i istemci isteklerini Jenkins'e yönlendirmek için bir ters proxy olarak yapılandıracaksınız.

Ön şartlar

Başlamak için aşağıdakilere ihtiyacınız olacak:

  • Ubuntu 18.04 ilk sunucu kurulum kılavuzunu izleyerek, bir kök dışı sudo kullanıcısı ve güvenlik duvarı ile yapılandırılmış bir Ubuntu 18.04 sunucusu.
  • Jenkins, Ubuntu'da Jenkins'i Kurma adımlarını izleyerek 18.04'ü yükledi.
  • Nginx, Ubuntu'da Nginx Nasıl Kurulur? Adımlarını izleyerek 18.04 tarihinde kuruldu.
  • Let's Encrypt tarafından sağlanan bir alan adına ait bir SSL sertifikası. Bu sertifikayı almak için Ubuntu 18.04'te Let's Encrypt ile Nginx'in Nasıl Güvenli Olduğunu izleyin. Sahip olduğunuz veya kontrol ettiğiniz kayıtlı bir alan adına ihtiyacınız olacağını unutmayın. Bu eğitici, example.com alan adını kullanacaktır.

1. Adım – Nginx'i Yapılandırma

Önkoşul eğitiminde Ubuntu /etc/nginx/sites-available/example.com Let's Encrypt ile /etc/nginx/sites-available/example.com konusunda /etc/nginx/sites-available/example.com dosyasında SSL kullanacak şekilde yapılandırdınız. Ters proxy ayarlarınızı eklemek için bu dosyayı açın:

  • sudo nano /etc/nginx/sites-available/example.com

SSL yapılandırma ayarlarına sahip server bloğunda, Jenkins'e özgü erişim ve hata günlüklerini ekleyin:

/etc/nginx/sites-available/example.com. . .
server {
. . .
# SSL Configuration
#
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
. . .
}

Ardından proxy ayarlarını yapılandıralım. Tüm istekleri Jenkins'e gönderdiğimiz için, varsayılan try_files satırını, aksi takdirde isteğin Jenkins'e ulaşmasından önce 404 hatası döndürecek olan yorumunu yapacağız:

/etc/nginx/sites-available/example.com. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404; }
. . .

Şimdi şunları içeren proxy ayarlarını ekleyelim:

  • proxy_params : /etc/nginx/proxy_params dosyası Nginx tarafından sağlanıyor ve ana makine adı, istemci isteğinin protokolü ve istemci IP adresi gibi önemli bilgilerin /etc/nginx/proxy_params dosyalarında /etc/nginx/proxy_params saklanmasını sağlıyor.
  • proxy_pass : Bu, proxy sunucusunun protokolünü ve adresini ayarlar; bu durumda, 8080 portunda localhost üzerinden erişilen Jenkins sunucusu olacaktır.
  • proxy_read_timeout : Bu, proxy_read_timeout 60 saniye varsayılanından Jenkins tarafından önerilen 90 saniyelik değere kadar bir artış sağlar.
  • proxy_redirect : Bu, yanıtların doğru ana bilgisayar adını içerecek şekilde yeniden yazılmasını sağlar.

Aşağıdaki proxy_redirect satırında example.com için SSL güvenli alan adınızı değiştirdiğinizden emin olun:

/etc/nginx/sites-available/example.comLocation /
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include /etc/nginx/proxy_params;
proxy_pass http://localhost:8080;
proxy_read_timeout 90s;
# Fix potential "It appears that your reverse proxy setup is broken" error.
proxy_redirect http://localhost:8080 https://example.com;

Bu değişiklikleri yaptıktan sonra, dosyayı kaydedin ve düzenleyiciden çıkın. Jenkins'i konfigüre ettikten sonra Nginx'i yeniden başlatmaya devam edeceğiz, ancak yapılandırmamızı şimdi test edebiliriz:

  • sudo nginx -t

Her şey yolundaysa, komut geri dönecektir:

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Değilse, test edilene kadar rapor edilen hataları düzeltin.

Not:
Eğer proxy_pass yanlış yapılandırıyorsanız (örneğin, bir eğik çizgi ekleyerek), Jenkins Yapılandırma sayfanızda aşağıdakine benzer bir şey elde edersiniz.

Bu hatayı görüyorsanız, proxy_pass ve proxy_redirect ayarlarınızı Nginx yapılandırmasında proxy_redirect kontrol edin.

Adım 2 – Jenkins'i Yapılandırma

Jenkins'in Nginx ile çalışabilmesi için Jenkins konfigürasyonunu güncellemeniz gerekecek, böylece Jenkins sunucusu tüm arayüzlerden ziyade sadece localhost arayüzünde dinleyecektir ( 0.0.0.0 ). Eğer Jenkins tüm arayüzleri dinlerse, orijinal, şifrelenmemiş portunda ( 8080 ) erişilebilir.

Bu ayarlamaları yapmak için /etc/default/jenkins yapılandırma dosyasını değiştirelim:

  • sudo nano / etc / varsayılan / jenkins

JENKINS_ARGS satırını bulun ve mevcut argümanlara --httpListenAddress=127.0.0.1 ekleyin.

/etc/default/jenkins. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"

Dosyayı kaydedin ve çıkın.

Yeni yapılandırma ayarlarını kullanmak için Jenkins'i tekrar başlatın:

  • sudo systemctl yeniden başlat jenkins

systemctl çıkışı göstermediğinden durumu kontrol edin:

  • sudo systemctl durumu jenkins

Active satırdaki active (exited) durumunu görmelisiniz:

Output● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Mon 2018-07-09 20:26:25 UTC; 11s ago
Docs: man:systemd-sysv-generator(8)
Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 29812 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)

Nginx'i yeniden başlat:

  • sudo systemctl restart nginx

Durumu kontrol et:

  • sudo systemctl durumu nginx

Output● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-07-09 20:27:23 UTC; 31s ago
Docs: man:nginx(8)
Process: 29951 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 29963 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 29952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 29967 (nginx)

Her iki sunucu da yeniden başlatıldığında, etki alanını HTTP veya HTTPS kullanarak ziyaret edebilmeniz gerekir. HTTP istekleri otomatik olarak HTTPS'ye yönlendirilecek ve Jenkins sitesi güvenli bir şekilde sunulacak.

Adım 3 – Yapılandırmayı Test Etme

Artık şifrelemeyi etkinleştirdiğinize göre, yönetici şifresini sıfırlayarak yapılandırmayı test edebilirsiniz. Jenkins'e erişebildiğinizi ve HTTPS'ye yönlendirildiğinizi doğrulamak için siteyi HTTP üzerinden ziyaret ederek başlayalım.

Web tarayıcınızda, http://example.com adresini girin ve example.com için alan adınızı değiştirin. ENTER tuşuna bastıktan sonra, URL https ile başlamalı ve konum çubuğu bağlantının güvenli olduğunu göstermelidir.

Kullanıcı Alanında Ubuntu 18.04'e Nasıl Kurulur başlıklı bölümde oluşturduğunuz yönetici kullanıcı adınızı ve Şifre alanında seçtiğiniz şifreyi girebilirsiniz.

Giriş yaptıktan sonra, güvenli olduğundan emin olmak için şifreyi değiştirebilirsiniz.

Ekranın sağ üst köşesindeki kullanıcı adınızı tıklayın. Ana profil sayfasında, sayfanın sol tarafındaki listeden Yapılandır'ı seçin.

Bu, sizi yeni bir şifre girerek yeni bir şifre girebileceğiniz yeni bir sayfaya götürecektir:

Kaydet'e tıklayarak yeni şifreyi onaylayın. Artık Jenkins web arayüzünü güvenle kullanabilirsiniz.

Sonuç

Bu öğreticide, Nginx'i web arayüzünden aktarılan kimlik bilgilerinizi ve diğer bilgilerinizi korumak için Jenkins'in yerleşik web sunucusuna bir ters proxy olarak yapılandırdınız. Artık Jenkins'in güvenli olduğundan, kod değişikliklerini otomatik olarak test etmek için sürekli bir entegrasyon boru hattının nasıl kurulacağını öğrenebilirsiniz. Jenkins'de yeni olup olmadığınızı düşünmeniz gereken diğer kaynaklar Jenkins projesinin "İlk Pipeline Oluşturma" eğitimini veya topluluk tarafından katkıda bulunan eklentiler kütüphanesini oluşturur.

Bir önceki yazımız olan Sicim: String Manipülasyon, Yukarı Seviye başlıklı makalemizi de okumanızı öneririz.

About This Author

Comments are closed

%d blogcu bunu beğendi: