読者です 読者をやめる 読者になる 読者になる

ゆきばた

ゆきばたの果てしない戯言

Apacheのマルチドメインが効いていない原因は、httpd.conf だった件

apache 開発

 

Apacheのマルチドメインに関してハマった点を書きます。

 

困ったこと、

「マルチドメイン設定をしたのに、同じページが表示される」

です。

 

f:id:yukibata:20170323224921p:plain

 

元々、

  A:local.yukibata.com/home/

があった状態で、

  B:local.test.yukibata.com/home/

を追加してBにアクセスしてみました。

が、なぜがAが表示されるという問題に遭遇しました。

 

現象を詳しく見てみる

 

まずは、Aである local.yukibata.com/home/ にアクセス。

すると、ちゃんとアクセスログは

/usr/local/apache2/vhosts/local.yukibata.com/logs/access_log ⇒ 来ている

/usr/local/apache2/vhosts/local.test.yukibata.com/logs/access_log ⇒ 来てない

これはOK

 

次に、Bである local.test.yukibata.com/home/ にアクセス。

すると

/usr/local/apache2/vhosts/local.yukibata.com/logs/access_log ⇒ 来ている

/usr/local/apache2/vhosts/local.test.yukibata.com/logs/access_log ⇒ 来てない

これはNG

 

原因は、やっぱり httpd.conf 

 

思い当たる節はほとんどないので、

新鮮な目で httpd.conf を見ていったら、やっぱり原因は httpd.conf だった。

 

f:id:yukibata:20170323223819p:plain

 

(誤)

  ServerName yukibata.com

  ServerName test.yukibata.com

(正)

  ServerName local.yukibata.com

  ServerName local.test.yukibata.com

 

でした。 local が抜けていました。

 

Apacheの挙動として、Virtualhost が複数設定されている場合、

振り分けが不明な場合に、先頭の振り分けに従う

というルールがあるようです。

 

ってことは、

いままで、

local.yukibata.com/home/ にアクセスして、

/usr/local/apache2/vhosts/local.yukibata.com/logs/access_log に来ているからOK

だと思っていた思っていたのは、

実は、全て不明だったから、たまたま先頭の Virtualhost 設定に従っていた

という状態だったんですね。。。

 

 

おわり

 

 

[ImageFrom]

http://manifoldcf.apache.org/ja_JP/

 

 

 

Symfony2.7 カンマ区切りの数値をバリデーションする

Symfony2 php 開発

Symfony2のお話です。

Symfony2には、デフォルトでバリデーションクラスがあり
「空チェック」や「数値チェック」「emailチェック」などができますが、

どうしても "1,3,4" のようなカンマ区切りでPOSTされた値に
バリデーションをかけたい場合はどうすればよいのか。

今回は、この例を挙げてSymfony2のカスタムバリデーションについてまとめます。


f:id:yukibata:20170129133355j:plain

まずは、既存のバリデーションから


FormのEntityクラスでアノテーションによるバリデーションをかけたい場合、
以下のように記述すると思います。

<?php
namespace BlogBundle\Form\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class ProfileEntity
{
    /**
     * @Assert\NotBlank(
     *     message = "年齢が空です",
     *     groups = {"profile"}
     * )
     * @Assert\Type(
     *     type = "numeric",
     *     message = "年齢が不正です",
     *     groups = {"profile"}
     * )
     * @Assert\Range(
     *     min = 0,
     *     max = 120,
     *     minMessage = "年齢が不正です",
     *     maxMessage = "年齢が不正です",
     *     groups = {"profile"}
     * )
     */
    private $profileAge;

これはユーザが入力した年齢にバリデーションをかける場合の例ですが、

"NotBlank" とか "Type" とか "Range" などは、
既に存在するバリデーションにオプションを渡す感じで実施できるものです。


既に備わっているバリデーションの種類は

 バリデータリファレンス | Symfony2日本語ドキュメント

をご覧ください。


実態はソース的には

 /vendor/symfony/symfony/src/Symfony/Component/Validator/Constraints

にあります。


Constraintsは「制約」という意味ですが、
まぁ「バリデーションの種類」って捉えるくらいでOKです。

アノテーションで @Assert\XXXXX って書くと

/vendor/symfony/symfony/src/Symfony/Component/Validator/Constraints

の下にある XXXXX って名前のバリデーションクラスを探しに行くんですね。


以上が、バリデーションの基本的な仕組みですが

Symfony2が元々用意していたバリデーション以外を実施したい場合は
独自で実装する必要があります。

独自でバリデーションを設定する方法は2つ


どのように独自でバリデーションを用意するかですが
2パターンあります。

1つ目は、callback によるものです。
上記で指定したEntityクラスに callbackメソッドを準備して、
その中で、バリデーションを実施するものです。

ですが、
このやり方は、2つ以上の変数に対してバリデーションを実施するものと
捉えておいた方がいいかもしれません。

ケースとしては

