ゆきばた のBlog

備忘録と備忘録。あと備忘録。

Centos+Apache+PHP で .htaccess 導入時のエラーについて

 

Centos + Apache + PHP で環境構築を設定した際に

.htaccess を書いたらエラー

 

原因は単純なことでした。

 

問題について

 

CentosにApacheとPHPをインストールして index.html が表示できた後で、

.htaccessを入れた際に表示されたエラーがこんな感じ

 

     ↓ ↓ ↓ ↓ ↓

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at you@example.com to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

 

f:id:yukibata:20161002154830p:plain

 

解決について

 

.htaccessを導入する前は問題なく動いていたということなので、

 

 1:.htaccess の中に書いてある内容がオカシイ

 2:.htaccess に必要なモジュールの実行権限がない

 

このあたりだと予想。たぶん1だけど。

 

ということで、Apacheの httpd.conf を見てみると、

 

  ♯LoadModule rewrite_module modules/mod_rewrite.so

 

となっていた。

これのコメントアウトを外せばOK

(Apache再起動も忘れずに)

 

 

ちなみにエラーログをみるとちゃんとありますので

似たようなエラーの際は必ずチェックしましょう

 

[Sun Oct 02 06:36:01.926266 2016] [core:alert] [pid 3422:tid 140211212248832] [client 192.168.33.1:61031] /usr/local/apache2/vhosts/.local.yukibata.com/htdocs/.htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

 

 

おわり

 

windows+vagrantを使ってバーチャルドメイン構築のチェックポイント

 

vagrantでローカル環境構築でハマった点がいくつかありました。

ローカル環境構築の方法は、また別途記載するとして

今回は、構築中にハマった点を記載します。

同様につまづいた方は、チェックポイントとしてご利用ください。

 

 

環境について

 

今回の環境はこんな感じです。

 

   windows10

   vagrant 1.8.5

   VirtualBox 5.1.4

   centos7

 

まず前提として、上記がインストールされていることとします。

 

 

問題とゴール

 

問題は、ホストOS(windows)からゲストOS(centos)のドメインに

何故かアクセスできないこと。

 

ゴールは、アクセスし、ゲストOS側の access_log でアクセスが確認できること。

f:id:yukibata:20160922160451p:plain

とします。

(写真は403ですが、アクセスできることをゴールとします。)

 

 

最初に概要の説明

 

ゲストOSのドメインにアクセスが流れるためには

ざっくりいうと

 

  ・ブラウザが外(インターネット)にいかず、内部に接続が向かうこと

  ・その接続がゲストOSに向かうこと

  ・ゲストOSが正しくドメインをさばくこと

 

です。

今回は「ちゃんとそれぞれが正しい設定になっていますか」という

点で1つずつみていこうと思います。

 

そして今回は

 

  IP:192.168.33.10 (vagrantのデフォルトIP)

  バーチャルホスト名:local.yukibata.com

 

という条件で進めていこうと思います。

 

 

ポイント1: windows の hosts ファイル

 

ホストOS(windows)側の設定です。 

hostsファイルは、ブラウザが処理をする際にチェックするファイルです。

ここに、記載をすることで「この IP or バーチャルホスト は外に行かない」

ということが実現されされます。

 

つまり、このように記載しましょう。

”C:\Windows\System32\drivers\etc” にある hosts というファイルに

 

 192.168.33.10    local.yukibata.com

 

という1行をファイルの最終行に加えます。

(このような大事なファイルは、編集する前にバックアップを取りましょう)

 

これで、ブラウザが http(s)://local.yukibata.com とうアクセスを受け取った際、

外にアクセスしなくなります。

 

 

ポイント2:Vagrantfile の記載は正しいか?

 

vagrant が起動する際に、参照される設定ファイルが Vagrantfile です。

ここにある設定を読み込んで環境が起動します。

 

ここで大事な設定は3つです

 

 ・vm.boxの名前が正しいか?

 ・port forward は正しいか?

 ・ネットワークのIPは正しいか?

 

です。初期設定ではコメントアウトされているので、注意してください。

私の場合 box の名前が centos7 としてあります。

(boxの名前は、"vagrant box list" コマンドで確認できます。)

 

f:id:yukibata:20160922172724p:plain

 

名前を確認した上で以下の設定を記載してください。

 

Vagrant.configure("2") do |config|

## boxの名前
config.vm.box = "centos7"

