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“のコンテナもあるのでそれも確認してみようかな。

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

以上。

■ 関連

PHPのversionをWEBサーバに記載しない

表題の通り。先日の続き。PHPのversionは出したくないのでこれも消したい。

■ 環境

  • PHP 7.0.14
  • Apache 2.4.25
  • Amazon Linux

■ 現状

$ 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
  :

先日はここで終わった。この”X-Powered-By: PHP/7.0.14“も消したい。調べてみると、httpd側の設定ではなくPHP側の設定のようである。

■ /etc/php.ini

設定ファイルを編集する。

$ sudo vi /etc/php.ini

設定内容は下記の通りである。

expose_php = Off

デフォルトでは”On“になっていたので”Off“にする。これで再度アクセスしてみると下記のようになった。

$ curl -I https://www.example.com/
HTTP/1.1 200 OK
Date: Thu, 09 Feb 2017 10:22:19 GMT
Server: Apache
  :

満足である。

以上。

■ 関連

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を触ってる…。

以上。

■ 関連