カテゴリー別アーカイブ: サーバ設定

NGINXを使う(Proxy利用)

 Webサーバとしては使い慣れていることもあってApacheをずっと使い続けてきたが、細かい設定がしにくいという点があり、今回NGINXを使用することにした。
 ただし、今回はApacheを代替するわけではなく、Proxyとして利用することにした。
 バランシングのテストにはお名前.com VPS(KVM)を3台契約して実装してみた。

 まずは、基本のProxy構成。
 と言っても、何も難しいことはない。

server {
listen 80 default_server;
server_name _;

location / {
proxy_pass http://localhost:10080;
}
}

 これだと、NGINXがポート80で待ち受けて、すべてのリクエストをlocalhostポート10080に送る(Apache等をポート10080で待たせておく)
このままだと何も効果がないから、ここから色々追加していく。

location /php/ {
proxy_pass http://localhost:10080;
}
location /ruby/ {
proxy_pass http://localhost:20080;
}

 こうなると、/phpに来たリクエストは10080に、/rubyに来たリクエストは20080に行くので、apache + passengerを一つの入口で受けられるようになる。 localhostの部分を変えて、192.168.10.10とかにすれば、別サーバに流れていくから、一つの入口からアプリ単位で内部では別サーバで動かすことができる。

 更に、ロードバランシングも簡単に作れる。

upstream appservers {
server 192.168.10.10:80;
server 192.168.10.11:80;
}

server {
listen 80 default_server;
server_name _;

location / {
proxy_pass http://appservers;
}
}

 これで、来たリクエストは192.168.10.10と11に分配される。

 upstream.serverには簡単に重み付けが出来るので、

server 192.168.10.10:80 weight=5;
server 192.168.10.11:80 weight=10;

みたいにすることで、アプリケーションサーバの重み付けができる。

 さらに、スタンバイ構成も簡単で

server 192.168.10.10:80;
server 192.168.10.11:80;
server 192.168.10.12:80 backup;

とすると、10,11が応答しない時だけ12に振り分けることもできる(backupと書かれたサーバが正常時待機系となる) 10,11のいずれかが復帰すればbackupは待機状態に戻る。
VerisgnのSSL証明書はバランシングすると台数分の取得を要求されるが、ホットスタンバイ・コールドスタンバイであれば、同時に動作する台数分で良いのこんなかんじで設定できるのは便利。

 HTTPのgzip圧縮をNGINX側に任せられるので、アプリケーションサーバを本来の処理に専念させることもできる。

server {
listen 80 default_server;
server_name _;

gzip on;

location / {
proxy_pass http://appservers;
}
}

 また、SSL処理もNGINX側で行う事になる。

server {
listen 443;
server_name _;

ssl on;
ssl_certificate /etc/pki/tls/certs/ssl.crt;
ssl_certificate_key /etc/pki/tls/private/server.key;

location / {
proxy_pass http://appservers;
}
}

 NGINXでは帯域制限が容易にできるので、

location / {
proxy_pass http://appservers;
}

location /file/ {
limit_rate 2m;
proxy_pass http://appservers;
}

こんなふうにすると、file配下のダウンロードを2Mに制限できるので、ファイルダウンロードのせいでアプリが遅くなるみたいなことの解消が期待できる。

 また、制御構造を使って、

location / {
proxy_pass http://appservers;
if ($http_user_agent ~* “msnbot”){
limit_rate 1m;
}
}

みたいなこともできるので、BOT様の速度を制限して通常接続の帯域を確保できる。

 色々、更に便利な機能があるから、しばらく検証しよう。

(429)


カテゴリー: サーバ設定 | コメントをどうぞ

簡易サーバ監視用シェルスクリプト

 先日のGMOクラウドVPSのダウン時に活躍した簡易スクリプト。
 現在運用しているさくらVPSお名前.com VPSと共に、このバッチを走らせて相互に簡易監視している。

