Edit
WEBサーバーの導入と運用

Edit
導入

WEBサーバーが必要とすることは、基本的に多くのHTTPリクエストを高速に処理を行い、ユーザーのレスポンス速度を重要視する。そのため、phpや、rubyなどのアプリケーション動作は基本的に、別のプロセス(規模によっては別のサーバー)が担当しユーザーからの一番の最初の窓口であるWEBサーバーの負荷にならないように設計することが肝要である。そのため2014年現在における最適なWEBサーバーが nginxを導入するのが最適解とかんがえる。

また、1台のWEBサーバーでの負荷が高くなり、複数のWEBサーバーの導入が必要になった場合はロードバランサを導入するなど、ネとワークインテグレーションが再度必要となるが、現状WEBサーバーを基本的に静的キャッシュサーバー+リバースプロクシサーバーとして利用する方針においては、1台のWEBサーバーでかなりのリクエストを処理できるため(但しアプリケーションは別サーバーに分散することによる)このページでは、それらには触れず今後の解説ページで説明していく。

アクセス数が増え、アプリケーション・サーバーだけを増やすような場合。nginx には簡易なロードバランサーの設定が行えるため、webサーバーが1台だけでもかなりの拡張性がある。

Edit
サーバー構築のOS設定

サーバー構築においては、CentOS6 を利用する。通常の Minim で Centos6をネットワーク導入し、OS環境が整った後は、以下の手順でOSをWEBサーバー向けにするように設定を行う。

  1. ホスト名の設定
  2. IP環境の設定
  3. 無駄なttyを削除
  4. 最低限必要なツールの導入
  5. TimeZoneの設定
  6. iptablesの設定

Edit
ホスト名の設定

# vi /etc/sysconfig/network
   HOSTNAME=<新しいサーバー名>            <= ここに新しいサーバー名を入れる。通常は www.mydomain.com など。

Edit
IP環境の設定(クラウドの場合必要無し)

WEBサーバーはすべてのサービスの窓口となるため、グローバル側のIPと、内部サービス向けのIPの2つを保有することになる。また、基本的にグローバルIPアドレスは固定となる。よってグローバルIPアドレスなどの設定もここで行う。ただし Amazon や Nifty などのクラウド型のサービスを利用する場合、IPアドレスの管理はサービサー側の領域となるため、サービサーのコントロールパネルから行うことになり、IP設定を行ってはならない場合がある。ここでは、自社内や自宅内にサーバーを立ち上げる場合の参考として設定を記載する。

vi /etc/sysconfig/network-scripts/ifcfg-eth0
   DEVICE=eth0
   BOOTPROTO=static
   BROADCAST=192.168.1.255                <- ここが本来のグローバルIPによるブロードキャストアドレス、この場合はCクラスIPを前提。
   HWADDR=00:00:00:00:00:00                <- いわゆるネットワークボードのMACアドレス
   IPADDR=192.168.1.1                             <- ここが本来のグローバルIPアドレス
   NETMASK=255.255.255.0                     <- ここが本来のグローバルIPによるネットマスク、この場合はCクラスIPを前提。
   NETWORK=192.168.1.0                          <- ここが本来のグローバルIPによるネットワークアドレス、この場合はCクラスIPを前提。
   ONBOOT=yes

※クラウドで上記設定は、絶対に行わないこと。トラブルが発生する。

Edit
無駄なttyを削除(クラウドの場合必要無し)

クラウドの場合は設定する必要は無い。但し、社内の場合や自宅の場合、ttyが多いとセキュリティが低下するおそれがある。(ttyを切り替えて、物理的にrootのパスワードアタックができてしまうような場合のみ)

# vi /etc/sysconfig/init
   ACTIVE_CONSOLES=/dev/tty[1-1]          <- 最初は 1-6 になっている。

Edit
最低限必要なツールの導入(クラウドの場合必要無し)

クラウドを利用しない場合には以下のツールの導入が必要。

Edit
TimeZomeの設定(クラウドの場合必要無し)

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

Edit
iptables の設定

WEBサーバーとして、http(80)と、https(443)を追加する。また ssh(22)のアクセスを管理者の環境に合わせて制限する。但しクラウドの場合、iptablesを有効にするか設定できる場合があるので、その設定も確認しておくこと。

# vi /etc/sysconfig/iptables
   -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
   -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

Edit
WEBサーバープログラムの導入

Edit
必要ライブラリの導入

yum install libmcrypt curl libxml2*

Edit
WEBサーバープログラム本体

基本的には、nginx を、キャッシュを有効にし、すべてのアプリケーションへのリバースプロクシを設定すれば問題はない。通常、1台でWEBサーバー、アプリケーション・サーバー、データベース・サーバーを起動する場合、WEBサーバーとアプリケーションを接続させるには、ポートを経由させず、linux socketを利用する場合がおおい。ただし socket はディスク領域を経由してのアクセスの為、大量のアプリケーションリクエストの場合、メモリを消費せずに済むものの、速度が犠牲になる可能性もある。具体的な速度の差異については未検証。

また、ポートを利用した場合、iptables等のセキュリティ設定には注意が必要となる。通常、WEBサーバーとアプリケーション・サーバーとの間には、処理速度向上の為にSSLが張られないため、下手なポート設定では、外部からアプリケーション・サーバーにダイレクトにアクセスされ、ハッキングの危険性が上がってしまうためだ。

Edit
サーバの運用

サーバーの運用にあたっては、基本的に以下の2点が重要になる。

Edit
復旧作業

WEBサーバーの復旧作業は以下の作業が必要となる。

  1. OSのインストール
  2. OSの設定:サーバー構築のOS設定
  3. WEBサーバープログラムの導入
  4. バックアップからnginxの設定データと、静的HTMLファイルのコピー

基本的には導入時と同じように、OSから再設定を行い同じ手順で再インストールを行うが、最後のnginx設定ファイルと、静的HTMLファイル群は、バックアップサーバーからscpや、WinSCPなどのツールを使ってコピーを行う。またその際は、各ファイルの所有者と権限の設定を忘れないようにする。

Edit
サーバーの設定ファイルのバックアップ

上記の導入でも触れたとおり、nginxプログラムなどの本体は他の開発マシンにすでに存在しているであろうため、バックアップに必要なものは、nginxで読み込まれる設定ファイルと、静的HTMLファイル群となる。

  1. nginxの設定ファイル。(分散している場合はすべて)
  2. 静的HTMLファイル群。

バックアップは、バックアップサーバーからWEBサーバーに、rsync 通信でアクセスしてコピーを行う方法が望ましい。これはssh(22)のアクセスを社内のみなどからに制限しやすく、バックアップサーバーのセキュリティが確保されやすい。またこれにより、WEBサーバー自体が外部に rsync を行わないことになり、内部に他のサーバーのssh用秘密鍵を保持する必要がなく、バックアップサーバーが社内のローカルネット内にある場合、バックアップサーバーのiptables設定だけでなく、より上位のルーターレベルでshh(22)の接続ができないことになる(出来る)ので、セキュリティレベルが向上する。

Edit
logファイルのローテート

詳しくはログ管理を参照し、nginx のログのローテートとファイル圧縮などを行う。

Edit
logファイルのバックアップ

先に説明したとおり、バックアップ作業はバックアップサーバーから行われるため、バックアップサーバーの設定:?を参照し設定を行う。