lycheejam's tech log

チラ裏のメモ帳 | プログラミングは苦手、インフラが得意なつもり。

ApacheのReverse proxy設定

概要

ApacheのProxy機能を使って任意のURLに転送します。

GitBucketとRedmineを同じサーバー上で動かしていろいろ実験したいなと思ったんですがURLに:8080って付いてるのもなんかなーってことで
ひと手間加えてあげないと出来なかったので備忘録です。

redmineを動かすためにapacheがport80番ですでに動いていますがgitbucketをport80番で起動するとgitbucket.warに組み込まれてるjettyが競合して起動出来ません。
なのでApacheの機能であるReverse proxyを設定してport8080で起動してるけどhttp://xxx.xxx.xxx.xxx/gitbucketでもgitbucketにアクセスできるようにします。

前回の続きです。
kitigai.hatenablog.com

前提

OSはMinimalインストール
Redmineは公式インストールガイドそのままでインストール
URLはhttp://xxx.xxx.xxx.xxx/redmineに設定

httpd.confの編集

Reverse proxyの設定を行うためにhttpd.confを編集します。
設定内容はGitBucketのwikiに書いてあるのでそのままコピペします。

# vi /etc/httpd/conf/httpd.conf

以下の内容をそのまま追記します。場所はどこでもいいと思います。(httpd.confのことよくわかってないです...)
今回は最後のIncludeOptional手前に入れました。
localhostIPアドレスに書き換えてます。

AllowEncodedSlashes NoDecode # ... or "On" for Apache-2.2
ProxyPreserveHost On
ProxyPass /gitbucket http://localhost:8080/gitbucket
ProxyPassReverse /gitbucket http://localhost:8080/gitbucket

httpd.confのチェック

configtestで構文チェックを行います。

# service httpd configtest
AH00526: Syntax error on line 351 of /etc/httpd/conf/httpd.conf:
AllowEncodedSlashes takes one argument, Allow URLs containing '/' encoded as '%2F'

エラーが出ました。ここでハマりました。

修正

ハマっていろいろ試しましたがエラーの通り大人しくAllowEncodedSlashesコメントアウトします。

# vi /etc/httpd/conf/httpd.conf

以下の通りコメントアウトし修正

# AllowEncodedSlashes NoDecode # ... or "On" for Apache-2.2
ProxyPreserveHost On
ProxyPass /gitbucket http://192.168.0.5:8080/gitbucket
ProxyPassReverse /gitbucket http://192.168.0.5:8080/gitbucket
# service httpd configtest
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK

Syntax OK」おっけーと言われました。
エラーが出ていますが修正してもよし、無視してもよしです。今回の場合、問題ありません
修正する場合は下記を参照

gitbucket.serviceファイルの修正

前回GitBucketの自動起動設定をする際に.serviceファイルを作成しているのでそれを修正します。

# vi /usr/lib/systemd/system/gitbucket.service

--port=8080 --prefix=/gitbucketを追加します。

[Unit]
Description=Git hosting service

[Service]
User=root
ExecStart=/usr/bin/java -jar /root/gitbucket.war --port=8080 --prefix=/gitbucket

[Install]
WantedBy=multi-user.target

変更を反映させるために再読込します。

# systemctl daemon-reload

再起動

お遊びサーバーなのでOSごとrebootかけるほうが手っ取り早いんですが
トライアンドエラーやりまくっているときはそんな面倒なことやってられません

# systemctl restart httpd.service
# systemctl restart gitbucket.service

restartかける

確認

http://xxx.xxx.xxx.xxx/gitbbucketにアクセス
statusで確認したほうが早い)

参考サイト様

記事中で紹介させて頂いたサイト(記事)様

雑感

Apacheっていろんな機能あるんすね...