Apache 

# Apache インストール
[Red Hat Linux or CentOSで実施]

```
sudo yum -y install httpd
```
インストールに成功したかを確認する

```
pm -qa | grep httpd

httpd-2.4.6-88.el7.x86_64
httpd-tools-2.4.6-88.el7.x86_64
```

Apacheの状態を確認する。
まだ走っていないので、以下の出力が出てくるはず。

```
/bin/systemctl status httpd.service 
```
もしくは、

```
service httpd status

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)
```


# Apache 走る
上記と同じコマンド'service'もしくは'/bin/systemctl'で走らせる。

```
service httpd start
```

もう一度Apacheの状態を確認する。

```
service httpd status

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-03-16 05:07:50 UTC; 26s ago
     Docs: man:httpd(8)
           man:apachectl(8)
```

'Running'の単語が確認できればOK。


# Apache Port 80
```
sudo netstat -tupan | grep -i httpd
```

ポートが８０になっているのを確認できればOK。
なので、ユーザーからアクセスされるときは、http 

|Protocol  |Port  |
|---|---|
|http  |80  |
|https  |443  |


# Apache Port 443 入れ方
```
sudo yum install mod_ssl

sudo netstat -tupan | grep -i httpd
```

ポート４４３が確認できるはず。
できなければサーバーの構築を見直す必要があるかも。

# Config

```
# http::80 の設定ファイル
 ls /etc/httpd/conf/httpd.conf
# https::443 の設定ファイル
 ls /etc/httpd/conf.d/ssl.conf
```

vim コマンドで設定ファイルを読む／書く前に、以下のパッケージをインストールすることをオススメ。

```
sudo yum install vim vim-enhanced
```
ファイルが読みやすくなるから。

```
vim /etc/httpd/conf/httpd.conf
```
Configファイルの中身をちょっと見てみると、

|キー  |デフォルト値 | 意味 |
|---|---|---|
| ServerRoot  |/etc/httpd  | コンフィグ（設定）ファイルを見る場所|
| Listen | 80 | ポート番号 |
| Include | conf.modules.d/*.conf | モジュールをい見る場所 |
| User | apache | Apacheを走る時のユーザー |
| Group | apache | ユーザーが所属しているグループ名 |
| ServerAdmin | root@localhost | Apacheがエラー表示を行う場合などに、問い合わせ先となる連絡先メールアドレス |
| DocumentRoot | /var/www/html | コンテンツを配置しておく場所。ユーザーのリクエストに対してコンテンツを返すがそのコンテンツの場所|
| ErrorLog | logs/error_log | エラーをログに保存するパスとファイル名 |
| LogLevel | warn | エラーが起きた時、どのエラーレベルをもとにエラーログに記録するかの設定。詳細はこちら|
| IfModule | 色々 | もしあるmodulesが使われていた場合に実施する。詳細は以下を|

# Apache LogLevel テーブル
https://httpd.apache.org/docs/2.4/ja/mod/core.html#loglevel を参照

|レベル | 説明 | 例 |
|----|------|-----|
|emerg	| 緊急 - システムが利用できない	|Child cannot open lock file. |Exiting (子プロセスがロックファイルを開けないため終了した) |
|alert	| 直ちに対処が必要	| getpwuid: couldn't determine user name from uid (getpwuid: UID からユーザ名を特定できなかった) |
|crit	| 致命的な状態	| socket: Failed to get a socket, exiting child (socket: ソケットが得られないため、子プロセスを終了させた) |
|error	| エラー	| Premature end of script headers (スクリプトのヘッダが足りないままで終わった) |
|warn	| 警告	| child process 1234 did not exit, sending another SIGHUP (子プロセス 1234 が終了しなかった。もう一度 SIGHUP を送る) |
|notice	| 普通だが、重要な情報	| httpd: caught SIGBUS, attempting to dump core in ... (httpd: SIGBUS シグナルを受け、... へコアダンプをした) |
|info	| 追加情報	|"Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..." (「サーバは負荷が高い、 (StartServers や Min/MaxSpareServers の値を増やす必要があるかも)」) |
|debug | デバッグメッセージ | "Opening config file ..." (設定ファイルを開いている...) |

設定したレベル以上のエラーが起きた場合のみログに記録される。
例えばエラーレベルはDebugの場合、それ以上の事が起きればログに記録される。

# Apache IfModules
Apacheはいくつかの機能をモジュールことに管理（保存／削除／読み込み）している。
場合によってはサーバーごとにApacheの使い方が違ってくると、modulesの管理が必須になってくる。
よって、設定ファイルで各モジュールに対する挙動をのせる必要があるが、
そんなに滅多に使わないと思う。。。


# Apache Log読む

```
tail -f /var/log/httpd/access_log
```