#!/bin/sh
serverlist=(‘server1.hoge.tld’ ‘server2.hoge.tld’ ‘www.piyo.tld’)
mailto=’address@hoge.tld’
date=date '+%Y-%m-%d %H:%M:%S'
for server in ${serverlist[@]}
do
loss=ping -c 1 $server | grep "% packet loss" | sed -e "s/^.* \([0-9]*\)% packet loss.*/\1/"
if test $loss -ne 0; then
echo "[$server] : No responding." | mail -s "Server alert [$server] @ $date" $mailto
fi
done

 HTTP監視とか一切せず、pingを一回打ってみて帰ってこなかったらサーバ名をメールするシェル。
 serverlistに監視対象サーバを列挙して、mailtoに通知先アドレスを入れるだけ。

実行権限をつけてcronで、

*/5 * * * * /home/myhome/bin/pingwatch.sh

みたいにして回す。

 ちょっと書き足して、wgetとかcurlを使うようにすればHTTP等の監視も出来るけど、これくらいがコンパクトで良いかと。

(62)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP], サーバ設定 | コメントをどうぞ

攻撃が激しいのでiptablesで中国・韓国からのアクセスを遮断する

 最近、島問題の影響のようでさくらVPSお名前.com VPS(KVM)のホストにも大陸や半島方面からのDoS的なアクセスがままあってそのたびにホスト制限していたのですが、面倒くさいので、アドレス割り当て情報から大陸と半島からのアクセスを制限するためのiptables設定をしました。

 -Aじゃなくて-Iなのは、許可ルール以前にこのIPを拒否したいため。
 シェル実行してから /etc/init.d/iptables save で保存できる。

 ドロップしたパケットを記録したい場合は、

-N LOGDROP
-A LOGDROP -j LOG –log-prefix “[iptables drop]”
-A LOGDROP -j DROP

みたいに、新しい挙動LOGDROPを定義して、LOGDROP挙同時にはLOGってDROPする動きにする。
 で、従来の-j DROPの代わりに-j LOGDROPにしてやると、messagesログファイルにドロップした情報が記録されるようになる。
 LOGDROPを定義せずにLOGって、DROPしてを繰り返し書いても良いけど、数が多いときはこの方が楽。

(665)


カテゴリー: サーバ設定 | タグ: , | コメントをどうぞ

muninを使って、お名前.com VPSからRTXの監視をする

 お名前.com VPS(KVM)に入っているMuninを使って自宅のRTX1000の監視をしてみる。

1,RTX側のSNMP設定を行う
 基本

snmp host VPSのIPアドレス
snmp community read-only public
snmp yrifppdiplayatmib2 on

 更に、NATの外から来るのでスタティックを追加

nat descriptor masquerade static NATデスクリプタ番号 テーブル番号 RTXの内側アドレス udp snmp

 snmpポートのフィルタリングを追加

ip filter フィルタ番号 pass VPSのIPアドレス RTXの内側アドレス udp * snmp
ip filter フィルタ番号 restrict * RTXの内側アドレス udp * snmp

※VPSからのSNMP要求は通して、それ以外から来た物を捨てる。

2,VPS側でmunin設定を行う
 まずはmunin-nodeを設定

ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_1’
ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_3’
ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_5’
ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_6’
ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_35’
ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_91’
ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_92’
ln -s ‘/usr/share/munin/plugins/snmp__if_’ ‘/etc/munin/plugins/snmp_hoge.piyo.tld_if_93’

※hoge.piyo.tldはRTXのグローバルIPorホスト名
 ifはインターフェースの通信量表示、1~3番はLAN1~3でLAN2を使っていないので1と3、4番はBRIで未使用、5番からがPPで今回はPP01と02を監視、35番はRAS用のPP Anonymous、91番からがTUNNELで今回は01~03の対地を監視。
 後は、CPUとMEMを取得するプラグインをこちらのサイトから拝借して入れる ※念のためコピーを置いておく CPU MEM

cat > /etc/munin/plugins/snmp_hoge.piyo.tld_cpu
chmod 777 /etc/munin/plugins/snmp_hoge.piyo.tld_cpu
cat > /etc/munin/plugins/snmp_hoge.piyo.tld_mem
chmod 777 /etc/munin/plugins/snmp_hoge.piyo.tld_mem

 そして、SNMP設定を設定ファイルに記述

vim /etc/munin/plugin-conf.d/munin-node

