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では以下のモジュールを有効にしておきます。
- proxy
- proxy_http
- rewrite
上の設定例では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では以下のモジュールを有効にしておきます。
- proxy
- proxy_http
- rewrite
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の設定ファイルをご覧ください。