Edited at

Rundeckの前段にnginxを配置してhttps化する

More than 1 year has passed since last update.


はじめに

RundeckはデフォルトだとWebの管理画面はhttpなんだけど、まともに使うならhttps化しておきたい。

いちおう、Rundeck単体でもSSLの設定することは可能っぽいんだけど、

http://rundeck.org/docs/administration/configuring-ssl.html

見るからにちょっと、めんどくさそうで、Rundeck初心者には敷居が高そうである。

ところで、Rundeckの前段にnginxを配置してhttps化する構成なら大体nginxの知識+αでなんとかなりそうなので、nginxでSSL復号化する構成にしてみる。


RundeckのSSL復号化をnginxにオフロードする

前段のnginxでSSL復号化する構成については、公式wikiに以下のような簡単な説明があるんだけど、

https://github.com/rundeck/rundeck/wiki/FAQ#can-i-do-ssl-offloading


Yes, If you have load balancer or reverse proxy, you can let them handle SSL and just do http between them and RunDeck servers:

* Set up RunDeck as http

* in profile file, add option -Drundeck.jetty.connector.forwarded=true to RDECK_JVM

* Set framework.rundeck.url and grails.serverURL to use https


簡単すぎである。

これを読み解いて何を言ってるかを理解したので、補足説明しておく。



  • Set up RunDeck as http


これは、読んだまま、普通にhttpの構成として、Rundeckをセットアップする。



  • in profile file, add option -Drundeck.jetty.connector.forwarded=true to RDECK_JVM


これは /etc/rundeck/profileRDECK_JVM という起動オプションを設定している変数があるので、 それに -Drundeck.jetty.connector.forwarded=true を追加しろということ。

...

RDECK_JVM="-Djava.security.auth.login.config=$JAAS_CONF \
-Dloginmodule.name=$LOGIN_MODULE \
-Drdeck.config=$RDECK_CONFIG \
-Drundeck.server.configDir=$RDECK_SERVER_CONFIG \
-Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \
-Drundeck.server.serverDir=$RDECK_INSTALL \
-Drdeck.projects=$RDECK_PROJECTS \
-Drdeck.runlogs=$RUNDECK_LOGDIR \
-Drundeck.config.location=$RDECK_CONFIG/rundeck-config.properties \
-Djava.io.tmpdir=$RUNDECK_TEMPDIR \
-Drundeck.server.workDir=$RUNDECK_WORKDIR \
-Dserver.http.port=$RDECK_HTTP_PORT \
-Drundeck.jetty.connector.forwarded=true"



  • Set framework.rundeck.url and grails.serverURL to use https


これは /etc/rundeck/framework.propertiesframework.rundeck.url のスキームを https にしてねというのと、


/etc/rundeck/framework.properties


...

framework.server.name = localhost
framework.server.hostname = localhost
framework.server.port = 4440
framework.server.url = http://rundeck.example.com:4440
framework.rundeck.url = https://rundeck.example.com


/etc/rundeck/rundeck-config.properties にある grails.serverURL のスキームも https にしてね


/etc/rundeck/rundeck-config.properties

...

# change hostname here
grails.serverURL=https://rundeck.example.com


ということらしい。

あとはnginxのSSLを復号化する設定はこんなかんじ。SSL証明書の作り方とかは割愛。特にRundeck関係ないので知らなければぐぐってくれ。


/etc/nginx/nginx.conf

...

http {
....

server {
listen 443;
set_real_ip_from '10.0.0.0/8';
real_ip_header X-Forwarded-For;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;

ssl on;
ssl_certificate /etc/nginx/keys/server.crt;
ssl_certificate_key /etc/nginx/keys/server.key;

server_name rundeck.example.com;
....

location / {
proxy_pass http://rundeck:4440;
}
}
}


これで https://rundeck.example.com でアクセスできるようになった。