ウェブサーバーしたい(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認証にするとよいみたいです。