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年以上前のページが上位に出てきて凄いね。