[snmp_hoge.piyo.tld*]
env.version 1
env.community public
env.host hoge.piyo.tld

 出来たらmunin-nodeを再起動

/etc/init.d/munin-node restart

 このままではmunin-nodeが値を取ってきているけど表画面には出てこないので、表側の設定も追加

vim /etc/munin/munin.conf

[hoge.piyo.tld]
address 127.0.0.1
use_node_name no

※addressはmunin-nodeのアドレスなので、ローカル動作なら127.0.0.1。

 直ちに更新してみる場合は

sudo -u munin /usr/bin/munin-cron

 これで、muninのトップにhoge.piyo.tldのページが追加されていて、各インターフェースの通信量とCPU・メモリ状況が出るようになる。

(265)


カテゴリー: サーバ設定 | コメントをどうぞ

Windows Server 2012重複除去の管理を行う – 重複除去構成の解除、空き領域の開放 – WindowsServer2012

 Windows Server 2012の重複除去機能を試用していて気がついたのだけど、重複除去対象ファイルを他のボリュームへ移動したり、削除したりしてもディスク容量が空かない。
 なんだコレ、と試しに管理画面から重複除去の構成を無効化してみたけど変わらなかった。

 重複除去処理されたファイルは、中のデータ実体が専用管理されていて、デフォルトでは管理画面に無いスケジュールで週1で不要データ管理がされているようだ。
 なので、大量のファイルを削除して直ちに空き領域を確保したい場合は、その処理を手動で実行する必要がある。
 手順としては、PS(Power Shell)を管理者モードで起動して

Start-DedupJob ボリューム -Type GarbageCollection

※ボリュームは D: とか E: とか
を実行する。

 実行中の状態を調べる場合は

Get-DedupJob

を実行する。

 重複除去したディスクの重複除去を解除する場合は、

Start-DedupJob ボリューム -Type Unoptimization

を実行する。
※解除するための容量が不足する場合には処理に失敗する。

 直ちに、スループット重複除去を実行する場合は、

Start-DedupJob ボリューム -Type Optimization

を実行する。

 重複除去構成したファイルサーバで不要ファイル削除なんかの作業をした後には手動でガーベジコレクションを実行するべきと・・・
 ファイル削除しても空き領域が増えなくて焦ったのでメモっておこう。

(2143)


カテゴリー: Windows VPS, サーバ設定 | コメントをどうぞ

ApacheでPHPを使用して処理した大きなページを圧縮(mod_deflate使用)するとメモリリークする事がある(PHPの消費メモリが減らない)

 先日の本番サーバでの出来事。
 データ関連のエクスポートを行うPHPのプログラムがあって、とあるクライアントが非常に大きいデータ(数十MB)をダウンロードし始めた。
 この時監視していたところ、本番サーバのhttpdプロセスがメモリ(RES)を500MB程度使われていた。
 まぁ、データ量がデータ量だからそんな物かと思ったのだけど、該当プロセスのCPUが0%になってもメモリがそのまま解放されない。
とりあえず、こんなプロセスがたまったらいかに本番サーバといえどもメモリが吹き飛んでサービス停止に陥る(本来はリソース計画で最大状態でも足りるように制限設定するべきなんだけど、諸事情から出来ない・・・)ので、とりあえずApacheのMaxRequestsPerChildを下げてメモリが枯渇する前に再起動するようにした;

 本番データを開発環境に入れて同じリクエストを送ってみるがメモリはちゃんと解放される。
 PHPの問題かと思ったのだけど、いまいちわからず。
 仕方ないので、本番の直近バックアップイメージを仮想環境に立ち上げて、デバッグツールを入れて走らせると再現した。
 そのでかいデータ、DEFLATEされていたのだ。 コンテンツタイプがtextだったので、OutputFilterで圧縮処理をがりがりやってたのだが、データがある程度でかいと、この時に握ったメモリが解放されない(メモリリークしてる)
 開発環境はLANの帯域があるからDEFLATEしていなかった。
 とりあえず、該当処理のアドレスをDEFLATEの除外条件にした。 けど、大きい物ほど圧縮したいなぁと思うわけだけど・・・
 PHPのメモリを制限していても、DBに繋いで読んで出してを繰り返す場合にはPHP自身は変数(メモリ)を再利用しているからそこではメモリ消費が増えず、外のmod_deflateの中だけ増え続けちゃうから、大きいデータは別処理でちゃんと圧縮してからAttachしてダウンロードするように修正かな。

 まぁ、httpdがメモリを解放してくれない場合にはmod_deflateをチェックと、メモ。