 $foods, $drink の2つに対して
 ⇒ "フードとドリンクは、合わせて3つまでです"

とかです。

2つ目は、カスタムバリデーションクラスを作成するものです
この記事のメイントピックです。

ケースとしては

 $hobbyList に "1,3,4" が入ってくる。

これが、「カンマ区切りの数値であるバリデーションを作成したい」です。

カスタムバリデーションを作成する


カスタムバリデーションの作成ですが、
やることはシンプルです。

Symfony2が元々持っている
Constraint「制約(バリデーションの種類)」に1つ追加してあげる
ということです。

/vendor/symfony/symfony/src/Symfony/Component/Validator/Constraints

に追加してもいいですが、
vendor配下を追加すると、面倒なこともあるので
「明示的に作ったよ」ということがわかるように、
自分で作ったバンドル配下に設置するのがオススメです。(必須じゃない)


では、
いよいよ「カンマ区切りの数値をバリデーションする」クラスを設定してみます。

1. ディレクトリ作成

ここでは、
自分で作った BlogBundle の配下に作ることで進めます。

mkdir -p ./BlogBundle/Component/Validator/Constraints

  BlogBundle
    ∟Component
       ∟Validator
          ∟Constraints

のように、ディレクトリを作ります。
あえて、本家のvendor配下に似せて作ってあります。

あとは、「制約クラス」と「バリデーションクラス」の作成です

2. 制約クラスを作成

vi ./BlogBundle/Component/Validator/Constraints/CommaSeparateInteger.php

<?php

namespace BlogBundle\Component\Validator\Constraints;

use Symfony\Component\Validator\Constraint as BaseConstraint;

/**
 * @Annotation
 * @Target({"PROPERTY", "METHOD", "ANNOTATION"})
 *
 * @author
 **/

class CommaSeparateInteger extends BaseConstraint
{
    public $emptyMessage = '不正な入力があります'; 
    public $message = '不正な入力があります';
}

ここでやっていることは2つです。

1つ目は、Symfony2の Constraint クラスを継承していること

  use Symfony\Component\Validator\Constraint as BaseConstraint;
  class CommaSeparateInteger extends BaseConstraint

の部分ですね。これは必須の作業です。


2つ目は、エラーメッセージを定義していること。
これは、任意ですが、とりあえず

  public $message = '不正な入力があります';

くらいを設定して、後で変更しましょう。

3. バリデーションクラスを作成

vi ./BlogBundle/Component/Validator/Constraints/CommaSeparateIntegerValidator.php

<?php

namespace BlogBundle\Component\Validator\Constraints;

use Symfony\Component\Validator\Constraint as BaseConstraint;
use Symfony\Component\Validator\ConstraintValidator as BaseConstraintValidator;

class CommaSeparateIntegerValidator extends BaseConstraintValidator
{

    public function validate($value, BaseConstraint $constraint)
    {
        // 空っぽの場合
        if (empty($value)) {
            $this->context->addViolation($constraint->emptyMessage);
        }

        // カンマ区切りの数値であるか
        $trimmedValue  = preg_replace("/( | )/", "", $value);
        $values = explode(',', $trimmedValue);
        foreach ($values as $oneValue) {
            if (preg_match("/^[0-9]+$/", $oneValue)) continue;
            $this->context->addViolation($constraint->message);
        }
    }
}

ここでもやっていることは2つです。

1つ目は、ConstraintValidator クラスを継承していること

 use Symfony\Component\Validator\ConstraintValidator as BaseConstraintValidator;
 class CommaSeparateIntegerValidator extends BaseConstraintValidator

の部分ですね。必須作業です。
これを指定しないと、Entityで読み込んでくれません。


2つ目は、validate メソッドを作成していること

 public function validate($value, BaseConstraint $constraint)
 {
 }

の部分です。これも必須作業です。

validate メソッドは未実装メソッドですので、この名前でメソッドを生成してください。
で、実際のバリデーションの内容をこのメソッドに記載していきます。

ここまでで作成は一通り完成ですが、
「バリデーションがOKかNGかは、どのように表現するのか」も合わせて書いておきます。

Symfony2.3とかであれば、true false を返していたようですが、
Symfony2.5以上の場合、

 $this->context->addViolation($constraint->message);

によって「バリデーションに引っかかったよ」という信号を送ることができます。
つまり、validate メソッドが空っぽであれば「常にバリデーションOK」ということになります。


私の例では

 空判定  ⇒ addViolation($constraint->emptyMessage);
 数値判定 ⇒ addViolation($constraint->message);

のようにしています。

4. バリデーションクラスを使うように設定

あとは、作成したバリデーションクラスを実際に Entity から呼び出せばOKです。

<?php
namespace BlogBundle\Form\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use BlogBundle\Component\Validator\Constraints as BlogAssert;

class ProfileEntity
{
    /**
     * @BlogAssert\CommaSeparateInteger(
     *     groups = {"profile"}
     * )
     */
    private $hobbyList;

上記のように
 
