Apacheログローテーションとは?

logroteとは、ログファイルのローテーションを行うプログラム
ログファイルを別名でバックアップし、古くなったログファイルを順次削除する
apacheをパッケージからインストールした場合は、ログローテーションは自動でされる。以下のように表示されればインストールされている
$ rpm -qa|grep logrotate
logrotate-3.14.0-4.el8.x86_64

/var/log/httpd/*_log : ローテートするファイルを指定
daily: ローテーションを行う間隔を指定 daily, weekly, monthlyがある
rotate 2: 保存されるアーカイブファイルの数
missingok: missingokはログファイルがなくてもエラーにならない、nomissingokはログファイルがないとエラー
ifempty: ログファイルが空でもローテート、noifemptyは空だとローテーションしない
dateext: アーカイブされたファイルの末尾に年月日が付与される
postrotate: endscripまでのコマンドをログローテーション後に実行
/sbin/service httpd reload > /dev/null 2>/dev/null || true: httpdの再起動を行う処理。httpdが新たに作成したログファイルに記録し始める。
compress : gzipで圧縮
create 0644 hoge hoge: ローテーション後、空のログファイル作成 [パーミッション][ユーザ名][グループ名]
su root root : ローテートするユーザをrootに指定

なるほどねー 
一見複雑そうに見えるが、一つ一つ潰していくと、理解が深まるな

Apache virtualhostに記入する項目

### *.confの書き方
– Include: インクルード
e.g. Include /etc/httpd/conf/httpd.conf

– PidFile: PidFileは、サーバーがプロセスID(PID)を記録するファイル

– ScoreBoardFile: 他のプロセスから統計情報にアクセスできるようになる

– KeepAliveTimeout: 要求がなされてから接続を閉じるまでの、サーバーが待機する時間を秒数で設定。サーバーが要求を受信すると、代わりにTimeoutディレクティブが適用される。デフォルトでは、KeepAliveTimeoutは15秒に設定。

– MinSpareServers、MaxSpareServers: prefork MPMでのみ使用。着信要求の数に基づいて適切な数のスペアサーバープロセスを維持することで、 Apache HTTP サーバー が検出された負荷に対して動的に適応する方法を調整

– StartServers: 起動時に作成されるサーバー プロセス数を設定。Web サーバーがトラフィックの負荷に基づいて動的にサーバー プロセスを停止したり作成したりするので、このパラメータを変更する必要はない。 Web サーバーは、起動時に、preforkMPM 用に 8 サーバープロセスを、 workerMPM用に 2サーバープロセスを起動するように設定される。

– IfModule mod_ssl.c: mod_sslの設定。IfModuleは指定したモジュールが存在したときに処理される

– Listen: Apache がクライアントからのリクエストを受け付けるポート番号を指定するのに使用
以下のように複数指定することもできる
Listen 80
Listen 8080

– Group: サーバーがリクエストに応答する際に所属するグループ

– User:サーバがリクエストに応答する際に用いるユーザ ID

### VitualHostの書き方
– ServerAdmin: サーバがクライアントに送るエラーメッセージに含める電子メールアドレス
e.g. ServerAdmin root@localhost
– ServerName: 自分自身のホスト名を表す時に使用するホスト名とポート番号を設定
– DocumentRoot: Webから見えるメインのドキュメントツリーになるディレクトリ
– ErrorLog: エラーログを出力する場所を設定
– CustomLog: アクセスログを出力する場所, combinedはログのフォーマット
– ScriptAlias: CGI(Perl)を利用するための設定
– SSLEngine: On/OFFで、SSLを有効にするかどうかを指定
– SSLProtocol:使用するSSLプロトコルのバージョンを指定
– SSLCipherSuite: SSL機能で使用可能とする暗号種別を指定。ディレクティブに指定した暗号種別とクライアントが使用できる暗号種別との間で一致するものがあれば,SSL通信が確立されHTTPリクエストを受信
– SSLCertificateFile: Webサーバの証明書を格納したファイル名を指定。サーバ認証するためにWebサーバの証明書を先頭として,中間CA(認証局),ルートCAの順にCAの証明書を連結することができる。証明書はPEM形式。
– SSLCertificateFile: Webサーバの秘密鍵のファイル名を指定。秘密鍵のファイルはPEM形式。RSA暗号を利用した秘密鍵のファイルおよび楕円曲線暗号を利用した秘密鍵のファイルについてそれぞれ一つ指定
– SetEnvIf:クライアントからのリクエストを基に環境変数を定義

なるほど、中々いい感じ。

Apache virtualhostの書き方

/etc/httpd/conf/httpd.conf が大元となっており、/etc/httpd/conf.d/*.confを作成する。拡張子は.conf
個別のモジュールは /etc/httpd/conf.dや /etc/httpd/conf.modules.d に保存されている

<VitualHost *:80>
	ServerName any
	DocumentRoot /var/www/html
</VitualHost>
<VitualHost *:80>
	ServerName a.test
	DocumentRoot /var/www/html/site_a
</VitualHost>

– 文法テスト
apachectl configtest
– 再起動
systemctl restart httpd

/etc/httpd/conf/httpd.confを編集する方法もある

Listen 80
NameVirtualHost *:80

なるほど、設定項目を一つ一つ洗っていくしかないな。

systemdの*.serviceの書き方

ディレクトリ: /etc/systemd/system/*.service

[Unit]
Description=Load dump capture kernel
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/opt/bin/run-kexect.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Unit, Service, Installのセクションから成り立ち、Unit, Installは共通的な設定内容、Serviceはサービスを実行するため

### Unitセクション
Description: ユニットの説明
After/Bifore: 指定したユニットの実行順番。Afiter=bar.serviceの場合、bar.serviceのstart-up処理が終わるまで実行しない
Requires/Wants: ユニットの依存関係の定義 Wants=bar.service など
その他: man 5 systemd.unit

### Serviceセクション
Type: Typeには以下の5つがあり、設定がなければsimpleがデフォルトで使用される
L simple, forking, oneshot, notify, dbus
ExecStart: 実行するコマンドラインを書く
RemainAfterExit: typeがoneshotの場合は、コマンド実行後もステータスをアクティブにする

### Installセクション
WantedBy/RequiredBy: systemctl enable xxxでユニットをenableした時に、.wants, .requiredにシンボリックリンクを作る
/etc/systemd/system/multi-user.target.wants/

なるほど

OSのユーザ作成

$ less /etc/passwd

vagrant:x:1000:1000::/home/vagrant:/bin/bash
ken:x:500:100::/home/ken:/bin/bash

ユーザ名: ken
パスワード: x
ユーザID: 500
グループID: 100
コメント:
ホームディレクトリ: /home/vagrant
ユーザが利用するシェル: /bin/bash

$ sudo useradd -u 2000 -g 2000 -m -s /bin/bash hpscript
-m は ユーザ名でホームディレクトリを作成
$ cat /etc/passwd

パスワード付与
$ sudo passwd hpscript

なるほどー 理解した

OSのグループ、ユーザー

Linuxでは複数のユーザが使用することを想定しているため、グループを作って、一括でまとめて管理できるようにしている。

### グループ一覧の確認
$ cat /etc/group
e.g.
linuxacademy:x:1001:student
グループ名: linuxacademy
パスワード: x(セキュリティ上表示しない)
グループ番号(GID): 1001
所属メンバー一覧: student

### グループを操作
groupaddコマンド: グループを追加
groupmodコマンド: グループを編集
groupdel: グループを削除

### グループにメンバーを追加・解除
usermodコマンド

### ファイルやディレクトリに対してグループのアクセス権を設定
chmodコマンド

### グループ作成
-g: グループIDを指定する
$ sudo groupadd -g 2000 hpscript

なるほどー 実際に手を動かして大分理解した。

EC2 RHEL8にpostgresqlを入れたい

コンソール上でRHEL8のEC2を起動する

$ ssh ec2-user@* -i ~/.ssh/*.pem
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.5 (Ootpa)

### リポジトリの追加
$ sudo yum -y localinstall https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

### postgresqlインストール
$ yum install postgresql postgresql-server
– バージョン確認
$ rpm -qa | grep postgres
postgresql-server-10.19-1.module+el8.6.0+13642+78853f5a.x86_64
postgresql-10.19-1.module+el8.6.0+13642+78853f5a.x86_64
– アカウントが作成されていることを確認
$ cat /etc/passwd | grep postgres
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

### DBセットアップ
$ sudo su – postgres
$ postgresql-setup initdb

### 起動及び自動起動の設定
– プロセス確認
$ ps -ef | grep postgres
$ systemctl status postgresql -l –no-pager
$ sudo systemctl start postgresql
$ systemctl status postgresql -l –no-pager
$ sudo systemctl enable postgresql

### Postgresへログイン
$ su – postgres
$ sudo su – postgres
$ psql
postgres=#

OKKKKKKKKKKKK
postgresqlのバージョンが気になるので要確認

.htpasswdとは

Apacheで基本認証を行うためのユーザ/パスワードの作成/削除等を行うコマンド

BASIC認証のID/Passwordを格納するファイルのことね。OK

php_valueとは

php.iniのファイルをApacheで上書きする

使い方例

php_value auto_prepend_file /path/to/my_prepend.php
php_value memory_limit 512M

なるほど、面白いですね。