ウェブサーバーしたい(httpd)
1$ docker run -d -p 8081:80 --name my-httpd httpd
2$ docker exec -it my-httpd bash
3(my-httpd) $ httpd -v
4Server version: Apache/2.4.56 (Unix)
5Server built: Mar 7 2023 20:23:05
6(my-httpd) $ pwd
7/usr/local/apache2
ウェブサーバーとして一般的なApacheの設定方法を確認してます。
ここではDockerで起動したApacheサーバーのコンテナを使って、設定内容を調べています。
()[…/docker/docker-httpd]
サーバーを操作したい
1$ httpd -k start
2$ httpd -k stop
3$ httpd -k graceful-stop
4$ httpd -k restart
Apacheコンテナ内にはhttpdコマンドがありました。
サーバーを停止(httpd -k stop)したらコンテナも停止しました。
一般的なサーバの場合、serviceコマンドやapachectlコマンドで操作するような気がします。
設定ファイルを確認したい(httpd.conf)
1$ find . -name *.conf | grep httpd
2./conf/httpd.conf
3./conf/extra/httpd-*.conf # 省略
4./conf/original/httpd.conf
5./conf/original/extra/httpd-*.conf
設定ファイルはhttpd.confです。
上のコマンドでは、拡張子が*.confで、httpdの文字列を含むパスを検索しています。
メインの設定ファイル(./conf/httpd.conf)とモジュール用の設定ファイル(./conf/extra/httpd-*.conf)が見つかりました。
また、./conf/original/以下のファイルは(たぶん)オリジナルの設定ファイルです。
設定ミスした場合などは、このファイルとの差分を調べたり、このファイルで上書きしてリセットすればよさそうです。
設定ファイルには各種の「ディレクティブ」がすでに書き込まれていて、サーバー設定の確認がができます。 また、このディレクティブを書き換えることで設定を変更できます。
設定ファイルのシンタックス確認(nginx -t)
1$ httpd -t
設定ファイルのシンタックス(=書き方)が正しいかチェックできます。 設定を書き換えた場合、サーバーを再起動する前には必ずチェックするとよいです。
公開用ディレクトリを確認したい(DocumentRoot)
1# DocumentRoot 絶対パス
2DocumentRoot /usr/local/apache2/htdocs
外部に公開するコンテンツをディレクトリはDocumentRootで設定します。
ドキュメントルートは絶対パスで指定します。
ポート番号を確認したい(Listen)
1# Listen ポート番号
2Listen 80
3Listen 443
外部からアクセスするときのポート番号はListenで設定できます。
Listen ポート番号を追加することで複数のポートを設定できます。
HTTPは80番、HTTPSは443番がデフォルトのポート番号です。
ディレクトリのアクセス権を確認したい(Directory / File)
1# <Directory パス>...</Directory>
2# <File パス>...</Directory>
3
4# 全体(/)のアクセス権の設定
5# システム全体は外部からアクセスできないように設定
6<Directory />
7 AllowOverride none
8 Require all denied
9</Directory>
10
11# コンテンツ領域(/usr/local/apache2/htdocs/)のアクセス権の設定
12# コンテンツ領域(とその下)は外部からアクセスできるように設定
13<Directory "/usr/local/apache2/htdocs">
14 Options Indexes FollowSymLinks
15 AllowOverride None
16 Require all granted
17</Directory>
18
19# .htではじまるファイルのアクセス権の設定
20# ワイルドカード(*)を使ってパスを指定できる
21# .htaccessや.htpasswordは外部からアクセスできないように設定
22<File ".ht*">
23 Require all denied
24</File>
外部からのアクセス権限はDirectoryやFileで設定できます。
ファイルシステム全体や.htaccessのようなファイルは外部からのアクセスNGにしつつ、
公開用コンテンツ(=ドキュメントルート以下)は外部アクセスOKにできます。
ログフォーマットを確認したい(LogFormat / CustomLog)
1<IfModule log_config_module>
2 # LogFormat "フォーマット文字列" ログ形式の名前
3 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
4 LogFormat "%h %l %u %t \"%r\" %>s %b" common
5
6 # CustomLog "保存先" ログ形式の名前
7 CustomLog "logs/access_log" combined
8</IfModule>
ログ形式はLogFormatで設定できます。
httpd.confにはcommon形式とcombined形式はプリセットとして定義されていました。
アクセスログの保存先とフォーマットはCustomLogで設定できます。
保存先を相対パスで指定した場合、ServerRootからの相対パスになります。
HTTPS使いたい
1LoadModule ssl_module modules/mod_ssl.so
2Include conf/extra/httpd-ssl.conf
3
4<IfModule ssl_module>
5 # SSL証明書の設定
6</IfModule>
HTTPSを使いたい場合は、mod_sslモジュールを有効にします。
ユーザーごとのディレクトリを使いたい
1LoadModule userdir_module modules/mod_userdir.so
2Include conf/extra/httpd-userdir.conf
ユーザーごとのディレクトリを使いたい場合は、mod_userdirモジュールを有効にします。
LoadModuleでモジュールを有効にし、Includeで設定ファイルを読み込みます。
ユーザーごとの公開コンテンツ領域はUserDirで設定できます。
デフォルトはpublic_htmlになっているので、~/public_html/以下に配置したコンテンツを公開できます。
パスワードをかけたい
特定のディレクトリに.htaccessを配置し、パスワードを使ったアクセス制限を設定できます。
パスワード認証にはBASIC認証とDigest認証の2種類があります。
調べてみると、現在はHTTPS通信ができる場合はBASIC認証でOK、できない場合はDigest認証にするとよいみたいです。