(332)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP], PHP, サーバ設定 | コメントをどうぞ

お名前.com VPS(KVM)でWindows Server 2012の評価を開始、RTX1100との間にメインモードIPSecでVPNを設定した – WindowsServer2012

 そんなわけで期待していたWindows Server 2012の評価版公開されたので、先日のつぶやき通りさくらVPSを1本解約して新規に契約したお名前.com VPS(KVM)に導入して評価することにした。
 で、今回の導入環境は、お名前.com VPS(KVM) 2GBプラン。
 お名前.com環境はWindows化は超容易で、さくらのVPSのように面倒なことをする必要はない。

1,MSのサイトからWindowsServer2012評価版のISOイメージをダウンロードしてくる
2,お名前のコントロールパネルでSSL鍵をダウンロード、サーバ設定画面でVirtioをOffに設定しておく
3,ダウンロードした鍵を認証に使ってSFTP接続してISOをアップロード(Filezillaとかで)
4,お名前のコンソール上にアップロードしたISOが登場するから選択して再起動
5,普通のPCと同じようにインストーラが立ち上がってくるから、普通にインストールしておしまい。

 ネットワークは1000MTレミュレートだから標準ドライバだし、他のデバイスも何も気にすることはない。
 IPアドレスなんかもDHCPで払い出されるから本当にデフォルトで良い。
 完了後にお名前コンソールで管理用リモートデスクトップの設定を入れてやれば、後は普通にリモートデスクトップで快適操作。

 とりあえず、先日導入したRTX1100とIPSecを設定する。
 しかし、従来通りローカルセキュリティポリシーのIPセキュリティの設定からポリシーを設定して割り当てを行ったが全然始動しない・・・
2008(R2も)はいけたんだけど、何かGPOの構成とか必要なのかな・・・? とりあえず、2008以降推奨手段であるセキュリティが強化されたWindowsファイアウォール(WFAS)にある機能で設定した。
WFASのIPSecは殆ど触ったことがないのでつまずいたが、最終的には設定項目にPFSが無いけど、PFS必須だったと言う点だけだった。
RTX1100のIPSec周りの設定

tunnel select 10
tunnel name “WS2012Eval”
ipsec tunnel 10
ipsec sa policy 10 10 esp aes-cbc sha-hmac
ipsec ike always-on 10 on
ipsec ike encryption 10 aes-cbc
ipsec ike group 10 modp1024
ipsec ike hash 10 sha
ipsec ike keepalive use 10 off
ipsec ike local address 10 RTXの内側IP
ipsec ike payload type 10 3
ipsec ike pfs 10 on
ipsec ike pre-shared-key 10 text 事前共有鍵
ipsec ike remote address 10 VPSのグローバルIP
ipsec auto refresh 10 on
ip tunnel tcp mss limit auto
tunnel enable 10

ip routeとかフィルタは以前の記事と同じ

WFASでのIPSec設定

試験企画:GUI操作は動画説明してみるテスト(動画中では試験用にDES/MD5を選択している)
操作ステップ1
操作ステップ2

