ELB配下のApacheでremote_ipを使う

表題の通り。メモ。

■ 環境

  • Apache httpd 2.4.25
  • Amazon Linux
  • AWS

■ remote_ip

ELB等、本来のアクセス元が”X-Forwarded-For“に入っている場合の対処。

mod_remoteip – Apache HTTP Server Version 2.4
https://httpd.apache.org/docs/current/mod/mod_remoteip.html

これが最近はデフォルトで入っている。

httpd.conf“の下記行を追記する。

RemoteIPHeader X-Forwarded-For

また下記の行を書き換えれば良い。

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

%h“の箇所を”%a“にすればいける。自身は”combined“とは別名で”%a“に書き換えたものを設定しておいた。お手軽だ。

以上。

ディレクトリリスティングを無効

Apacheにおいて表題の通り。

■ 環境

  • Apache httpd 2.4.25
  • Amazon Linux

■ ディレクトリリスティング

index.html“等がないディレクトリにアクセスすると下記のように返ってきていた。

しばらくWordPress等しか使用していなかったので、デフォルト設定ではこういったアクセスでファイルの一覧等が表示されるというのをすっかり忘れていた。WordPressでは404系のエラー画面を勝手に表示してくれたりするので…。

というわけで対応する。

$ vi /etc/httpd/conf/httpd.conf

該当の設定は下記の箇所である。

<Directory "/var/www/html">
  # Options Indexes FollowSymLinks
  Options FollowSymLinks

コメントアウトした行を下の行に変更した。”Indexes“を削除しただけである。

設定変更を反映する。

$ sudo service httpd configtest
Syntax OK
$
$ sudo service httpd reload
Reloading httpd:                     [  OK  ]
$

同じURLにアクセスしても下記のようになった。

以上。

Digest認証

Apache 2.4で表題を行う。Basic認証を行おうと思ったのだが、Basic認証はパスワードが平文で送られるからDigest認証の方が良いよ!というのを見かけたのでやってみる。

■ 環境

  • Apache 2.4.25
  • Amazon Linux

■ httpd.conf

下記を追記した。

<Directory "/var/www/html/private">
    AuthType Digest
    AuthName "private"
    AuthDigestDomain /private/
    AuthDigestProvider file
    AuthUserFile /etc/httpd/.htdigest
    Require valid-user
</Directory>

対象のディレクトリは”/var/www/html/private“である。このディレクトリ配下へのアクセスをDigest認証で制限する。”AuthName“で指定するのは何でも良いようであるが、後述の`htdigest`でも入力する必要があるのでわかりやすく”private“にしてしまった。

■ htdigest

前述の”AuthUserFile“で指定したファイルを作成する。初めての実行なので”-c“が付いているが、次回以降はいらない。

$ htdigest -c /etc/httpd/.htdigest privae withsin
Adding password for partner01 in realm private
New password: *****
Re-type new password: *****
$

ファイルが作成された。中身を確認すると下記のようであった。

$ cat /etc/httpd/.htdigest
withsin:private:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$

httpdに設定を反映する。

$ sudo service httpd configtest
Syntax OK
$
$ sudo service httpd reload

実際にブラウザでアクセスをし、ユーザ名とパスワードを求められ、ログインができれば思い通りに動いているであろう。

以上。

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“にも同様に記載した。

以上。

■ 関連

nginxで処理時間をログに出力

ssl_access_logのフォーマット変更

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

以上。

■ 関連

SSL証明書のパスフレーズ削除