Apache のインストール
Apache
Apache のインストール
(1) Apache本体、開発環境
# yum -y install httpd httpd-devel
(2) X-SendFileモジュール
# mkdir /usr/local/src/mod_xsendfile; cd $_
# wget https://tn123.org/mod_xsendfile/mod_xsendfile.c
# /usr/bin/apxs -cia mod_xsendfile.c
Apache の設定を追加する
各設定値は環境に応じて変更してください。
(1) 基本設定
# vi /etc/httpd/conf/httpd.conf
ServerName (サーバ名、IPアドレス)
(2) VirtualHost設定
# vi /etc/httpd/conf.d/shirasagi.conf
<VirtualHost *:80>
ServerName example.jp
DocumentRoot /var/www/shirasagi/public/sites/w/w/w/_/
Alias /assets/ /var/www/shirasagi/public/assets/
# x-sendfile
RequestHeader Set X-Sendfile-Type X-Sendfile
# ELB やセキュリティファイアーウォールなどの後段に配備し、apache httpd が HTTPS を終端しない場合
# RequestHeader Set X-Forwarded-Proto 'https'
XSendFile on
XSendFilePath /var/www/shirasagi
# download .svg files
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} \.svg$
RewriteRule ^.*$ - [L,E=X_attachment]
Header set Content-Disposition attachment env=X_attachment
# download .html files belonging to fs directory
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} /fs/.*\.(htm|html)$
RewriteRule ^.*$ - [L,E=X_attachment]
Header set Content-Disposition attachment env=X_attachment
# static
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -d [OR]
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -s
RewriteRule ^.*$ - [L]
# reverse proxy
AllowEncodedSlashes On
Proxy100Continue Off
ProxyRequests Off
ProxyPass /assets !
ProxyPass / http://127.0.0.1:3000/ nocanon
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
Apache の起動
# apachectl configtest
# systemctl start httpd
# systemctl enable httpd
[ CentOS 6 ]
service httpd start
chkconfig httpd on
SHIRASAGIの設定を変更する(X-SendFile)
# cd /var/www/shirasagi
# vi config/after_initializers/apache_x_sendfile_header.rb
Rails.application.config.action_dispatch.x_sendfile_header = "X-Sendfile"
unicorn の再起動
本番サーバーでは root になり次のコマンドを実行:
$ su -
# systemctl restart unicorn
開発環境では次のコマンドを実行:
$ cd /var/www/shirasagi
$ bundle exec rake unicorn:restart
Unicorn の再起動には 2, 3 分かかる場合があります。
HTTPSサイトとして設定する際の注意点
SSL証明書の指定を行いHTTPSサイトとして設定する際、上記VirtualHost設定のままでは 管理画面からのログインが正常に動作しない場合があります。 これに対処するには Apache からバックエンドのアプリケーションサーバを呼び出す場合、 X_FORWARDED_PROTOヘッダを付与する事で解決します。
設定例)
<VirtualHost *:443>
~
# SSL Certificate
SSLEngine on
SSLProtocol -all +TLSv1.2
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key
SSLCertificateChainFile /path/to/chain.crt
# Add RequestHeader
RequestHeader Set X-Forwarded-Proto 'https'
~
</VirtualHost>
ロードバランサーなどの背後に配備する際の注意点
シラサギ CMS の掲示板など一部の機能には接続元の IP アドレスの拒否設定を持つものがあり、この機能を正しく動作させるには、シラサギが正しく接続元の IP アドレスを知る必要があります。
しかし、ロードバランサーやファイアーウォールの背後に apache httpd を配備した場合、接続元の IP アドレスが、X-Forwarded-For などのヘッダーにセットされ、シラサギからは正しい接続元 IP アドレスを取得できない場合があります。
シラサギでは接続元の IP アドレスを X_REAL_IP ヘッダーから取得していますので、接続元としてもっともらしい IP アドレスを X_REAL_IP ヘッダーへセットするように構成してください。
具体的には接続元の IP アドレスの拒否設定をご利用になる場合、次の手順で設定を確認してください。
- シラサギの管理画面へログインし、接続情報 (/.u/connection) へアクセスします。
- 「接続元IPアドレス」を確認し、正しい接続元 IP が表示されている場合は問題ありません。正しい接続元 IP アドレスが表示されていない場合は、次の手順へ進みます。
- 外部サイト Apache2.2系にmod_remoteipを組み込む などを参考に、mod_remoteip モジュールを有効にし、X-Forwarded-For に設定されている IP アドレスチェーンの中から、接続元としてもっともらしい IP アドレスを X_REAL_IP ヘッダーへセットするように設定を変更します。
- apache httpd を再起動し、手順 1 からやり直してください。