## 追加変更
config.vm.define :centos7 do |centos7|
centos7.vm.box = "centos7"
centos7.vm.network "forwarded_port", guest: 80, host:8080
end

## IP の設定
config.vm.network "private_network", ip: "192.168.33.10"

end

 

極端な話、ファイルの中身を全部消して、これだけ書いてあればOKです。

 

 

 ポイント3:vagrant のバグを踏んでいないか?

 

私は、ここで結構ハマりました。

これは、私と同じ vagrant 1.8.5 を利用している方向けです。

それ以外のバージョンの方は飛ばしてください。

vagrant の 1.8.5には、バグが1件あるそうです。

 

"vagrant up" のコマンドを打つと、vagrant は起動するのですが、

private key の発行が上手くいかず、中途半端な設定で起動が

完了してしまします。

ssh接続はできるので、「行けてるかも?」と思いがちですが

行けてません。

 

このようなメッセージが出ていませんか?

”Warning: Remote connection disconnect. Retrying...”

 

f:id:yukibata:20160922162501p:plain

 

この場合、vagrant のソースファイルの修正が必要です。

 

windows側から修正したい場合は vagrant をインストールした

HashiCorpのディレクトリの中にあります。

私の場合は、

 

”C:\Program Files (x86)\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.5\plugins\guests\linux\cap”

 

にある "public_key.rb" ファイルの 57行目付近を以下のように修正します。

 

if test -f ~/.ssh/authorized_keys; then
  grep -v -x -f '#{remote_path}' ~/.ssh/authorized_keys > ~/.ssh/authorized_keys.tmp
  mv ~/.ssh/authorized_keys.tmp ~/.ssh/authorized_keys
  chmod 0600 ~/.ssh/authorized_keys // ←ここを追加
fi

 

contos側から修正したい場合は 

/home/vagrant/.ssh/authorized_keys の権限を 600 に設定します。

 

f:id:yukibata:20160922163421p:plain

 

これで vagrant が無事に起動すると思います。

逆に言うと、この問題に引っかかり無事に起動しない場合、

centos側で ip の振り分けが正しく行われていないような気がします。

 

(参考)

www.thisprogrammingthing.com

 

 

ポイント4:VirtualBoxの設定が正しいか?

 

vagrant はあくまで、VirtualBoxをKickしている立場なので、

VirtualBoxの設定が正しくないとダメです。

もう一度、VirutalBoxの設定を見てみましょう。

 

ただし、設定を見る前に、centosが正しくOFFになっているかを

確認してください。起動中だと設定は変更できません。

 

”vagrant halt” と "vagrant status" のコマンドでOFFになっていることを

確認しましょう。

 

f:id:yukibata:20160922164038p:plain

 

確認ができたら、VirtualBoxを起動します。

 

f:id:yukibata:20160922164256p:plain

 

メニューから「設定」を選択

 

f:id:yukibata:20160922164322p:plain

 

左メニューの「ネットワーク 」を選択し、

「アダプター2」の「ネットワークアダプターを有効化」に

チェックが入っていること 。

そして、「割り当て」が「ホストオンリーアダプター」になっていることを

確認してください。

それ以外は、デフォルトのままでOKです。

 

これで "vagrant up" を行ってください。

以下のように Adapter 2 : hostonly と正しく認識されると思います。

 

f:id:yukibata:20160922165813p:plain

 

この「ホストオンリーアダプター」の設定がないと、

ホストOSからゲストOSへの接続ができなくなります。

 

ホストオンリーアダプターとは、簡単に言うと

ホストOSとゲストOSを結ぶ「仮想的なネットワーク」の作成

行ってくれるものです。

 

ここまでくれば、

ブラウザからアクセスし、windowsの内部から centosに向かうまでが完成です。

ここからは、

「centosが受け付けてくれること」

「apacheが受け付けてくれること」

のチェックポイントを見ていきましょう。

 

 

ポイント5:centos側がIPを認識しているか?

 

ゲストOSが対象(192.168.33.10)のIPを認識していなければいけません

ifconfig コマンドで確認しましょう。

 

ただ、centos7 では、ifconfigコマンドが非推奨となっているので、

インストールしなければいけません。

まず ”yum -y install net-tools” コマンドでインストールしましょう。

 

そして、正しく認識されているか確認してください。

 

f:id:yukibata:20160922173738p:plain

 

もしここに 192.168.33.10 がなければ、

"vagrant halt" や "vagrant destroy" をして再トライしてみてください。

 

 

