apache, mysql, php のインスコと設定のメモ

Windows7に入れていたXAMPPをアンインストールして、Apache + MySQL + PHP をそれぞれ別に入れてみた。

Apache のインストール

Apache入門を参考にインストール。

Apache Loungeからアーカイブをダウンロードして適当なフォルダに展開し コマンドプロンプトを管理者権限で起動して httpd -k install でサービスとしてインストール

httpd.conf の設定

## apache をインストールした場所
ServerRoot "C:\D\apache\httpd-2.4.2-win32-ssl_0.9.8v"

## モジュールの読み込み : 必要な物はコメントを外して使用する
LoadModule rewrite_module modules/mod_rewrite.so

## リクエストに応答する(IP &)port
Listen 80
<IfDefine ssl_module>
  Listen 443 https
</IfDefine>

## よくわからないけどモジュール別のディレクティブ
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

## サーバ管理者のメアド
ServerAdmin hogehoge@tesutesu

## サーバのホスト名
ServerName localhost:80

## アクセス制御
<Directory />
    AllowOverride none ### .htaccess の扱い
    Require all denied ### アクセスをすべて拒否。Order Allow,Deny で Deny from All ってこと
    Options none
    Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
</Directory>

## ドキュメントルート
DocumentRoot "C:\D\apache\httpd-2.4.2-win32-ssl_0.9.8v\htdocs"

## ドキュメント内のアクセス制御
## ※Directoryを正規表現で指定する場合は ~ をつける
<Directory "C:\D\apache\httpd-2.4.2-win32-ssl_0.9.8v\htdocs">
    # オプション
    # 参考 : http:###blog.veryposi.info/server/server-setup/httpd-conf-options/
    Options none
    Options +MultiViews

    # AllowOverride None
    AllowOverride All

    Require all granted # Order Allow,Deny, Allow from all ってことらしい
    # Require all denied にして 許可すべきものだけ許可するほうがいいのかもね。もちろんケースバイケースだけど
</Directory>

## インデックスに当たるファイル名の指定
<IfModule dir_module>
    DirectoryIndex index.html index.htm index.php
</IfModule>

## .htaccess などの見られたくないファイルを非公開
<Files ".ht*">
    Require all denied
</Files>

## 正規表現を使う場合は FileMatch
<FileMatch "^\.ht.*">
    Require all denied
</FileMatch>

## エラーログを吐くファイルの場所
ErrorLog "logs/error.log"

## エラーログに書き出すエラーレベルの下限
## Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel notice

## サーバーエラーな時のメッセージやリダイレクト先
ErrorDocument 500 "message_"
ErrorDocument 404 /404.html
ErrorDocument 402 http://www.example.com/subscription_info.html

## ライブラリのインクルードとか
## 参考 : http://php.net/manual/ja/configuration.changes.php
<Directory "C:\D\apache\httpd-2.4.2-win32-ssl_0.9.8v\htdocs">
  php_value "include_path" ".;C:\D\php\lib\zendframework\1.11.11\library"
</Directory>

<IfModule alias_module>
    ### リダイレクト
    Redirect 301 http://hogehoge.com/ http://piyopiyo.com/

    ### mod_rewrite
    RewriteEngine on
    RewriteRule ^/(.*) http://example.com/ [L,R=301]

    ### エイリアス…SEO的にはリダイレクトのほうが良いよね…
    Alias /to http://localhost/from
</IfModule>

## httpd.conf の設定を別ファイルから読み込む
Include conf/extra/httpd-*******.conf

## MIMEタイプ
<IfModule mime_module>
    # MIMEタイプが設定されているファイル
    TypesConfig conf/mime.types

    # AddType で MIMEタイプを追加
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

## タイムアウトの時間(秒)
Timeout 300

## HTTPセッションのコントロール
## サーバのパフォーマンスに大きく影響する設定
## 長い時間接続しておくべき理由がなければ Off にするか Timeout を短くすればよさそう
KeepAlive On
KeepAliveTimeout 1
MaxKeepAliveRequests 150

## 余計な情報を返さなくていいよ
ServerSignature Off
ServerTokens ProductOnly

## キャッシュの制御
FileETag none

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType image/gif    "access plus 2592000 seconds"
    ExpiresByType image/jpg    "access plus 2592000 seconds"
    ExpiresByType image/jpeg   "access plus 2592000 seconds"
    ExpiresByType image/png    "access plus 2592000 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 216000 seconds"
    ExpiresByType application/x-javascript "access plus 216000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 216000 seconds"
</ifModule>

