新月 - P2P掲示板

Apacheと朔を組み合わせて使う方法

2005-11-25, 2007-01-05, 2025-03-10

設定ガイドもご覧ください。

Apache httpdのリバースプロキシ機能を使って、 のゲートウェイのURIからポート番号を消してかっこよくします。 RSSを静的生成するので負荷を低くする効果も期待できます。 server.cgi, gateway.cgi の両方をプロキシ経由にする設定と、 gatewat.cgi のみをプロキシ経由にする設定があります。

server.cgi, gateway.cgi の両方をプロキシ経由にする設定

node.shingetsu.info, bbs.shingetsu.info はこの設定です。 あまりメリットは感じていません。

saku.ini:

[Network]
# X-Forwaded-For(XFF)を有効にするので外部からアクセスできないアドレス(FireWallもあるが)
bind_addr: ::1

# 8000をApacheが使えるように
bind_port: 8002

# ApacheのVirtualHost用の名前を/joinなどで名乗る
dnsname: node.shingetsu.info

# Apacheからアクセスが来るときはdnsnameの値ではないため
dnsname_should_match: no

# Apacheの設定するXFFを利用する(他の経路からアクセスされないよう注意)
use_x_forwarded_for: yes

[Gateway]
# bind_addrがIPv6なのでApache経由のアクセスのみを許可
# RSSの静的生成では::1を使うのでadmin扱いされないことも狙っている
admin_net: 127.0.0.1

# admin_netと同じ値
friend_net: %(admin_net)s

# アクセス制限なし
visitor_net: ::/0, 0.0.0.0/0

# ApacheのVirtualHost用の名前をRSSなどで利用
server_name: bbs.shingetsu.info

# Apacheを迂回してアクセスするときのホストとポート
proxy_destination: [::1]:8002

# RSS等で利用するプロトコル
protocol: https

[Path]
# RSSなどの静的生成ファイル置き場
apache_docroot: /srv/www/shingetsu

apache.conf:

# Apacheからは::1でアクセス
RewriteRule ^server.cgi(.*) http://[::1]:8002/server.cgi${escape:$1} [P,NE]
RewriteRule ^(gateway|thread).cgi(.*) http://[::1]:8002/$1.cgi${escape:$2} [P,NE]

# 管理アクセス用の設定を別のところに書く
# 127.0.0.1 を詐称することでadminとしてアクセスできるようにする
ProxyAddHeaders Off
RewriteCond %{REMOTE_ADDR} ^(.*)$
RewriteRule . - [env=remoteaddr:%1]
RequestHeader set X-Forwarded-For "%{remoteaddr}e, 127.0.0.1"
RewriteRule ^(admin|gateway|thread).cgi(.*) http://[::1]:8002/$1.cgi${escape:$2} [P,NE]

設定全体はこちら:

Apacheでは以下のモジュールを有効にしておきます。

上の設定例ではApache経由でしか管理できないようにしていますが、 bind_addrを指定せずadmin_netにプライベートIPアドレスを入れる方法もあります。 その場合はApacheの設定で管理用のXFFを設定する必要はありません。 RSSの静的生成をするならばadmin扱いされないように注意が必要です。

上の設定例では静的ファイルはプロキシしないようにRewriteRuleを使っていますが ProxyPassを使って全部プロキシすることも可能です。

gateway.cgi のみをプロキシ経由にする設定

node.shingetsu.info, bbs.shingetsu.info で以前使っていたのがこの設定です。 設定サンプルを作るためにserver.cgiも対象にしてそのままになっています。

saku.ini:

[Gateway]
# 管理できるのはApache経由のアクセスと、直にアクセスした場合
admin_net: ::1, 127.0.0.1

# admin_netと同じ値
friend_net: %(admin_net)s

# サーバーのグローバルIPアドレスを設定
visitor_net: ::2001:db8::1, 192.0.2.1

# ApacheのVirtualHost用の名前をRSSなどで利用
server_name: bbs.shingetsu.info

# Apacheを迂回してアクセスするときのホストとポート
proxy_destination: bbs.shingetsu.info:8000

# RSS等で利用するプロトコル
protocol: https

[Path]
# RSSなどの静的生成ファイル置き場
apache_docroot: /srv/www/shingetsu

apache.conf:

# ApacheからはグローバルIPアドレスでアクセス
RewriteRule ^(gateway|thread).cgi(.*) http://bbs.shingetsu.info:8000/$1.cgi${escape:$2} [P,NE]

# 管理アクセス用の設定を別のところに書く
RewriteRule ^(admin|gateway|thread).cgi(.*) http://[::1]:8000/$1.cgi${escape:$2} [P,NE]

server.cgiもプロキシ経由にする設定ですが参考までに:

Apacheでは以下のモジュールを有効にしておきます。

X-Forwarded-For(XFF)を利用しないことに注目してください。 thread.cgiへのアクセスはサーバーのグローバルIPアドレスになります。 朔のアクセスログにはXFFの値も記録されます。

上の設定例ではApache経由でも管理できるようにしていますが、 localhostからアクセスする方法や、 admin_netにプライベートIPアドレスを入れて直接アクセスする方法もあります。 その場合はApacheの設定で管理用のRewriteRuleを設定する必要はありません。 RSSの静的生成をするならばadmin扱いされないように注意が必要です。

上の設定例では静的ファイルはプロキシしないようにRewriteRuleを使っていますが ProxyPassを使って全部プロキシすることも可能です。

RSSとサイトマップの静的生成

の2.0.0以降に同梱されている mkrss.pyをcronで定期的(1時間に1回くらい)に動かします。 デフォルトでは /usr/local/lib/saku/mkrss にインストールされます。 設定例はAnsibleの設定ファイルをご覧ください。

Copyright© 2003-2025 shinGETsu Project. All Rights Reserved.
webmaster@shingetsu.info (Legal Notices)