日別アーカイブ: 2014年5月19日

webサーバ(さくらのVPS設定3)

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