http://localhost/health
のようにURLに .html
のような拡張子を付けないでアクセスできるようにしたいと思ったので、そのときに作業したことをメモとしてのこしておきます。
準備
今回はapacheの環境をdockerを使って用意しました。なのでまずはapacheのdockerコンテナを立ち上げます。
docker run -d httpd:2.4.62
コンテナが立ち上がったら、httpd.confをdockerコンテナからコピーします。
docker cp $(docker ps | awk '$2=="httpd:2.4.62" {print $1}'):/usr/local/apache2/conf/httpd.conf $PWD
設定ファイルをコピーしてきたらコンテナを停止しておきます。
docker stop $(docker ps | awk '$2=="httpd:2.4.62" {print $1}')
httpd.confを編集
拡張子なしでアクセスできるようにするためリライト条件を設定します。
httpd.conf
<Directory "/usr/local/apache2/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /[^./]+$
RewriteRule (.*) $1.html
RewriteRuleを使用するため、mod_rewriteモジュールを有効化します。
httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
ポートを8080に変更します。ここは変更しなくても問題ないです。
httpd.conf
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 8080
コンテナイメージを作成
設定ファイルの編集が終わったら、次に動作確認用として適当なファイルを作成します。
health.html
<html><body><h1>ok</h1></body></html>
新しい設定ファイルと動作確認用のファイルを含んだDockerfileを作成します。
Dockerfile
FROM httpd:2.4.62
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./health.html /usr/local/apache2/htdocs/health.html
作成したDockerfileを使用してビルドします。
docker build -t custom-httpd .
ビルドしたイメージからコンテナを起動。
docker run -d -p 8080:8080 custom-httpd
動作確認
最後に動作確認をします。確認したいURLに拡張子を省略してアクセスして404がかえってこなければ成功です。
$ curl -v http://localhost:8080/health
* Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /health HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 31 Dec 2024 02:19:52 GMT
< Server: Apache/2.4.62 (Unix)
< Last-Modified: Tue, 31 Dec 2024 00:57:54 GMT
< ETag: "26-62a866b501702"
< Accept-Ranges: bytes
< Content-Length: 38
< Content-Type: text/html
<
<html><body><h1>ok</h1></body></html>
* Connection #0 to host localhost left intact