Apacheの構築など

#はじめに
こちらではApachenのインストールから設定まわりの紹介をしていきたいと思います。



#前提環境
[VirtualBox](https://www.virtualbox.org/)
[Vagrant](https://www.vagrantup.com/)
[Cent0S7](https://www.centos.org/download/)

[こちら](https://qiita.com/I_S-657/items/63528d09995138c9e46d)で構築の紹介をさせていただいてます参考にどうぞ


#手順
ここではyumを使ってインストールする方法を紹介していきます

```
$ sudo yum install -y httpd
```

コマンドの内容ですが「sudo(ルートユーザ)」として「yum」を使って「インストール」します内容は全て「-y(yes)」で「httpd」をという事です。
daemonがどうとかも話したいですがここでは割愛します・・・

コマンドで起動します。

```
$ sudo service httpd start
```

Apacheのコマンドを書いておきます。

| 　　コマンド 　| 　　内容　　　　　　　| 
|:-----------|------------:|
| service httpd start    |Apache起動　　　　     |       | 
| service httpd restart |  Apache再起動 　　　|
|service httpd stop|Apache停止　　　　|
|service httpd status|Apacheが起動しているかの確認|

webから
http://XXX.XXX.XXX.XXX(ipアドレス):XXXX(ポート番号)
または
http://localhost:xxx
でアクセスしてみてデフォルトページにアクセスできたら成功です。

#設定
さてインストールが終わったので次は設定の紹介をしていきます。
インストールから一歩踏み込んだ内容を書いていきます。

##Apacheの自動起動
上記の方法だとサーバを起動するたびにApacheも起動しなおさないといけません。
そのため自動起動の設定します。
ここでは「systemctl」を使った方法を紹介します。

```
$ systemctl enable httpd
```
再起動して確認してみてください。
起動できていれば成功です。

簡単にコマンドの一覧を載せておきます。
{Unit}はそれぞれのソフトを入れてください（今回はhttpd）


|  　　　コマンド　 |　　 　　　 内容　　|
|:-- |:--|
|systemctl enable {Unit}|サービス自動起動の設定|
|systemctl disable {Unit}|サービス自動起動の無効|
|systemctl is-enabled {Unit} |サービス自動起動設定確認|

##設定ファイル
続いて設定ファイルまわりの説明をしていきたいと思います。
ここで説明するのは「httpd.conf」の設定になります。
こちらのファイルですが、CentOS７なら

```
/etc/httpd/conf/httpd.conf
```

に格納されています。

```
DocumentRoot "/var/www/html"
```
こちらはApacheが起動したら読みこむファイルになります。
試しにこのhtmlフォルダにindex.htmlを入れてみてください。

```html:index.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
     <title></title>
</head>
<body>
    test!
</body>
</html>
```

保存してアクセスしてみてください
<img width="1280" alt="スクリーンショット 2020-04-08 12.42.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608443/9cee6574-8527-14d0-0a73-f734346d0114.png">

表示されたら成功です。

こちら編集する事で任意のフォルダをドキュメントルートとして設定できます。

続いて

こちら例ですが

```config:

<Directory "/var/www">　#ディレクトリ　"/var/www"のオプションを設定する
    AllowOverride None 
    #Allow open access:
    Require all granted
</Directory>
```

それぞれの内容について軽く触れたいと思います。

AllowOverride
こちらは下位の設定（.htaccess）を有効にするかどうかの設定ができます

|  　　　設定値 |　　 　　　 内容　　|
|:-- |:--|
|None|無効にする|
|All|有効にする|

限定的に制限をかけるとかもありますが全て書くと膨大な量になるので割愛します。

Require 
こちらはアクセス制御の設定になります。

|設定値　　　　　　　　|　　 　　　 内容　　|
|:-- |:--|
|all granted|全てのアクセスを許可|
|all denied|全てのアクセスを拒否|
|ip  {IPアドレス} |指定のIPアドレスのみ許可|
|method ~ |特定のメソッドのみ許可|

詳しく書きたいですがこちらも書くと膨大になるので割愛いたします。

#Https
こちらではhttpsでの設定をしていきます。
今回は自己署名なので簡単に作ってしまいます。
（証明書は本来お金を払って取得するのであくまで練習という事になります）
Https設定するのは　mod_sslというモジュールが必要です


```
$ sudo yum -y install mod_ssl
```

root権限じゃないと実行できないので変えておきましょう

```
$ su
```

秘密鍵作成 

```
# openssl genrsa 2024  > server.key
```

CSRの作成

```
# openssl req -new -key server.key -sha256 -out server.csr
```

CSRを元に公開鍵の作成

```
# openssl x509 -in server.csr -days 365 -req -signkey server.key -sha256 -out server.crt
```

任意のフォルダに入れます

```
#mkdir /etc/httpd/conf/ssl.public
#mkdir /etc/httpd/conf/ssl.private
#mv server.crt /etc/httpd/conf/ssl.public/
#mv server.key /etc/httpd/conf/ssl.private/
```

公開鍵と秘密鍵を指定します

```
# vi /etc/httpd/conf.d/ssl.conf
```

内容を変更

```conf:ssl.conf
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/conf/ssl.public/server.crt
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/conf/ssl.private/server.key
```

再起動

```
systemctl restart httpd
```

httpsで接続してみましょう

chrome
<img width="1280" alt="スクリーンショット 2020-04-08 15.36.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608443/09175f35-dec5-80ec-64b6-081889b5440c.png">

safari
<img width="1280" alt="スクリーンショット 2020-04-08 15.37.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608443/059bdec4-6795-2d0a-4d33-01c1119ce10d.png">

成功です
表示はアレですが・・・

練習のためキーの長さも適当だしSAN属性もついていないです・・・

証明書の設定時にヒントになればと思います。

##おまけ
Httpsで接続するさいにポートを指定しますがそれは

```
/etc/httpd/conf.d/ssl.conf
```
で設定できます

```conf:ssl.conf
Listen 443 https
```

こちら初期設定が「443」を任意に変更する事もできます。
その際はApacheの再起動も忘れずに。

以上、本来自己署名証明書は通常使うものではないのでちゃんと認証された画面ではありませんが、余裕があれば作っていきたいと思います