ダウンロード

AWSでapache/PHPサーバをたてる

忘れっぽい自分への作業ログ。

まずはEC2の起動から。
ブラウザからAWS ConsoleにアクセスしてAmazon Linuxを1台たてる
その際、ダウンロードされる秘密鍵(pemファイル)はなくさないようローカルの作業用フォルダに大切に保存。
同時にVPCが出来上がるからこのドメインに対してセキュリティグループを割り当て。
セキュリティグループはこの先を考え、以下の設定とする。
アウトバウンズ
・SSH 自身のIPアドレスからのみ許可
・HTTP すべてのIPアドレスから許可
・HTTPS 全てのIPアドレスから許可
インバウンズ
・すべて許可

サーバの起動ごとにIPアドレス変わるの面倒なのでElastic IPアドレスを取得し、このLinuxマシンに割り当てる。以降はこのIPアドレスに対してSSHなどで接続

Linuxマシンが起動したらさっそくApacheを入れる
SSHで接続(TeraTerm)
ユーザ:ec2-user / パスワードなしの秘密鍵指定

ec2-userはデフォルトでsudoコマンドが可能。
しかし、コマンド毎にsudo打つのは面倒なので、とりあえずrootユーザにパスワードを割りあてrootユーザでの操作を可能とする。※ここはちょっと個人的趣味含む

rootユーザの状態で以下のyumインストールをしていく。
まず、注意したのが2016/2月時点 yum install httpd でapacheをインストールするとApache 2.2がインストールされる。
すると、この時点でAmazonが用意しているデフォルトのyumレポジトリでは、Apache2.2に対してPHPは5.3までしかインストールできない。

PHP5.6を入れたい場合はAmazon LAMPインストールでも指定されているとおり、httpd24を指定する。これでApacheは2.4がインストールされることになり上記バージョン依存エラーも解決する。

また、apacheに対してSSLモジュールを導入したい場合以下

apacheに対してmod_securityを導入したい場合は以下となる

■mod_evasiveについて
mod_evasiveはDOS/DDOS攻撃対策用のApacheモジュールである。
ただしapache2.4に対しては2016/3月時点バイナリインストールが提供されていない。※apache2.2には対応。
mod_evasiveを入れたい場合は以下のサイトがとても参考になります。
<Apache2.4 + mod_evasive>
http://www.frontier-line.org/lognote/?p=2884
内容はmod_evasiveのソースコンパイル/インストールです。
apacheのモジュールをソースからインストールする際にはapxsコマンドが必要。
これは、httpd-develパッケージに含まれるので以下のコマンドでインストール。

また、ソースのコンパイルにはgccが必要。同様に

でインストールする。
mod_evasiveのソース自体は以下のコマンドで拾ってくる。

上記サイトの記載に沿ってソースをコンパイル。

するとなんかけっこう警告がでますが(笑)
問題なく動作します。モジュールが有効になっていることを確認。

上記、モジュールインストールおよび各apacheの設定が整ったらapacheを起動。

このとき注意したいのはディレクトリの権限。apacheがアクセスするディレクトリやファイル等にはあらかじめapacheグループに対して権限を割り振っておく必要がある。

また、今後のPHPソースのデプロイなどを考慮してec2-userなどの作業用ユーザーをapacheグループに追加しておくと作業がしやすくなるはず。

WinSCPなどでSSH接続を使ってファイルをアップロードする場合など便利です。
apacheグループに追加したのにWinscpのファイルコピー時に以下のエラーが出る(ファイルは更新されている状態)場合
・set times: Operation not permitted
・サーバからのエラーメッセージ: Permission denied
Winscpの設定をいじります。

上部メニューから 環境設定 → 転送 → 編集ボタン → 共通の設定「タイムスタンプを保存」のチェックボックスを外す。

備忘録おわり。

AWSってLinuxサーバがあっという間に建てれるし、たとえばApacheのバージョンアップを試してみようって場合にも、マシンイメージをコピーしてそっちで検証できるからとっても便利だと思います。(検証終わったら消せばいいしね。)

以上。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です