CS1.6 のカスタムマップをサーバから高速にダウンロードさせる設定をしてみました。
CS1.6 では、デフォルトで sv_allowdownload という CVAR があり、クライアントが持っていないファイルをサーバからゲームサーバ経由でダウンロードする機能がついていますが、帯域が非常に狭く、ダウンロードするのに非常に時間がかかってしまいます。目安としては先ほどテストしたところ、8MB のファイルのダウンロードに 5 分以上かかっていました。
ところが、ウェブサーバ経由でファイルをダウンロードさせると、帯域の制限なしにファイルを送信できるので、高速にダウンロードできるようになります。ウェブサーバ経由でのダウンロードには、sv_downloadurl という CVAR を使い、その値に cstrike ディレクトリを設定します。

ゲームサーバで使うカスタムマップファイルは、ゲームサーバとは別にホスティングして利用することを考えましたが、新たなマップを追加したり削除したりする際に、ファイルホスティングしている方も同期させるのが運用上手間になるため、今回はサブドメインに hlds という VirtualHost を立てて、そこに cstrike 以下が見られるように設定しました。cstrike 以下には server.cfg があるため、ゲームサーバのパスワードや rcon パスワードが見られてしまうため、隠蔽する必要があります。そこで、空の document root を作り、そこからの alias で必要なディレクトリが見られるようにしました。Apache の設定は以下のとおりです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<VirtualHost *:80>
    ServerName hlds.vaduz.tk
    DocumentRoot /var/www/hlds
    Alias /maps /usr/games/hlds/cstrike/maps
    Alias /models /usr/games/hlds/cstrike/models
    Alias /gfx /usr/games/hlds/cstrike/gfx
    Alias /overviews /usr/games/hlds/cstrike/overviews
    Alias /sound /usr/games/hlds/cstrike/sound
    <Directory /var/www/hlds/>
        AllowOverride All
        order deny,allow
        deny from all
        allow from all
    </Directory>
</VirtualHost>

Apache からでもアクセスできるように該当のディレクトリのオーナーを確認してください。
また、ファイルの中にはパーミッションが正しく設定されていない場合があるので、注意してください。
今回は一括で以下のコマンドで変更しました。

1
2
find /usr/games/hlds -type f -print0 | xargs -0 chmod 644
find /usr/games/hlds -type d -print0 | xargs -0 chmod 755

ウェブサーバからカスタムマップをダウンロードする設定が整いました。
ゲームサーバの設定を変更して、ウェブサーバ経由でファイルをダウンロードするように変更します。
server.cfg を以下のように変更します。

1
2
sv_allowdownload 0
sv_downloadurl "http://hlds.vaduz.tk/"

sv_allowdownload が有効のままだとウェブサーバ経由にならないので、オフにします。
sv_downloadurl は ” でクオートして、127 バイト以内に収めます。

設定後、試しにサーバに入ってみると、ほぼ一瞬でダウンロードが終了しました。
通常ファイルがない場合はサーバに入ることができないため、ないマップをダウンロードして、Steam フォルダに展開して・・・という手間が要らずに直接入ることができます。クライアントにとってもサーバに入る際の敷居が低くなるでしょう。

これは個別の問題ですが、de_russka を使用する際に、

1
cannnot continue without models/de_russka_tree_noleaves.mdl

というエラーがでてしまうことがあります。
ファイル自体は

1
models/de_russka/russka_tree_noleaves.mdl

にありますが、見ているディレクトリが違うようで、正しくダウンロードできません。
結構利用されているマップなので、透過的にダウンロードできるようにシンボリックリンクを貼っておきました。

1
2
cd /usr/games/hlds/cstrike/models
ln -s de_russka/russka_tree_noleaves.mdl de_russka_tree_noleaves.mdl
11月 162008
 

ウェブサイトのパフォーマンスを測定するツール YSlow を使ってこのブログのパフォーマンスチューニングをしてみました。
必要なツールは

の 3 つをインストールします。
何も対策していない状態での Performance Grade は D でした。
対策したのは評価 F だった以下の 4 つ

  • 2. Use a CDN
  • 3. Add an Expires header
  • 4. Gzip components
  • 13. Configure ETags

2. Use a CDN

根本的な対策になってませんが、Firefox の設定でこのドメインを CDN として設定してしまいます。

  1. Firefox のアドレスバーに about:config を入れて開きます
  2. 右クリックして新規作成から新しい文字列を選択します
  3. 設定名を extensions.firebug.yslow.cdnHostnames とします
  4. CDN のホスト名をカンマ区切りで入力します。vaduz.tk など

これで評価が A になります。

3. Add an Expires header, 13. Configure ETags

この二つは同じなので一緒に解説します。
httpd.conf に ETags を利用する設定を追加します。

1
2
3
4
5
6
7
8
LoadModule expires_module modules/mod_expires.so
ExpiresActive On
FileETag None
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"

適切な場所に追加したら設定を再読込します。

$ /etc/init.d/httpd reload

これで両方とも評価は A になります。

4. Gzip components

Apache の mod_deflate モジュールを使って HTTP 通信を圧縮します。
/etc/httpd/conf.d/deflate.conf を下記のように設定しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
# DEFLATEの有効化
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
 
# 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮
BrowserMatch ^Mozilla/4 gzip-only-text/html
 
# 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない
BrowserMatch ^Mozilla/4\.0[678] no-gzip
 
# 送信先ブラウザがMSIEの場合は全て圧縮する
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
 
# プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しないようにする
Header append Vary User-Agent env=!dont-vary

これで評価 A になりました。

総合で A(97) になりました。

© 2011 vaduz.tk blog Suffusion theme by Sayontan Sinha