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“も含まれた形になっていた。

以上。

ModSecurity requires mod_unique_id to be installed.

ModSecurityを入れた環境で、表題のエラーが出ていた。

■ 環境

  • ModSecurity 2.9.2
  • Apache httpd 2.4.27
  • Amazon Linux

■ error_log

下記のようなメッセージが表示されている。

[Mon Aug 08 19:17:11.386399 2017] [:error] [pid 4449] ModSecurity: ModSecurity requires mod_unique_id to be installed.

mod_unique_id“がインストールされていないようだ。

ファイルの存在確認。

$ ls -l /etc/httpd/modules/mod_unique_id.so
-rwxr-xr-x 1 root root 10224 Aug  3 03:03 /etc/httpd/modules/mod_unique_id.so
$

インストールはされている様子。設定ファイルを確認する。

下記ファイルに記載されていた。

/etc/httpd/conf.modules.d/00-base.conf

ただしコメントアウトされていた。

# LoadModule unique_id_module modules/mod_unique_id.so

今回は特に問題がない気がするので、この行をコメントインして終了とする。

`httpd`を再起動して前述のエラーメッセージは出力されなくなった。

以上。

X-Powered-By: PHP

表題のヘッダについて。

■ 環境

  • PHP 7.0.16
  • Apache httpd 2.4.25
  • Amazon Linux

■ X-Powered-By

WordPressで運用しているサイトを何の気なしに`httpstat`した時に下記の表記に気がついた。

$ httpstat https://www.example.com/
Connected to XXX.XXX.XXX.XXX:443 from 192.168.XXX.XXX:49893

HTTP/1.1 200 OK
Date: Mon, 03 Jul 2017 10:06:41 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: Apache
X-Powered-By: PHP/7.0.16
  :
$

X-Powered-By: PHP/7.0.16“が表記されてる。可能な限り隠したい。”php.ini“を下記のように編集して`httpd reload`した。

; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
expose_php = Off

デフォルトでは”On“であった。

これにより”X-Powered-By“ヘッダは追加されなくなった。

以上。

■ 関連

httpstat

特定のpathにIP制限をかける

httpdにおいて表題の通り。

■ 環境

  • Apache httpd 2.4.25
  • AmazonLinux

■ IP制限

アクセス元のIPを下記のように制限することができる。

<Directory /var/www/html/www.example.com/path1>
  Order Deny,Allow
  Allow from XXX.XXX.XXX.XX1
  Allow from XXX.XXX.XXX.XX2
  Allow from XXX.XXX.XXX.XX3
  Deny from all
</Directory>

上記設定では、3つのIP以外からのアクセスは”403“のステータスが返される。

ちょっとしたものを置いておくけど、関係ない人には見せたくない時に便利である。

以上。