Ubuntu22.04でNginxリバースプロキシを使用してSSLでJenkinsを構成する方法
序章
デフォルトでは、 Jenkins には、ポート8080でリッスンする独自の組み込みWinstoneWebサーバーが付属しており、開始に便利です。 ただし、JenkinsをSSLで保護して、Webインターフェイスを介して送信されるパスワードと機密データを保護することもお勧めします。
このチュートリアルでは、クライアントリクエストをJenkinsに転送するためのリバースプロキシとしてNginxを構成します。
前提条件
開始するには、次のものが必要です。
- Ubuntu 22.04初期サーバーセットアップガイドに従って、root以外のsudo対応ユーザーとファイアウォールで構成された1台のUbuntu22.04サーバー。
- Ubuntu 22.04にJenkinsをインストールする方法の手順に従って、Jenkinsをインストールしました
- Ubuntu 22.04にNginxをインストールする方法の手順に従って、Nginxをインストールしました
- Let'sEncryptによって提供されるドメインのSSL証明書。 この証明書を取得するには、 Ubuntu22.04でLet'sEncryptを使用してNginxを保護する方法に従ってください。 所有または管理している登録済みドメイン名が必要になることに注意してください。 このチュートリアルでは、全体を通してドメイン名example.comを使用します。
ステップ1—Nginxを構成する
前提条件のチュートリアルUbuntu22.04でLet'sEncryptを使用してNginxを保護する方法では、/etc/nginx/sites-available/example.comファイルでSSLを使用するようにNginxを構成しました。 このファイルを開いて、リバースプロキシ設定を追加します。
sudo nano /etc/nginx/sites-available/example.com
SSL構成設定のserverブロックに、Jenkins固有のアクセスログとエラーログを追加します。
/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;
. . .
}
次に、プロキシ設定を構成します。 すべてのリクエストがJenkinsに送信されているため、デフォルトのtry_files行をコメントアウトします。そうしないと、リクエストがJenkinsに到達する前に404エラーが返されます。
/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; }
. . .
次に、次のようなプロキシ設定を追加しましょう。
proxy_params:/etc/nginx/proxy_paramsファイルはNginxによって提供され、ホスト名、クライアントリクエストのプロトコル、クライアントIPアドレスなどの重要な情報が保持され、ログファイルで利用できるようにします。 。proxy_pass:これは、プロキシされたサーバーのプロトコルとアドレスを設定します。この場合、ポート8080のlocalhostを介してアクセスされるJenkinsサーバーになります。proxy_read_timeout:これにより、Nginxのデフォルトの60秒からJenkinsが推奨する90秒の値に増やすことができます。proxy_redirect:これにより、応答が正しく書き換えられ、適切なホスト名が含まれるようになります。
以下のproxy_redirect行で、SSLで保護されたドメイン名をexample.comに置き換えてください。
/etc/nginx/sites-available/example.com
Location /
. . .
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;
これらの変更を行ったら、ファイルを保存してエディターを終了します。 Jenkinsを構成するまで、Nginxの再起動を延期しますが、今すぐ構成をテストできます。
sudo nginx -t
すべてが順調である場合、コマンドは次を返します。
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
そうでない場合は、テストに合格するまで報告されたエラーを修正します。
注: proxy_passの構成を誤った場合(たとえば、末尾にスラッシュを追加するなど)、Jenkinsの構成ページに次のようなものが表示されます。
このエラーが表示された場合は、Nginx構成のproxy_passとproxy_redirectの設定を再確認してください。
ステップ2—Jenkinsを構成する
JenkinsがNginxと連携するには、Jenkinsサーバーがすべてのインターフェイス(0.0.0.0)ではなく、localhostインターフェイスでのみリッスンするようにJenkins構成を更新する必要があります。 Jenkinsがすべてのインターフェイスでリッスンする場合、元の暗号化されていないポート(8080)でアクセスできる可能性があります。
/etc/default/jenkins構成ファイルを変更して、次の調整を行います。
sudo nano /etc/default/jenkins
JENKINS_ARGS行を見つけて、既存の引数に--httpListenAddress=127.0.0.1を追加します。
/ etc / default / jenkins
. . . JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"
ファイルを保存して終了します。
新しい構成設定を使用するには、Jenkinsを再起動します。
sudo systemctl restart jenkins
systemctlは出力を表示しないため、ステータスを確認してください。
sudo systemctl status jenkins
Active行にactive (exited)ステータスが表示されます。
Output● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-04-18 16:35:49 UTC; 2s ago
Main PID: 89751 (java)
Tasks: 44 (limit: 4665)
Memory: 358.9M
CPU: 20.195s
CGroup: /system.slice/jenkins.service
└─89751 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080
Nginxを再起動します:
sudo systemctl restart nginx
ステータスを確認します。
sudo systemctl status 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 2022-04-18 16:36:17 UTC; 7s ago
Docs: man:nginx(8)
Process: 89866 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 89869 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 89870 (nginx)
Tasks: 3 (limit: 4665)
Memory: 4.1M
CPU: 51ms
CGroup: /system.slice/nginx.service
├─89870 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
両方のサーバーを再起動すると、HTTPまたはHTTPSのいずれかを使用してドメインにアクセスできるようになります。 HTTPリクエストは自動的にHTTPSにリダイレクトされ、Jenkinsサイトは安全に提供されます。
ステップ3—構成をテストする
暗号化を有効にしたので、管理者パスワードをリセットして構成をテストできます。 まず、HTTP経由でサイトにアクセスして、Jenkinsに到達でき、HTTPSにリダイレクトされることを確認しましょう。
Webブラウザーで、http://example.comと入力し、ドメインをexample.comに置き換えます。 ENTERを押すと、URLはhttpsで始まり、ロケーションバーに接続が安全であることが示されます。
Ubuntu 22.04 にJenkinsをインストールする方法で作成した管理ユーザー名をユーザーフィールドに入力し、選択したパスワードをパスワードフィールドに入力できます。
ログインしたら、パスワードを変更して安全を確保できます。
画面の右上隅にあるユーザー名をクリックします。 メインプロファイルページで、ページの左側のリストから構成を選択します。
これにより、新しいパスワードを入力して確認できる新しいページに移動します。
保存をクリックして、新しいパスワードを確認します。 これで、JenkinsWebインターフェイスを安全に使用できます。
結論
このチュートリアルでは、NginxをJenkinsの組み込みWebサーバーへのリバースプロキシとして構成し、Webインターフェイスを介して送信される資格情報やその他の情報を保護しました。 Jenkinsが安全になったので、継続的インテグレーションパイプラインをセットアップして、コードの変更を自動的にテストする方法を学ぶことができます。 Jenkinsを初めて使用する場合に考慮すべきその他のリソースは、Jenkinsプロジェクトの「最初のパイプラインの作成」チュートリアルまたはコミュニティ提供プラグインのライブラリです。