ポイント6:centosの hosts ファイルが正しいか?

 

windows の hosts ファイルのようなイメージで

centos にも hosts ファイルがあります。

 

"vi /etc/hosts " で編集してみましょう。

 

f:id:yukibata:20160922165957p:plain

 

このように

 

 192.168.33.10  [バーチャルホスト名]  localhost.localdoain localhost

 

となってればOKです。

 

ここまでで、

ブラウザからアクセスし、centosへのアクセスが可能となっています。

 

 

ポイント7:apacheの設定

 

最後にapacheの設定を見てみましょう。

人によって、apacheのインストール方法は異なると思いますが、

私は /etc/httpd のような構成が気持ち悪いので、

個別にapacheをインストールしました。

"/usr/local/apache2/" という構成です。

(ただ、このような構成でなくてもまったく問題ありません)

 

”vi /usr/local/apache2/conf/httpd.conf” コマンドで

httpd.conf ファイルを編集してみましょう。

 

以下のように編集します。

 

f:id:yukibata:20160922170805p:plain

 

<VirtualHost *:80>
  DocumentRoot /usr/local/apache2/vhosts/local.yukibata.com/htdocs
  ServerName local.yukibata.com
  ErrorLog vhosts/local.yukibata.com/logs/error_log
  TransferLog vhosts/local.yukibata/logs/access_log
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory "/usr/local/apache2/vhosts/local.yukbiata.com/htdocs">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

 

これでバーチャルドメインごとにディレクトリを作成できるので、

複数ドメインや今後のデバッグが便利になります。

 

ポイントとしては、

 

  ・<VirtualHost *:80> 

  ・DocumentRoot

  ・ServerName

  ・ErrorLog

  ・TransferLog

 

の5つです。

local.yukibata.com のアクセスが来るとそれぞれが機能してくれます。

 

忘れがちなのは、

 

 "/usr/local/apache2/vhosts/local.yukiabta.com/logs/"

 "/usr/local/apache2/vhosts/local.yukibata.com/htdocs/"

 

のディレクトリを mkdir コマンドで作成し

apacheが書き込めるように権限設定をしておいてください。

 

上記のように apache の設定が終わったら、

apacheの再起動をします。

 

コマンドは

"/usr/local/apache2/bin/apachectl stop"

"/usr/local/apache2/bin/apachectl start"

です。(restartでもOK)

 

f:id:yukibata:20160922171557p:plain

 

 

ポイント8:firewall は無効になっているか

 

firewallとは、外部の不正なネットワークを遮断する仕組みです。

この設定が有効だと、ホストOSからのアクセスは遮断されます。

設定を確認して、有効になっていたらOFFにしましょう。

 

設定確認のコマンドは

 

  systemctl status firewalld

 

です。

 

f:id:yukibata:20160929231536p:plain

 

このように(画像の緑色の部分) Active:active(running) となっていたら

ONになっている証拠です。

 

これを

 

  systemctl stop firewalld

 

でOFFにして、再度 systemctl status firewalld で確認しましょう。

以下のように、 Active:inactive(dead) となればOKです。

 

f:id:yukibata:20160929231825p:plain

 

 

ポイント9:ホストOSからゲストOSに ping が通るか?

 

コマンドプロンプトなのどで ping を打ってみましょう

 

 "ping 192.168.33.10"

 

もしくは

 

 "ping local.yukibata.com" 

 

でOKです。

すると以下のように、接続ができていることがわかります。

 

f:id:yukibata:20160922171929p:plain

 

これで、ブラウザからアクセスした際に

 

 /usr/local/apache2/vhosts/local.yukibata.com/logs/access_log

 

にアクセスが来ることが確認できます。

 

firewall (ファイヤーウォール)の詳しい仕組みは

このサイトがわかりやすかったです。

 

www.infraexpert.com

 

 

まとめ

 

以上8項目が、チェックポイントとして記載しました。

もしかしたら、これらのチェックポイントでもうまくいかない方も

いらっしゃるかもしれませんが、

少なくとも、1つずつチェックしていくことで、

どこまでOKかのイメージがつくと思います。 

 

最後に参考になったサイトを記載します。

もし詰まったり、これって何?と思ったら参照してみてください。

 

labs.septeni.co.jp

 

sui.hateblo.jp

 

 

おわり

 

 

[ImageFrom]
https://www.vagrantup.com/
http://www.thisprogrammingthing.com/2016/fixing-vagrant-connection-error/