 use BlogBundle\Component\Validator\Constraints as BlogAssert;

を指定し、

 @BlogAssert\CommaSeparateInteger(

のような形式で利用することができます。


Symfony2.7の動きとしては

@Assert\xxxxx()
というアノテーションに出くわした際に、
Constraint配下にある「制約クラス名+Validator」という名前を見つけて、
その中の validate メソッドを実行という動きになっているんですね。



今回は、あくまで、どうしてもできない場合のカスタムバリデーションという話ですが
既存のバリデーションクラスも非常に豊富ですので、
やりたいバリデーションをしてくれるクラスが無いか、一度チェックしてみるといいですね。




おわり


[Image From]
http://loveendures.me/validation/

プロダクト開発におけるテストってなぜ難しい?

開発 テストの話

ソフトウェアを開発するときに切っても切り離せない項目の1つが「テスト」です。

「バグ」があれば、ソフトウェアの価値は下がりますし、何よりバグのあるソフトウェアを認めてくれるようなことなんてありません。

 

しかしながら、「バグ」は永遠の友達であって、

開発をすれば、一生ついてきます。

 

f:id:yukibata:20161112131057j:plain

 

今回は、テストの専門家ではない私ですが、日々の開発プロセスで感じている「テスト」について書いていきます。

 

そもそもテストって何か?

 

プロダクト(ソフトウェア、アプリケーションなど)を開発するのは簡単なことではありません。

「こう作りたい」という要求の下、開発者は「どうつくるか」を一生懸命考え、作っていきます。そして、ときには複雑で面倒な機能を作ることもあります。

 

必死に考えても「想定外」といった部分は、必ずと言っていいほど出てきます。

プログラムが正しく動かない「バグ」です。

 

f:id:yukibata:20161112131117j:plain

 

バグが認められるプロダクトはありませんので

リリースをする前にすべてのバグを消す必要があり、テストを行う必要があります。

 

では、テストはどのタイミングでどのようなテストを行えばよいのか、これが非常に難しい課題になるのです。

 

なぜテストは難しい?

 

答えは、条件が異なるから難しいのです。

 ・メンバーが違う

 ・納期が違う

 ・プロダクトが違う

同じものはありません。だから正解が無いのです。

 

例えば、

一気に開発を行って、各メンバーが作ったプログラムをくっつけて、「さぁテストするぞ!」という状況があったとします。

予め用意していた100個のテストをしていて、50個目でバグを見つけ、プログラムを修正しました。

 

さて、テストの続きは51個目からやればよいでしょうか?

実は23個目が、バグの修正によって、別のバグを生んでいる可能性がないでしょうか?

1個目からやり直し?テストが1500個あったらどうする?

バグの修正の影響範囲を確認して、対象を絞ればよい?

その絞り方は本当に正しい?100%の自信がある?

 

また、致命的なバグがあったらテストがいったんストップしてしまいます。

じゃあ事前にある程度のテストをしておくべき?

ある程度って何?それはいつやるの?

不安は尽きません・・・・

 

テストって難しいのです

 

みんなどうやってテストをしているの?

 

前述でテストのやりかたに正解は無いと書きましたが、

「考え方」はあります。

 

f:id:yukibata:20161112131151j:plain

 

 ・1つのプログラムを作ったら、そのときにテストする

 ・1つの機能を作ったら、そのときにテストする

 ・すべてのプログラムがそろったら、そのときにテストする

 

という、プログラムの「単位」に分けてテストをすることです。

「コンポーネントテスト」「単体テスト」「ユニットテスト」「結合テスト」「シナリオテスト」とったように、それぞれに名前がついています。

 

これらのテストを「リソース」や「スケジュール」を踏まえ、

どのテストをいつ実施するかをチームで決めておいて実施するというパターンが多いと思います。

 

しかしながら、どんなプロセスを踏んでも

やっぱりバグは出てしまいます。

そのたびにプロセス改善を実施します。

 

私自身も、いろいろなバグに出会い、冷や汗をかいた経験がたくさんあります。

これから、何度かに分けてテストについて書いていきますので、

続編をお読みください!

 

 

 [Image From]
http://hdwpro.com/tag/friend
http://www.skepticalob.com/2013/06/surprise-there-were-homebirth-deaths-in-the-dutch-study-that-claimed-to-show-that-homebirth-has-lower-risks.html/surprised-girl
http://www.kathyloperevents.com/gwm/

 

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

開発 apache php

 

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を使ってバーチャルドメイン構築のチェックポイント

開発 centos apache

 

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

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

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

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

 

f:id:yukibata:20160922175719p:plain

 

 

 

環境について

 

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

 

   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/