access_logに”処理に掛かった時間”を記載

表題の通り。レスポンスタイムではない。あくまでApache Httpd内で処理に掛かった時間である。

■ 環境

  • Apache Httpd 2.4.25
  • Amazon Linux

■ httpd.conf

現状(デフォルトまま)の”LogFormat“には処理時間は記載されていない。

mod_log_config – Apache Httpd 2.4
http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats

上記のマニュアルを参考すると、下記があるようである。

  • %D: リクエストを処理するのにかかった時間、マイクロ秒単位
  • %T: リクエストを扱うのにかかった時間、秒単位

言葉が微妙に違うが、内容は同じようである。秒も掛かっていないと思われるので、”%D“を使用している”LogFormat“に追記しておいた。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined

またSSLは以前のエントリの通り、直前に指定された”LogFormat“とのことなので”/etc/httpd/conf.d/ssl.conf“にも同様に記載した。

以上。

■ 関連

SSLを組み込んだApache再起動時のパスフレーズ

表題の件について。毎回入力するのは面倒だなと思っていたら設定があるようだったので調べて設定してみた。今までSSLなんてほとんどやったことがなかったのでなかなか面白い。

■ 環境

  • Apache Httpd 2.4.25
  • Amazon Linux

■ SSLPassPhraseDialog

設定ファイルを覗いていると、こんなディレクティブがあるのを知って試してみた。

mod_ssl – Apache HTTP Server Version 2.4
http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslpassphrasedialog

パスフレーズを標準出力するスクリプトがあれば良いらしい。下記のような単純なスクリプトを書いて配置した。

#!/bin/sh
echo "mypassword"

これを適当に配置。念のため実行権限を入れておいた。

/etc/httpd/conf.d/ssl.conf“には下記の設定を入れた。

SSLPassPhraseDialog exec:/etc/httpd/conf.d/ssl/pass.sh

Apacheを再起動しても、パスフレーズを聞かれることがなくなった。でもパスフレーズが直書きのファイルがあるってのがな…。

以上。

ApacheHttpd@Docker

表題の通り。そういえばnginxは設定の確認等で使っていたけどApacheはやっていなかったな、と思ってやってみる。

■ 環境

  • Apache Httpd 2.4.25
  • Docker for Mac 1.13.0
  • Mac OSX El Capitan

■ Docker

公式のコンテナイメージがあるようだ。

library/httpd – Docker Hub
https://hub.docker.com/_/httpd/

タグは下記のversionにあるようだ。

  • 2.2.32
  • 2.4.25

latest“タグが付いているのが”2.4.25“なのでこれを使うことにする。

$ docker pull httpd

稼働させてみる。nginxと同様に下記のようなオプションでいけるであろう。

$ 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
[Fri Feb 10 10:18:25.781852 2017] [mpm_event:notice] [pid 1:tid 140331236390784] AH00489: Apache/2.4.25 (Unix) configured -- resuming normal operations
[Fri Feb 10 10:18:25.784835 2017] [core:notice] [pid 1:tid 140331236390784] AH00094: Command line: 'httpd -D FOREGROUND'

別のターミナルから下記のようにアクセスできることを確認。

$ curl localhost:10080
<h1>It works!</h1>
$

このコンテナは”Debian“のようなので設定ファイルの場所に当たりをつけて確認しようとしたのだが、設定ファイルがいつもの場所にない…。Dockerfileを確認してファイルの在り処を探したところ下記にあった。

$ docker exec httpd ls -l /usr/local/apache2/conf/httpd.conf
-rw-r--r-- 1 root www-data 20448 Jan 31 19:42 /usr/local/apache2/conf/httpd.conf
$

Alpine Linux“のコンテナもあるのでそれも確認してみようかな。

とここまで書いて前にも同じことを書いていることに気がついた…。まぁいいや。

以上。

■ 関連

Apacheでのサーバ情報

表題の通り。不用な情報は削除したい。

■ 環境

  • Apache 2.4.25
  • Amazon Linux

■ default

Headerに下記のように表示されてしまう。

$ curl -I https://www.example.com/
HTTP/1.1 200 OK
Date: Wed, 08 Feb 2017 10:10:29 GMT
Server: Apache/2.4.25 (Amazon) OpenSSL/1.0.1k-fips PHP/7.0.14
X-Powered-By: PHP/7.0.14
  :

不用な情報は削除してしまいたい。

core – Apache HTTP
https://httpd.apache.org/docs/2.4/ja/mod/core.html#servertokens

ということで”httpd.conf“に下記設定を追記した。

ServerTokens Prod

httpd“を再起動して再度アクセスしてみる。

$ curl -I https://www.example.com/
HTTP/1.1 200 OK
Date: Wed, 08 Feb 2017 10:15:44 GMT
Server: Apache
X-Powered-By: PHP/7.0.14
  :

Apache“の表記だけになった。本当は”Apache“すらも消してしまいたいところであるが、とりあえずOK。

久しぶりにApacheを触ってる…。

以上。

■ 関連

ssl_access_logのフォーマット変更

Apacheにおいて表題の通り。今までSSLなんてほとんどやってこなかったので、、ちょっと触ってみたのでメモ。

■ 環境

  • Apache 2.4.25
  • AmazonLinux

■ mod_ssl

下記のversionが入っている。

$ rpm -qa | grep mod
  :
mod24_ssl-2.4.25-1.68.amzn1.x86_64
  :
$ yum info mod24_ssl
Loaded plugins: priorities, update-motd, upgrade-helper
981 packages excluded due to repository priority protections
Installed Packages
Name        : mod24_ssl
Arch        : x86_64
Epoch       : 1
Version     : 2.4.25
Release     : 1.68.amzn1
Size        : 220 k
Repo        : installed
From repo   : amzn-updates
Summary     : SSL/TLS module for the Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The mod_ssl module provides strong cryptography for the Apache Web
            : server via the Secure Sockets Layer (SSL) and Transport Layer
            : Security (TLS) protocols.

$

というわけで、デフォルトでは”/var/log/httpd/ssl_access_log“へ出力されているのであるがフォーマットが少々違う。どうやら”Common Log Format“が適用されているようなので、”access_log“と同じ”combined“が適用されて欲しい。

設定は下記のよう”/etc/httpd/conf.d/ssl.conf“にする。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
TransferLog logs/ssl_access_log

これで同じフォーマットでログが出力されるようになった。

ちなみに当初は下記のように設定してみたがダメだった。

TransferLog logs/ssl_access_log combined

TransferLog“ディレクティブではフォーマット(書式)を指定できないようで、直近で指定されている”LogFormat“が適用されるようである。

以上。

■ 関連