## 圧縮
## 上のと合わせてワードパンツから拾ってきたコード
## 参考1 : http://wordpants.org/backpants/ の創刊号
## 参考2 : http://www.atmarkit.co.jp/flinux/rensai/apache2_04/apache04b.html
<IfModule mod_deflate.c>
    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|ico)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI _\.utxt$ no-gzip
    <IfModule mod_filter.c>
        ### LoadModule filter_module modules/mod_filter.so
        ### のコメントアウトを外して読み込まないと使えないよ
        ### てか AddOutputFilterByType は非推奨らしい…
        ### 参考 : http://www.onflow.jp/cyano/archives/137
        AddOutputFilterByType DEFLATE text/plain
        AddOutputFilterByType DEFLATE text/html
        AddOutputFilterByType DEFLATE text/xml
        AddOutputFilterByType DEFLATE text/css
        AddOutputFilterByType DEFLATE application/xhtml+xml
        AddOutputFilterByType DEFLATE application/xml
        AddOutputFilterByType DEFLATE application/rss+xml
        AddOutputFilterByType DEFLATE application/atom_xml
        AddOutputFilterByType DEFLATE application/x-javascript
        AddOutputFilterByType DEFLATE application/x-httpd-php
    </IfModule>
</IfModule>

バーチャルホストの設定

localhost にディレクトリ切って開発するのもいいけど…バーチャルホスト使いたいよね。ということで まずは httpd.conf を以下のように変更する。

Include conf/extra/httpd-vhosts.conf ; コメントアウトされていると思うのでこれを外す

次は、conf/extra/httpd-vhost.conf にバーチャルホストを追加する。 以下の様な感じにすればOK

<VirtualHost *:80>
  # http://a.a/ にアクセスすれば htdocs のインデックスファイルが表示される
  DocumentRoot "C:\D\apache\httpd-2.4.2-win32-ssl_0.9.8v\htdocs"
  ServerName a.a
</VirtualHost>

<VirtualHost *:80>
  # http://b.b/ にアクセスすれば htdocs/folder のインデックスファイルが表示される
  DocumentRoot "C:\D\apache\httpd-2.4.2-win32-ssl_0.9.8v\htdocs\folder"
  ServerName s.s
</VirtualHost>

もうちょいいろんな設定をしたければ以下の様な感じになる。

<VirtualHost *:80>
  # 詳細はhttp://httpd.apache.org/docs/2.0/ja/mod/core.html

  # サーバがクライアントに送るエラーメッセージに含める電子メールのアドレス
  # ServerAdmin postmaster@dummy-host.localhost

  # ドキュメントルートはどこですか?
  # 表示されるサイトはどこのディレクトリの中身を見てるの?
  DocumentRoot "C:\D\apache\httpd-2.4.2-win32-ssl_0.9.8v\htdocs"

  # サーバの名前 を設定
  # http://サーバの名前/ でドキュメントルートにアクセス可能
  ServerName localhost

  # エイリアスの設定
  # つまり↓の場合 http://localhostAlias は http://localhost と同じ内容が表示される!
  ServerAlias localhostAlias

  # エラーログを記録する場所はどこにする?
  ErrorLog "logs/error.log"

  # ログファイルについては
  # http://httpd.apache.org/docs/2.0/ja/logs.html
  # http://httpd.apache.org/docs/2.0/ja/mod/mod_log_config.html
  # に書いてある。
  #CustomLog "logs/dummy-host.localhost-access.log" combined
</VirtualHost>

NameVirtualHost の設定が必要かと思ったけどいらない?気づいてないだけでどっかに書かれてる?まぁ…いいや。

参考リンク:XAMPPでバーチャルホストをローカル環境に導入 - おそえの日誌

PHP のインストール

PHPインストールと初期設定(Windows)を参考にインストールした。

アーカイブを適当なフォルダに展開してPATHを通して完了。

httpd.conf の設定

## php.ini が存在するディレクトリ
PHPIniDir "C:\D\php\lib\5.4.0"

## 拡張子の追加
<IfModule mime_module>
    AddType application/x-httpd-php .php .phtml
    AddType application/x-httpd-php-source .phps
</IfModule>

## モジュール(php のバージョンに合わせること)
LoadModule php5_module C:\D\php\lib\5.4.0\php5apache2_4.dll

php.ini の設定

; <? とか <?= の使用可否…PHP5.4からは廃止されて常時Onになるので絶対注意
short_open_tag = Off

