カレントディレクトリをDocumentRootにして確認

表題をhttpd@Dockerで行う。

■ 環境

  • httpd 2.4.29
  • Docker for Mac
  • Mac OSX El Capitan

■ httpd@Docker

最新版のDockerコンテナイメージを取得する。

$ docker pull httpd

自身の場合は、下記のオプションを指定して実行することが多い。

  • -ti
  • –rm
  • -p 8080:80
  • -v `pwd`:/usr/local/apache2/htdocs/

実行する時は下記のようになる。

docker run -ti --rm -p 8080:80 -v `pwd`:/usr/local/apache2/htdocs/ httpd

デーモンでの起動はせずに、ログをターミナルで見ながら確認する。ちょっとした時に確認するのに楽だ。

以上。

■ 関連

httpd@Dockerの起動方法

AmazonLinuxにmod_sslをインストール

表題の通り。

■ 環境

  • Apache httpd 2.4.27
  • Amazon Linux

■ mod_ssl

SSLのモジュールを入れたかったのだが、パッケージ名がわからず四苦八苦。

$ sudo yum install mod_ssl
Resolving Dependencies
  :
Error: httpd24-tools conflicts with httpd-tools-2.2.32-1.9.amzn1.x86_64
Error: httpd24 conflicts with httpd-2.2.32-1.9.amzn1.x86_64
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
$

確かにインストールしたい環境は”httpd24“を入れている。

$ sudo yum search mod_ssl
Loaded plugins: priorities, update-motd, upgrade-helper
================ N/S matched: mod_ssl ================
mod_ssl.x86_64 : SSL/TLS module for the Apache HTTP Server

  Name and summary matches only, use "search all" for everything.
$

さてパッケージ名はなんであろうかと考える。

$ sudo yum search ssl
================ N/S matched: mod_ssl ================
  :
mod24_ssl.x86_64 : SSL/TLS module for the Apache HTTP Server
mod_ssl.x86_64 : SSL/TLS module for the Apache HTTP Server
  :
$

どうやらこれが正解のようである。

$ sudo yum install mod24_ssl

これでインストールができた。満足である。

以上。

proxy.confをオフ

Apache httpdにおいて表題の通り。

■ 環境

  • Apache httpd 2.4.27
  • Amazon Linux

■ error_log

再起動時等に、error_logに下記のメッセージが表示されているのが気になった。

[lbmethod_heartbeat:notice] [pid 3164] AH02282: No slotmem from mod_heartmonitor

これはなんだろう?と思いつつ調べていくと、下記の設定ファイルで読み込まれているモジュールのようである。

$ cat /etc/httpd/conf.modules.d/00-proxy.conf
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
$

そもそもproxyとしては利用していないので、これらのモジュールは不要である。よって設定ファイル名を”.conf“から変更し、”Include“されないようにした。これで再起動等をしても前述のメッセージは表示されないようになった。

以上。

httpd@Dockerの起動方法

表題の件について。過去2回ほど同じネタをあげているのだが、その時のメモを見て同じ方法で起動しようとしたが、起動できなかったのでメモしておく。

■ 環境

  • httpd 2.4.27
  • Docker for Mac
  • Mac OSX El Capitan

■ httpd

コンテナは下記で取得した。

$ docker pull httpd

以前のエントリの通り下記で起動しようとしたのだが、起動できずに落ちてしまう。

$ docker run -ti --rm --name httpd -p 10080:80 httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Aug 22 10:14:51.095259 2017] [mpm_event:notice] [pid 1:tid 139888904910720] AH00489: Apache/2.4.27 (Unix) configured -- resuming normal operations
[Tue Aug 22 10:14:51.095353 2017] [core:notice] [pid 1:tid 139888904910720] AH00094: Command line: 'httpd -D FOREGROUND'
[Tue Aug 22 10:14:51.221791 2017] [mpm_event:notice] [pid 1:tid 139888904910720] AH00492: caught SIGWINCH, shutting down gracefully
$

さてどうしたものかと探してみると、過去のISSUEがあったので参考にしてみた。

とりあえず”-d“を付けて起動してみることにした。

$ docker run -dti --rm --name httpd -p 10080:80 httpd
be3eaf245ecb080b3d3ed30fe5b61f582c6d693b82bfd31d4051f24210a06e08
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                   NAMES
be3eaf245ecb        httpd               "httpd-foreground"   4 seconds ago       Up 2 seconds        0.0.0.0:10080->80/tcp   httpd
$

起動してくれた。ログも確認してみる。

$ docker logs httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Aug 22 10:26:58.420633 2017] [mpm_event:notice] [pid 1:tid 139631637636992] AH00489: Apache/2.4.27 (Unix) configured -- resuming normal operations
[Tue Aug 22 10:26:58.420751 2017] [core:notice] [pid 1:tid 139631637636992] AH00094: Command line: 'httpd -D FOREGROUND'
$

さて、しばらく触っていない間にどんな変更があったのであろう。とりあえず検証環境として使いたいだけだったので詳細はまた別途調べてみることにする。

-d“の時に”–rm“も以前は使えなかったような気がするのだが、それも気になるし。

以上。

■ 関連

ApacheHttpd@Docker

httpd@Docker

使用可能なディレクティブ一覧

Apache httpdにおいて表題の件。知らなかったのでメモしておく。

■ 環境

  • Apache httpd 2.4.27
  • Amazon Linux

■ -L

ヘルプを見ていて気がついた下記のオプション。

$ httpd -h
  :
  -L                 : list available configuration directives
  :
$

試しにやってみた。

$ httpd -L
<Directory (core.c)
    Container for directives affecting resources located in the specified directories
    Allowed in *.conf only outside <Directory>, <Files>, <Location>, or <If>
  :
SecHashParam (mod_security2.c)
    Set Hash parameter
    Allowed in *.conf anywhere
$

ズラズラと大量にディレクティブが表示されたが、どのモジュールで使用可能になっているのかも一緒に表示してくれている。

この環境はModSecurityもインストールしているので、”mod_security2.c“も含まれた形になっていた。

以上。