Apache 2.2をインストールします。今回はやらないけど、webサーバの世界では最近nginxが伸びてるみたいだね。
# yum install httpd
起動と自動起動。ただし一通りの設定が完了してから。
# service httpd start
# chkconfig httpd on
起動中に設定変更したら再起動が必要です。
# service httpd restart
ドメイン管理ユーザ
ドメインごとに管理するユーザを分けます。普通にユーザを作成すると自分のホームディレクトリより上の階層に行けてしまうので、chrootを使って行けないようにします。
グループ作成。
# groupadd sftpgroup
グループに所属するユーザにchrootを適用します。
# vi /etc/ssh/sshd_config
サブシステム変更
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
グループと行ける範囲を末尾に追加
Match group sftpgroup
ChrootDirectory ~
ForceCommand internal-sftp
sshdを再起動します。SSHの設定が変わるので、ミスってたらサーバに接続できなくなります。要チェック!
# service sshd restart
あとはユーザを作成していけば /home/hoge/ がルートディレクトリになります。
ユーザ作成
# useradd -g sftpgroup hoge
# passwd hoge
ホームディレクトリの所有者をrootにする
# chown root:root /home/hoge
# chmod 755 /home/hoge
ディレクトリ作成とパーミッション変更
# mkdir /home/hoge/public_html
# chmod 777 /home/hoge/public_html
バーチャルホスト
1台のサーバで複数のドメインを運用したいので、バーチャルホストの設定をします。
# vi /etc/httpd/conf/httpd.conf
この行のコメントアウトを外す
NameVirtualHost *:80
ホスト設定を追加(1)
<VirtualHost *:80>
ServerAdmin webmaster@www????.sakura.ne.jp
DocumentRoot /var/www/html
ServerName www????.sakura.ne.jp
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
ホスト設定を追加(2)~(ドメインの数だけ追加する)
<VirtualHost *:80>
ServerAdmin webmaster@hoge.com
DocumentRoot /home/hoge/public_html
ServerName hoge.com
ServerAlias www.hoge.com
ErrorLog logs/hoge.com-error_log
CustomLog logs/hoge.com-access_log common
</VirtualHost>
ちなみに記述の通り、(1)にさくらから付与されたサブドメインを置いて、(2)以降に自前のドメイン群を置くようにしています。
別にさくらのサブドメイン使う必要は無いんだけど、IPアドレスや未設定のドメインでアクセスされた時に一番上のVirtualHostが参照されるので、念のため設置してます。別々のドメインで同じサイトが表示されるとSEO的にもまずいし。
公開前にサイトを確認する
DNSを向ける前にサイトを確認したいので、ユーザーディレクトリの設定をします。ユーザー名がhogeの場合、こんなチルダ付のURLで見れるようになります。
http://www????.sakura.ne.jp/~hoge/
# vi /etc/httpd/conf/httpd.conf
#UserDir disabled
UserDir public_html
以下のコメントアウトを外してOptionsの中身を見直す
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews SymLinksIfOwnerMatch
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
SSL
OpenSSLは既に入っているので、mod_sslをインストールします。
# yum install mod_ssl
SSLを使用するドメインを追加します。
# vi /etc/httpd/conf.d/ssl.conf
以下を追加
<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLInsecureRenegotiation on
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
ServerAdmin webmaster@hoge.com
DocumentRoot /home/hoge/public_html
ServerName hoge.com
ServerAlias www.hoge.com
ErrorLog logs/hoge.com-error_log
CustomLog logs/hoge.com-access_log common
</VirtualHost>
SSLサーバ証明書(有料)が必要なんだけど、自分が使うだけなので無しで行きます。ブラウザが警告を出すけど無視してページ開けます。ほんとは良くないんだけどね。
gzipで圧縮
前に.htaccessでやっていた転送データをgzip圧縮する方法ですが、今回はこちらに書きます。これで転送量が減るね。
# vi /etc/httpd/conf/httpd.conf
以下を追加
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>
htmlファイルアップロード
普通はftpでアップロードするんだけど、セキュリティとか設定の手間とか考えてsftpを使うことにしました。sshの認証を使うのでサーバ側の設定は必要ないし。
FileZillaなどで接続方法をsftpにして、ドメイン管理ユーザのIDパスワードで接続できます。
データは以下のディレクトリに上げていきます。
/home/hoge/public_html/
その他
必要に応じて。
# vi /etc/httpd/conf/httpd.conf
ディフォルト文字コードの指定コメントアウト(文字化けする場合)
#AddDefaultCharset UTF-8
ログのIPをホスト名に変換(重くなるけど)
HostnameLookups On
しかしApacheの情報ぐぐると、平気で10年以上前のページが上位に出てきて凄いね。