LoginSignup
0
0

Cockpitをリバースプロキシ(Apache)の配下で使えるようにする

Last updated at Posted at 2023-12-23

はじめに

LinuxをWeb上にて各種設定をするための便利なツールとしてcockpitがあります.そのcockpitについてリバースプロキシを踏み台にして活用する方法を示します.ただし,リバースプロキシはApacheを用いるものとして説明します.

それにあたっては,
(1) Cockpitをリバースプロキシの配下で使えるようにする
(2) Reverse Proxy setup for Cockpit with Apache (in a sub directory)
(3) Cant proxy from apache. #8647
を参考にしております.

なお,almalinux 9 である自環境にて動作を確認しましたが,すべての環境での動作は保障いたしませんので,悪しからずご了承ください.

前提条件

(1) cockpitが使える状態とします.
(2) apacheでSSL通信が可能であるものとします.
(3) 文中のサーバ名はsrv.hoge.comとします.
(4) URLにおけるドメインもsrv.hoge.comとします.
(5) confファイルの編集にはviとかemacsなどのエディタが使えるものとします.

設定方法

cockpit.conf

管理者権限にて /etc/cockpit/cockpit.conf を編集します.

# vi /etc/cockpit/cockpit.conf

それによって,アクセス先を
https://srv.hoge.com:9090/
から
https://srv.hoge.com:9090/cp/
に変更する役割を持たせます.

何もないようであれば新規編集となるし,そうでなければ追加になるでしょう.

/etc/cockpit/cockpit.conf
# 新規編集
[WebService]
Origins = https://srv.hoge.com https://srv.hoge.com:9090
ProtocolHeader = X-Forwarded-Proto
AllowUnencrypted = true
UrlRoot = /cp/

UrlRoot = /cp/ の部分は各自お好みで変えて下さい.ただし,以下の部分も整合が必要です.

リバースプロキシ

管理者権限にて/etc/httpd/conf.d/cockpit.conf を編集します.

# vi /etc/httpd/conf.d/cockpit.conf

ここでは,
https://srv.hoge.com:9090/cp/

https://srv.hoge.com/cp/
としてアクセス可能にするため,apacheによってreverse proxyを立てることとします.

/etc/httpd/conf.d/cockpit.conf
<IfModule mod_ssl.c>
  <VirtualHost *:443>
     ServerName srv.hoge.com
     SSLEngine On

     # Set the path to SSL certificate
     SSLCertificateKeyFile /etc/letsencrypt/live/srv.hoge.com/srv.key
     SSLCertificateFile /etc/letsencrypt/live/srv.hoge.com/srv.pem
     SSLCertificateChainFile /etc/letsencrypt/live/srv.hoge.com/chain.cert
     # 上記のcertificateに関する3行は各自の環境に合わせてお書き換えください.

     SSLProxyEngine On
     SSLProxyVerify none
     SSLProxyCheckPeerCN Off
     SSLProxyCheckPeerName Off
     SSLProxyCheckPeerExpire Off
     ProxyPreserveHost On
     ProxyRequests Off

     ProxyPass /cockpit/socket wss://srv.hoge.com:9090/cockpit/socket
     ProxyPassReverse /cockpit/socket wss://srv.hoge.com/cockpit/socket

     ProxyPass "/cp/" "https://srv.hoge.com:9090/cp/"
     ProxyPassReverse "/cp/" "https://srv.hoge.com/cp/"

   </VirtualHost>
</IfModule>

srv.hoge.comと書いている部分は各自の環境で修正してください.

/etc/cockpit/cockpit.conf において UrlRoot=/cp/ の cp を別名にした場合は /etc/httpd/conf.d/cockpit.conf における /cp/ の部分も同じく修正してください.

追記(2024/01/14)

上記の方法で私の場合ですと不具合が見つかりましたので,記事:Proxying Cockpit over Apache with LetsEncryptのなかほど,「Set up Apache Reverse Proxy in a Subdirectory」の部分を参考にしたところ,以下の書き方が安定しているように感じます.(あくまでも自分のマシンに対してですが)

# 新規作成
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so


<IfModule mod_ssl.c>
	  <VirtualHost *:443>
		SSLProxyEngine          On
                # required module
                RewriteEngine           On
                # required module
                ProxyPreserveHost       On
                # required
                ProxyRequests           Off
                # RECOMMENDED, disables forwarding, see https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxyrequests
                ProxyErrorOverride      Off
                # if possible, present cockpit's error pages instead of apache's
                SSLProxyVerify optional_no_ca
                # cockpit has a self-signed cert by default, therefore no CA
                SSLProxyCheckPeerCN Off
                # SSL error without this
                SSLProxyCheckPeerName Off
                # SSL error without this
                SSLProxyCheckPeerExpire Off
                # recommended since potential SSL error without this
                RequestHeader set "X-Forwarded-Proto" "https"
                # required by cockpit.conf
                # following is adapted from https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
                RewriteCond %{HTTP:Upgrade} websocket [NC]
                RewriteCond %{HTTP:Connection} upgrade [NC]
                RewriteRule "^/cp/(.*)" "wss://127.0.0.1:9090/cp/$1" [P,L]
                # when websocket in upgrade AND
                # within UrlRoot, rewrite proxy with wss://
                RewriteCond ${HTTP:Upgrade} !=websocket [NC]
                RewriteRule "^/cp/(.*)" "https://127.0.0.1:9090/cp/$1" [P,L]
                # when no websocket upgrade AND
                # within UrlRoot, rewrite proxy with https://
        </VirtualHost>
</IfModule>

2024/01/14追記:ここまで

その後の仕上げ

以下のコマンドを管理者権限にて打ちます.

# systemctl restart cockpit
# systemctl restart httpd

または

# systemctl restart cockpit httpd

でも良いでしょう.

動作確認

ブラウザにてURLを https://srv.hoge.com/cp/ として,cockpitの画面がでるかどうかを確認します.
スクリーンショット 2023-12-23 185114.png
このような画面が表示されれば設定は成功です.

注意

この設定を行うと,不特定多数に表示する危険性があるため,アクセス制限を行うなどの工夫が必要ではないかと思われます.
また,リバースプロキシにおいては,apacheよりもnginxやsquidを用いる場合が多いので,この記事はあくまでもapacheを用いる場合を対象としています.

参考

(1) Cockpitをリバースプロキシの配下で使えるようにする
(2) Reverse Proxy setup for Cockpit with Apache (in a sub directory)
(3) Cant proxy from apache. #8647

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0