1,’コントロールパネル’から’Windowsファイアウォール’を開き、左リストにある’詳細設定’を開く
2,左リストの、’ローカルコンピューターのセキュリティが強化されたWindowsファイアウォール’を右クリックして、’プロパティ’を開く
3,’IPSecの設定’タブを開いて’IPSec既定’の’カスタマイズ’を開く
4,’キー交換(メインモード)’を’詳細設定’ラジオボタンを選択して、’カスタマイズ’を開く
5,’セキュリティメソッド’の’追加’を開いて、’整合性アルゴリズム’で’SHA-1’を選択、’暗号化アルゴリズム’で’AES-CBC 128’を選択、’キー交換アルゴリズム’で’Diffie-Hellman Group 2’を選択してOKで閉じる
6,追加された項目を選択して、右側にある上下矢印で追加したメソッドを一番上にしてOKで閉じる
7,4番の画面で’データ保護(クイックモード)’も’詳細設定’ラジオボタンを選択して、こちらの’カスタマイズ’を開く
8,’この設定を使用するすべての接続セキュリティ規則に暗号化を要求する’をチェック、’データの整合性と暗号化’の’追加’を開く
9,’プロトコル’で’ESP’ラジオボタンを選択、’アルゴリズム’の’暗号化アルゴリズム’で’AES-CBC 128’を選択、’整合性アルゴリズム’で’SHA-1’を選択してOKで閉じる
10,追加された項目を選択して、右側にある上下矢印で追加したメソッドを一番上にしてOKで閉じる
11,’認証方法’も’詳細設定’ラジオボタンを選択し、’カスタマイズ’を開く
12,’1番目の認証’の’追加’を開く
13,’事前共有キー’ラジオボタンを選択し、テキストボックスにRTXに設定した’事前共有鍵’を入力してOKで閉じる
14,追加された項目を選択して、右側にある上下矢印で追加したメソッドを一番上にしてOKで閉じる。
 ’IPSecの規定値のカスタマイズ’画面もOKで閉じる。
 ’ローカルコンピューターのセキュリティが強化されたWindow・・・’(切れてる・・・)の画面もOKで閉じる。
 これで1の画面まで戻ってきたはず。
15,左リストの’接続セキュリティの規則’を右クリックして’新しい規則’を開く
16,ステップ’規則の種類’で’カスタム’を選択して次へ
17,ステップ’エンドポイント’で、’エンドポイント1にあるコンピュータを指定してください’は’任意のIPアドレス’を選択。
 ’エンドポイント2にあるコンピュータを指定してください’は’これらのIPアドレス’を選択し、’追加’を開く。
 ’このIPアドレスまたはサブネット’を選択し、テキストボックスにRTX内側ネットワークを入力(192.168.10.1/24とか)してOKで閉じて、次へ
19,ステップ’要件’で’受信接続と送信接続に対して認証を要求する’を選択して次へ
20,ステップ’認証方法’で’既定’を選択して次へ(詳細設定で12/13/14同様の設定をしても良い)
21,ステップ’プロトコルおよびポート’で、’プロトコルの種類’で’任意’を選択して次へ
22,ステップ’プロファイル’で、’ドメイン’・’プライベート’・’パブリック’をチェックして次へ
23.’名前’に適当な名前を設定(必須項目)して、’完了’
24,作成された規則を右クリックして、’プロパティ’を開く
25,’全般’タブの’有効’をチェック、’詳細設定’タブの’IPsecトンネリング’の’カスタマイズ’を開く
26,’IPsecトンネリングを使用する’をチェック、’リモートトンネルエンドポイント’の’編集’を開く
27,’特定のアドレス’を選択して、’IPv4’テキストボックスにRTXの外側固定IPを入力してOKで閉じて、OKで閉じて、OKで閉じる(接続名のプロパティまで閉じる)

 長かったけど、コレで完了。

 お名前.com VPS(KVM)からフレッツ光ネクスト回線+固定IPプロバイダで接続したRTX1100経由でLAN上のWindowsHomeServer2011なProliant ML110 G7との間でWindowsファイル共有のコピーで、4.5MB/s(36Mbps位)が実効レートだった。 このスピードならかなり快適に作業できるだろう(下手なUSBメモリ程度だ)

 と言うわけで、LANのサブネットにWindowsファイル共有を開けて、インターネット上のファイルサーバに仕立ててみた。
 外からでも使えるように、VPN(RRAS)も構成してL2TP/IPSecで入れるようにして、仮想ネットワークからもファイル共有を開けるようにした。
 しかし、WFASのポリシーを何度かいじっているといきなり消えることがあるようだ。 やはり出たばかりでまだまだ安定に難があるかもしれない。

(243)


カテゴリー: Windows VPS, サーバ設定 | タグ: , , , , , | コメントをどうぞ