; 出力前のバッファリング
; setcookieの問題やらちょいとややこしそうなので後で調べる
; output_hander を設定していると自動的に On になるらしい。そういうのはエラーにしてほしい
output_buffering = 4096;

; 関数に引数を参照で渡すと警告するかどうか
: 基本的には Off。というか PHP5.4.0 で廃止
allow_call_time_pass_reference = Off

; file_get_contents() などの fopen()ラッパーの使用可否
; セキュリティー的な問題が発生する可能性があるので Off が推奨らしい
; もしも Off の場合は cURL で代替可能
; 参考 : http://memorandum.yamasnet.com/archives/Post-361.html
; 参考 : http://d.hatena.ne.jp/mole_life/20090805/1249493439
allow_url_fopen = Off

; allow_url_include は allow_url_fopen と似たようなもの
; デフォルトで Off なので弄る必要はない
allow_url_include = Off

; mod_deflate で圧縮するなら不要
; html しか圧縮できない?
zlib.output_compression = Off
; zlib.output_compression_level = -1 はサーバーが圧縮レベルを決定する
; zlib.output_handler = mb_output_handler

; 勝手に flush() しちゃう設定
; 基本的には Off
implicit_flush = Off

; *あとで
unserialize_callback_func =
serialize_precision = 17;
open_basedir =

; 禁止する関数・クラス
;disable_functions = phpinfo, exec
;disable_classes =

; バッファを出力しないとabortされない罠とか
;ignore_user_abort = On

; 受け付けるパラメータ数。デフォは1000, てか100でも多い気がする…
; PHP5.3.9 ~
max_input_vars = 100;

; 醜態を晒したくなければ Off
display_errors = Off ; 開発や学習のためなら On
expose_php = Off

; エラーログに記録するレベルの設定
log_errors = On
; error_log = /log/php_errors.log ; ログファイルの場所を指定
error_reporting = 30711

; 余計なことしないで下さい…(PHP5.4.0で削除)
magic_quotes_gpc = Off

; リクエストのパース時間を含まない最長実行時間
max_execution_time = 30

; リクエストのパース時間の制限?なんかいまいち分からん
max_input_time = 60

; 送られてくるデータサイズ制限
post_max_size = 15M
upload_max_filesize = 15M

; 拡張モジュールが入っているフォルダ
extension_dir = "C:\D\php\lib\5.4.0\ext"

;;;;;;;;;; マルチバイト文字列の設定 ;;;;;;;;;;;
extension=php_mbstring.dll

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.substitute_character = none
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII

; 関数の一部を mb系の関数に変えるオプジョン
; 参考 : http://d.hatena.ne.jp/pasela/20081226/mb_func_overload
mbstring.func_overloar = 0

; 文字コード判別を厳密に行うかどうか
; mb_detect_encoding の第3引数に ture を渡してやればいい気もする
mbstring.strict_detection = Off

; いまいち理解してない。MIMETypeを正規表現でなんたら
; 参考 : http://d.hatena.ne.jp/shimooka/20080919/1221800058
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
;mbstring.http_output_conv_mimetype =

; デフォルト文字セット
default_charset = UTF-8

MySQL

とりあえずこの辺を参考にして… インストーラからインストール、設定。 Workbrenchでのユーザーの作成を行った。 あとデータ場所を変更 datadir="C:\D\db\mysql\5.5.23-winx64\data\"

セキュリティーのメモとか

  • ネットワークに繋いでる時は外からアクセスできてしまうので必要なら .htaccess とかでアクセス制限する
  • Windows の場合は逆に Windows ファイアウォールなんかで遮断されて外部から見えない。これを解決するにはファイアウォールの設定を変更する必要がある。

Windows7にインストールしたApacheに外部からアクセスする際のWindowsファイアウォールの設定

  • Windowsキー + R を押して、ファイル名を指定して実行 を開く
  • WF.msc を入力してEnter。「セキュリティが強化されたWindowsファイアーウォール」が開く
  • 「受信の規則」→「新しい規則...」 を選択
  • 新規の受信の規則ウィザードが開くので以下のように設定 [規則の種類] カスタム
    [プログラム] すべてのプログラム
    [プロトコルおよびポート]
        プロトコルの種類 : TCP
        ローカルポート : 特定のポート - 80
        リモートポート : すべてのポート
    [スコープ] 何もしなくていい。
          あるいは、 これらのIPアドレスを指定して「追加」で
          192.168.24.0/24 などを追加する。
    [操作] 接続を許可する
    [プロファイル] そのままでOK
    [名前] 「Apacheへのアクセス制限」だとか好きな名前をつける
Share
関連記事