Contents
Apache HTTPDについて
用語
スロット
HTTPリクエストを処理するユニットのこと。
マルチプロセスモデルではプロセスがスロットとなり、マルチスレッドモデルではスレッドがスロットとなる。
環境
- OS
CentOS release 7.3 (64bit)
- Apache Version
2.4.25
サーバの構築
iptables
※iptablesについて
HTTP、HTTPSはデフォルトでは閉じられているため、ポートを開放する必要がある。
次のように編集する。
vi /etc/sysconfig/iptables
IPアドレスの制限をせず、標準のHTTP、HTTPSポートを使用する場合は以下を追記する。
(-A INPUT -j REJECT –reject-with icmp-host-prohibitedより前に記述する)
-A INPUT -p tcp --dport http -j ACCEPT -A INPUT -p tcp --dport https -j ACCEPT
再起動して反映させる。(reloadでは反映されない)
service iptables restart
SELinux
Apacheインストール
ソースコードからインストール
不特定多数から直接アクセスを受けるWebサーバであるApacheは常に最新のバージョンを
導入できるようにソースコードからのインストールを推奨。
(パッケージは用意されるまでに時間がかかる)
- 準備
- まとめてインストール
以下のパッケージをまとめてインストールする
yum install wget gcc make pcre-devel lynx -y
- wget
ダウンロードにwgetが必要になるので、なければインストールを行う。
scpなどを使用してダウンロードする場合は不要。
- 確認
yum list installed wget
- インストール
yum install wget -y
- 確認
- gcc
コンパイルにgccが必要になるので、なければインストールを行う。
- 確認
yum list installed gcc
- インストール
yum install gcc -y
- 確認
- make
コンパイルにmakeが必要になるので、なければインストールを行う。
- 確認
yum list installed make
- インストール
yum install make -y
- 確認
- pcre-devel
Perlのライブラリが必要になるので、なければインストールを行う。
- 確認
yum list installed pcre-devel
- インストール
yum install pcre-devel -y
- 確認
- lynx
apachectlスクリプト内でステータス確認を行うのに使用されているlynxというツールをインストールする
- 確認
yum list installed lynx
- インストール
yum install lynx -y
- 確認
- OpenSSL(オプション)
HTTPS(SSL)を使用する場合、opensslが必要となる。
デフォルトでもインストールされているが、古いバージョンなので、新しくインストールする。
yum install openssl openssl-devel -y
- zlib(オプション)
mod_deflate(圧縮)を使用する場合必要となる。
wget http://cznic.dl.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.tar.gz tar xfvz zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure --prefix=/usr/local/zlib-1.2.8 make make install ln -s /usr/local/zlib-1.2.8 /usr/local/zlib
- まとめてインストール
- 手順
- ダウンロードサイトからアーカイブのURLを取得し、ダウンロードする
wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.25.tar.gz
- アーカイブファイルを展開・削除する
tar zfxv httpd-*.tar.gz rm -f httpd-*.tar.gz
- Apache Portable Runtime(APR)をインストールする
※Apache Portable Runtimeとはクロスプラットフォームサポート用のライブラリ
- ダウンロードサイトからアーカイブのURLを取得し、ダウンロードする
wget http://ftp.tsukuba.wide.ad.jp/software/apache//apr/apr-1.5.2.tar.gz wget http://ftp.tsukuba.wide.ad.jp/software/apache//apr/apr-util-1.5.4.tar.gz
- アーカイブファイルを展開・削除する
tar zfxv apr-util-*.tar.gz rm -f apr-util-*.tar.gz tar zfxv apr-*.tar.gz rm -f apr-*.tar.gz
- Apacheディレクトリへ移動
mv `ls | grep apr-util` `ls | grep httpd`/srclib/apr-util mv `ls | grep apr` `ls | grep httpd`/srclib/apr
- ダウンロードサイトからアーカイブのURLを取得し、ダウンロードする
- Apacheのディレクトリに移動する
cd httpd-*
- コンパイル最適化設定を行う
export CFLAGS="-O3 -m64"
- configure設定を行う
# インストール先(prefix):/usr/local/httpd-2.4.25 # ファイル配置(enable-layout):標準(Apache)。配置内容はconfig.layoutに記載。 # 静的モジュール(enable-modules):全て使用 # 動的モジュール(enable-mods-shared):基本的なものは全て使用(後から個別に無効にできる) # 圧縮モジュール(enable-deflate):有効 # SSL使用(enable-ssl) ./configure --prefix=/usr/local/httpd-2.4.25 --enable-layout=Apache --enable-modules=all --enable-mods-shared=all \ --enable-deflate --with-z=/usr/local/zlib --enable-ssl # event以外のMPMを使用する可能性がある場合は--enable-mpms-shared=allを加える。
使用できる設定内容は以下のとおり
[root@main1 httpd-2.4.25]# ./configure --help `configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local/apache2] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/apache2/bin', `/usr/local/apache2/lib' etc. You can specify an installation prefix other than `/usr/local/apache2' using `--prefix', for instance `--prefix=$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-layout=LAYOUT --enable-dtrace Enable DTrace probes --enable-hook-probes Enable APR hook probes --enable-exception-hook Enable fatal exception hook --enable-load-all-modules Load all modules --enable-maintainer-mode Turn on debugging and compile time warnings and load all compiled modules --enable-debugger-mode Turn on debugging and compile time warnings and turn off optimization --enable-pie Build httpd as a Position Independent Executable --enable-modules=MODULE-LIST Space-separated list of modules to enable | "all" | "most" | "few" | "none" | "reallyall" --enable-mods-shared=MODULE-LIST Space-separated list of shared modules to enable | "all" | "most" | "few" | "reallyall" --enable-mods-static=MODULE-LIST Space-separated list of static modules to enable | "all" | "most" | "few" | "reallyall" --disable-authn-file file-based authentication control --enable-authn-dbm DBM-based authentication control --enable-authn-anon anonymous user authentication control --enable-authn-dbd SQL-based authentication control --enable-authn-socache Cached authentication control --disable-authn-core core authentication module --disable-authz-host host-based authorization control --disable-authz-groupfile 'require group' authorization control --disable-authz-user 'require user' authorization control --enable-authz-dbm DBM-based authorization control --enable-authz-owner 'require file-owner' authorization control --enable-authz-dbd SQL based authorization and Login/Session support --disable-authz-core core authorization provider vector module --enable-authnz-ldap LDAP based authentication --disable-access-compat mod_access compatibility --disable-auth-basic basic authentication --enable-auth-form form authentication --enable-auth-digest RFC2617 Digest authentication --enable-allowmethods restrict allowed HTTP methods --enable-isapi isapi extension support --enable-file-cache File cache --enable-cache dynamic file caching. At least one storage management module (e.g. mod_cache_disk) is also necessary. --enable-cache-disk disk caching module --enable-cache-socache shared object caching module --enable-socache-shmcb shmcb small object cache provider --enable-socache-dbm dbm small object cache provider --enable-socache-memcache memcache small object cache provider --enable-socache-dc distcache small object cache provider --enable-so DSO capability. This module will be automatically enabled unless you build all modules statically. --enable-watchdog Watchdog module --enable-macro Define and use macros in configuration files --enable-dbd Apache DBD Framework --enable-bucketeer buckets manipulation filter. Useful only for developers and testing purposes. --enable-dumpio I/O dump filter --enable-echo ECHO server --enable-example-hooks Example hook callback handler module --enable-case-filter Example uppercase conversion filter --enable-case-filter-in Example uppercase conversion input filter --enable-example-ipc Example of shared memory and mutex usage --enable-buffer Filter Buffering --enable-data RFC2397 data encoder --enable-ratelimit Output Bandwidth Limiting --disable-reqtimeout Limit time waiting for request from client --enable-ext-filter external filter module --enable-request Request Body Filtering --enable-include Server Side Includes --disable-filter Smart Filtering --enable-reflector Reflect request through the output filter stack --enable-substitute response content rewrite-like filtering --enable-sed filter request and/or response bodies through sed --disable-charset-lite character set translation. Enabled by default only on EBCDIC systems. --enable-charset-lite character set translation. Enabled by default only on EBCDIC systems. --enable-deflate Deflate transfer encoding support --enable-xml2enc i18n support for markup filters --enable-proxy-html Fix HTML Links in a Reverse Proxy --enable-http HTTP protocol handling. The http module is a basic one that enables the server to function as an HTTP server. It is only useful to disable it if you want to use another protocol module instead. Don't disable this module unless you are really sure what you are doing. Note: This module will always be linked statically. --disable-mime mapping of file-extension to MIME. Disabling this module is normally not recommended. --enable-ldap LDAP caching and connection pooling services --disable-log-config logging configuration. You won't be able to log requests to the server without this module. --enable-log-debug configurable debug logging --enable-log-forensic forensic logging --enable-logio input and output logging --enable-lua Apache Lua Framework --enable-luajit Enable LuaJit Support --disable-env clearing/setting of ENV vars --enable-mime-magic automagically determining MIME type --enable-cern-meta CERN-type meta files --enable-expires Expires header control --disable-headers HTTP header control --enable-ident RFC 1413 identity check --enable-usertrack user-session tracking --enable-unique-id per-request unique ids --disable-setenvif basing ENV vars on headers --disable-version determining httpd version in config files --enable-remoteip translate header contents to an apparent client remote_ip --enable-proxy Apache proxy module --enable-proxy-connect Apache proxy CONNECT module. Requires and is enabled by --enable-proxy. --enable-proxy-ftp Apache proxy FTP module. Requires and is enabled by --enable-proxy. --enable-proxy-http Apache proxy HTTP module. Requires and is enabled by --enable-proxy. --enable-proxy-fcgi Apache proxy FastCGI module. Requires and is enabled by --enable-proxy. --enable-proxy-scgi Apache proxy SCGI module. Requires and is enabled by --enable-proxy. --enable-proxy-fdpass Apache proxy to Unix Daemon Socket module. Requires --enable-proxy. --enable-proxy-wstunnel Apache proxy Websocket Tunnel module. Requires and is enabled by --enable-proxy. --enable-proxy-ajp Apache proxy AJP module. Requires and is enabled by --enable-proxy. --enable-proxy-balancer Apache proxy BALANCER module. Requires and is enabled by --enable-proxy. --enable-proxy-express mass reverse-proxy module. Requires --enable-proxy. --enable-session session module --enable-session-cookie session cookie module --enable-session-crypto session crypto module --enable-session-dbd session dbd module --enable-slotmem-shm slotmem provider that uses shared memory --enable-slotmem-plain slotmem provider that uses plain memory --enable-ssl SSL/TLS support (mod_ssl) --enable-ssl-staticlib-deps link mod_ssl with dependencies of OpenSSL's static libraries (as indicated by "pkg-config --static"). Must be specified in addition to --enable-ssl. --enable-optional-hook-export example optional hook exporter --enable-optional-hook-import example optional hook importer --enable-optional-fn-import example optional function importer --enable-optional-fn-export example optional function exporter --enable-dialup rate limits static files to dialup modem speeds --enable-static-support Build a statically linked version of the support binaries --enable-static-htpasswd Build a statically linked version of htpasswd --enable-static-htdigest Build a statically linked version of htdigest --enable-static-rotatelogs Build a statically linked version of rotatelogs --enable-static-logresolve Build a statically linked version of logresolve --enable-static-htdbm Build a statically linked version of htdbm --enable-static-ab Build a statically linked version of ab --enable-static-checkgid Build a statically linked version of checkgid --enable-static-htcacheclean Build a statically linked version of htcacheclean --enable-static-httxt2dbm Build a statically linked version of httxt2dbm --enable-static-fcgistarter Build a statically linked version of fcgistarter --enable-lbmethod-byrequests Apache proxy Load balancing by request counting --enable-lbmethod-bytraffic Apache proxy Load balancing by traffic counting --enable-lbmethod-bybusyness Apache proxy Load balancing by busyness --enable-lbmethod-heartbeat Apache proxy Load balancing from Heartbeats --enable-mpms-shared=MPM-LIST Space-separated list of MPM modules to enable for dynamic loading. MPM-LIST=list | "all" --enable-unixd unix specific support --enable-privileges Per-virtualhost Unix UserIDs and enhanced security for Solaris --enable-heartbeat Generates Heartbeats --enable-heartmonitor Collects Heartbeats --enable-dav WebDAV protocol handling. --enable-dav also enables mod_dav_fs --disable-status process/thread monitoring --disable-autoindex directory listing --enable-asis as-is filetypes --enable-info server information --enable-suexec set uid and gid for spawned processes --enable-cgid CGI scripts. Enabled by default with threaded MPMs --enable-cgi CGI scripts. Enabled by default with non-threaded MPMs --enable-dav-fs DAV provider for the filesystem. --enable-dav also enables mod_dav_fs. --enable-dav-lock DAV provider for generic locking --enable-vhost-alias mass virtual hosting module --enable-negotiation content negotiation --disable-dir directory request handling --enable-imagemap server-side imagemaps --enable-actions Action triggering on requests --enable-speling correct common URL misspellings --enable-userdir mapping of requests to user-specific directories --disable-alias mapping of requests to different filesystem parts --enable-rewrite rule based URL manipulation --enable-v4-mapped Allow IPv6 sockets to handle IPv4 connections Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-included-apr Use bundled copies of APR/APR-Util --with-apr=PATH prefix for installed APR or the full path to apr-config --with-apr-util=PATH prefix for installed APU or the full path to apu-config --with-pcre=PATH Use external PCRE library --with-port=PORT Port on which to listen (default is 80) --with-sslport=SSLPORT Port on which to securelisten (default is 443) --with-distcache=PATH Distcache installation directory --with-z=PATH use a specific zlib library --with-libxml2=PATH location for libxml2 --with-lua=PATH Path to the Lua 5.1 prefix --with-ssl=PATH OpenSSL installation directory --with-mpm=MPM Choose the process model for Apache to use by default. MPM={event|worker|prefork|winnt} This will be statically linked as the only available MPM unless --enable-mpms-shared is also specified. --with-module=module-type:module-file Enable module-file in the modules/<module-type> directory. --with-program-name alternate executable name --with-suexec-bin Path to suexec binary --with-suexec-caller User allowed to call SuExec --with-suexec-userdir User subdirectory --with-suexec-docroot SuExec root directory --with-suexec-uidmin Minimal allowed UID --with-suexec-gidmin Minimal allowed GID --with-suexec-logfile Set the logfile --with-suexec-safepath Set the safepath --with-suexec-umask umask for suexec'd process Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider.
- ビルドを行い、エラーが出ないかを確認する
make | tee make.log
- インストールを行う
make install
- 起動スクリプトを作成する
cp build/rpm/httpd.init /etc/init.d/httpd
- インストールディレクトリへのシンボリックリンクを作成する
ln -s /usr/local/httpd-* /usr/local/httpd
これによって、複数のバージョンを同居させ、リンクを切り替えることで、バージョン変更が可能 - いずれのインストール方法・場所でも同一のアクセスが可能なように環境変数でパスを設定する
- 環境変数でパスを設定する(インストールしたパスによって値は変更する)
export APACHE_HOME=/usr/local/httpd export PATH=$APACHE_HOME/bin:$PATH
- 環境変数を毎ログイン時に設定するようにする
vi /etc/bashrc
末尾に以下を追記する
echo export APACHE_HOME=/usr/local/httpd >> /etc/bashrc echo export PATH=\$APACHE_HOME/bin:\$PATH >> /etc/bashrc
- 環境変数でパスを設定する(インストールしたパスによって値は変更する)
- シェルなどからlynxを実行できるよう修正する
vi `which apachectl`
以下の部分を
status) $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } ' ;; fullstatus) $LYNX $STATUSURL
以下のように変更
status) export HOME=/tmp $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } ' ;; fullstatus) export HOME=/tmp $LYNX $STATUSURL
- ダウンロードサイトからアーカイブのURLを取得し、ダウンロードする
サービス登録
サービスとして登録し、OS起動時の自動起動、serviceコマンドによる制御をできるようにする。
- 制御スクリプトを編集する
vi /etc/init.d/httpd
以下の通り編集する
# chkconfig: - 85 15 ~~~ httpd=${HTTPD-/usr/sbin/httpd} pidfile=${PIDFILE-/var/run/${prog}.pid} ~~~ CONFFILE=/etc/httpd/conf/httpd.conf
の行を
# chkconfig: 345 85 15 ~~~ httpd=${HTTPD-/usr/local/httpd/bin/httpd} pidfile=${PIDFILE-/usr/local/httpd/logs/httpd.pid} ~~~ CONFFILE=/usr/local/httpd/conf/httpd.conf
とする - 以降、編集不可とする
chmod 554 /etc/init.d/httpd
- サービスとして追加する
chkconfig --add httpd
- ランレベル3,4,5に登録されていることを確認する
chkconfig --list httpd
以降はserviceコマンドが使用可能となる。
起動確認
起動してアクセスできるか確認を行う。
ただし、ホスト名設定のみは先に行う必要がある。
- 起動確認
Apacheを起動し、正常に動作するかを確認する
service httpd start
- 以下のようなエラーが出た場合、
AH00557: httpd: apr_sockaddr_info_get() failed for <自ホスト名>
/etc/hostsの127.0.0.1の行の末尾に空白を追加して上記エラーの<自ホスト名>部を追記する
vi /etc/hosts
- エラーが出力され、その対策を行いApacheを再起動しようとすると多重起動のエラーが表示される。
エラーが出た場合でもApacheプロセスは起動するので、restart指定する。
service httpd restart
- 以下のようなエラーが出た場合、
- コンテンツを取得する
wget http://localhost/ cat index.html # It works という内容のHTMLが取得できることを確認する rm -f index.html
モジュール
モジュールの確認
httpd -l
httpd -M
モジュールの追加
- DSOとして追加
cd <モジュールのソースコードがある階層> $APACHE_HOME/bin/apxs -c -i -a mod_XXX.h
各モジュールについて
- mod_autoindex
ディレクトリインデックス(ファイルの一覧)を生成することができる
マニュアルの配置
ダウンロードしたソースコード中にHTML形式のマニュアルがあるので、それをApacheから参照できるように設定することで、マニュアルを閲覧できる。
これはサンプルなので、通常は実施する必要は無い。
- マニュアルの設置
cp -R docs $APACHE_HOME/
- タイプマップファイルが拡張子htmlとなっているのでリネーム
find /usr/local/apache-httpd/docs/manual -name "*.html" | xargs rename .html .var
- 公開設定
LoadModule negotiation_module modules/mod_negotiation.so <Directory "/usr/local/apache-httpd/docs"> Require all granted AddHandler type-map var RedirectMatch permanent ^/([^\?]*)\.html$ $1.var </Directory>
設定
設定ファイルの書き方
設定ファイルは次のパスにある。
$APACHE_HOME/conf/httpd.conf
こちらを編集し、Apacheを再起動することで、設定を反映できる。
基本的には初期状態で使用可能で、使用目的によって異なる設定変更を行う。
なお、同じ設定項目を複数書いた場合、よりファイルの後のほうで書いた方が採用される。
設定項目はディレクティブと呼ばれ、
項目名 項目内容
のように単行で設定を行うもの、
<項目名> 項目内容1 項目内容2 </項目名>
のように構造化され、複数行で設定を行うものが存在する。
設定は別ファイルに記述したものを明示的に読み込むことも出来る。
Include <パス>
と書くことで、読み込むことが出来る。
インストール場所以外のインストールオプションを指定していない場合の
初期状態の設定内容は以下のとおりである。
# # This is the main Apache HTTP server configuration file. It contains the # configuration directives that give the server its instructions. # See <URL:http://httpd.apache.org/docs/2.4/> for detailed information. # In particular, see # <URL:http://httpd.apache.org/docs/2.4/mod/directives.html> # for a discussion of each configuration directive. # # Do NOT simply read the instructions in here without understanding # what they do. They're here only as hints or reminders. If you are unsure # consult the online docs. You have been warned. # # Configuration and logfile names: If the filenames you specify for many # of the server's control files begin with "/" (or "drive:/" for Win32), the # server will use that explicit path. If the filenames do *not* begin # with "/", the value of ServerRoot is prepended -- so "logs/access_log" # with ServerRoot set to "/usr/local/apache2" will be interpreted by the # server as "/usr/local/apache2/logs/access_log", whereas "/logs/access_log" # will be interpreted as '/logs/access_log'. # # ServerRoot: The top of the directory tree under which the server's # configuration, error, and log files are kept. # # Do not add a slash at the end of the directory path. If you point # ServerRoot at a non-local disk, be sure to specify a local disk on the # Mutex directive, if file-based mutexes are used. If you wish to share the # same ServerRoot for multiple httpd daemons, you will need to change at # least PidFile. # ServerRoot "/usr/local/apache-httpd-2.4.7" # # Mutex: Allows you to set the mutex mechanism and mutex file directory # for individual mutexes, or change the global defaults # # Uncomment and change the directory if mutexes are file-based and the default # mutex file directory is not on a local disk or is not appropriate for some # other reason. # # Mutex default:logs # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the <VirtualHost> # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 80 # # Dynamic Shared Object (DSO) Support # # To be able to use the functionality of a module which was built as a DSO you # have to place corresponding `LoadModule' lines at this location so the # directives contained in it are actually available _before_ they are used. # Statically compiled modules (those listed by `httpd -l') do not need # to be loaded here. # # Example: # LoadModule foo_module modules/mod_foo.so # LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so #LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbd_module modules/mod_authn_dbd.so #LoadModule authn_socache_module modules/mod_authn_socache.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_user_module modules/mod_authz_user.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule authz_owner_module modules/mod_authz_owner.so #LoadModule authz_dbd_module modules/mod_authz_dbd.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule access_compat_module modules/mod_access_compat.so LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_form_module modules/mod_auth_form.so #LoadModule auth_digest_module modules/mod_auth_digest.so #LoadModule allowmethods_module modules/mod_allowmethods.so #LoadModule file_cache_module modules/mod_file_cache.so #LoadModule cache_module modules/mod_cache.so #LoadModule cache_disk_module modules/mod_cache_disk.so #LoadModule cache_socache_module modules/mod_cache_socache.so #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so #LoadModule socache_dbm_module modules/mod_socache_dbm.so #LoadModule socache_memcache_module modules/mod_socache_memcache.so #LoadModule watchdog_module modules/mod_watchdog.so #LoadModule macro_module modules/mod_macro.so #LoadModule dbd_module modules/mod_dbd.so #LoadModule dumpio_module modules/mod_dumpio.so #LoadModule echo_module modules/mod_echo.so #LoadModule buffer_module modules/mod_buffer.so #LoadModule data_module modules/mod_data.so #LoadModule ratelimit_module modules/mod_ratelimit.so LoadModule reqtimeout_module modules/mod_reqtimeout.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule request_module modules/mod_request.so #LoadModule include_module modules/mod_include.so LoadModule filter_module modules/mod_filter.so #LoadModule reflector_module modules/mod_reflector.so #LoadModule substitute_module modules/mod_substitute.so #LoadModule sed_module modules/mod_sed.so #LoadModule charset_lite_module modules/mod_charset_lite.so LoadModule mime_module modules/mod_mime.so LoadModule log_config_module modules/mod_log_config.so #LoadModule log_debug_module modules/mod_log_debug.so #LoadModule log_forensic_module modules/mod_log_forensic.so #LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so #LoadModule mime_magic_module modules/mod_mime_magic.so #LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so #LoadModule usertrack_module modules/mod_usertrack.so #LoadModule unique_id_module modules/mod_unique_id.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule version_module modules/mod_version.so #LoadModule remoteip_module modules/mod_remoteip.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so #LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_express_module modules/mod_proxy_express.so #LoadModule session_module modules/mod_session.so #LoadModule session_cookie_module modules/mod_session_cookie.so #LoadModule session_dbd_module modules/mod_session_dbd.so #LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #LoadModule slotmem_plain_module modules/mod_slotmem_plain.so #LoadModule dialup_module modules/mod_dialup.so #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so #LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so #LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so LoadModule unixd_module modules/mod_unixd.so #LoadModule heartbeat_module modules/mod_heartbeat.so #LoadModule heartmonitor_module modules/mod_heartmonitor.so #LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so #LoadModule asis_module modules/mod_asis.so #LoadModule info_module modules/mod_info.so #LoadModule cgid_module modules/mod_cgid.so #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule dav_lock_module modules/mod_dav_lock.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so #LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so #LoadModule actions_module modules/mod_actions.so #LoadModule speling_module modules/mod_speling.so #LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so #LoadModule rewrite_module modules/mod_rewrite.so <IfModule unixd_module> # # If you wish httpd to run as a different user or group, you must run # httpd as root initially and it will switch. # # User/Group: The name (or #number) of the user/group to run httpd as. # It is usually good practice to create a dedicated user and group for # running httpd, as with most system services. # User daemon Group daemon </IfModule> # 'Main' server configuration # # The directives in this section set up the values used by the 'main' # server, which responds to any requests that aren't handled by a # <VirtualHost> definition. These values also provide defaults for # any <VirtualHost> containers you may define later in the file. # # All of these directives may appear inside <VirtualHost> containers, # in which case these default settings will be overridden for the # virtual host being defined. # # # ServerAdmin: Your address, where problems with the server should be # e-mailed. This address appears on some server-generated pages, such # as error documents. e.g. admin@your-domain.com # ServerAdmin you@example.com # # ServerName gives the name and port that the server uses to identify itself. # This can often be determined automatically, but we recommend you specify # it explicitly to prevent problems during startup. # # If your host doesn't have a registered DNS name, enter its IP address here. # #ServerName www.example.com:80 # # Deny access to the entirety of your server's filesystem. You must # explicitly permit access to web content directories in other # <Directory> blocks below. # <Directory /> AllowOverride none Require all denied </Directory> # # Note that from this point forward you must specifically allow # particular features to be enabled - so if something's not working as # you might expect, make sure that you have specifically enabled it # below. # # # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/usr/local/apache-httpd-2.4.7/htdocs" <Directory "/usr/local/apache-httpd-2.4.7/htdocs"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # Options Indexes FollowSymLinks # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # Require all granted </Directory> # # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.html </IfModule> # # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients. # <Files ".ht*"> Require all denied </Files> # # ErrorLog: The location of the error log file. # If you do not specify an ErrorLog directive within a <VirtualHost> # container, error messages relating to that virtual host will be # logged here. If you *do* define an error logfile for a <VirtualHost> # container, that host's errors will be logged there and not here. # ErrorLog "logs/error_log" # # LogLevel: Control the number of messages logged to the error_log. # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. # LogLevel warn <IfModule log_config_module> # # The following directives define some format nicknames for use with # a CustomLog directive (see below). # LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> # # The location and format of the access logfile (Common Logfile Format). # If you do not define any access logfiles within a <VirtualHost> # container, they will be logged here. Contrariwise, if you *do* # define per-<VirtualHost> access logfiles, transactions will be # logged therein and *not* in this file. # CustomLog "logs/access_log" common # # If you prefer a logfile with access, agent, and referer information # (Combined Logfile Format) you can use the following directive. # #CustomLog "logs/access_log" combined </IfModule> <IfModule alias_module> # # Redirect: Allows you to tell clients about documents that used to # exist in your server's namespace, but do not anymore. The client # will make a new request for the document at its new location. # Example: # Redirect permanent /foo http://www.example.com/bar # # Alias: Maps web paths into filesystem paths and is used to # access content that does not live under the DocumentRoot. # Example: # Alias /webpath /full/filesystem/path # # If you include a trailing / on /webpath then the server will # require it to be present in the URL. You will also likely # need to provide a <Directory> section to allow access to # the filesystem path. # # ScriptAlias: This controls which directories contain server scripts. # ScriptAliases are essentially the same as Aliases, except that # documents in the target directory are treated as applications and # run by the server when requested rather than as documents sent to the # client. The same rules about trailing "/" apply to ScriptAlias # directives as to Alias. # ScriptAlias /cgi-bin/ "/usr/local/apache-httpd-2.4.7/cgi-bin/" </IfModule> <IfModule cgid_module> # # ScriptSock: On threaded servers, designate the path to the UNIX # socket used to communicate with the CGI daemon of mod_cgid. # #Scriptsock cgisock </IfModule> # # "/usr/local/apache-httpd-2.4.7/cgi-bin" should be changed to whatever your ScriptAliased # CGI directory exists, if you have that configured. # <Directory "/usr/local/apache-httpd-2.4.7/cgi-bin"> AllowOverride None Options None Require all granted </Directory> <IfModule mime_module> # # TypesConfig points to the file containing the list of mappings from # filename extension to MIME-type. # TypesConfig conf/mime.types # # AddType allows you to add to or override the MIME configuration # file specified in TypesConfig for specific file types. # #AddType application/x-gzip .tgz # # AddEncoding allows you to have certain browsers uncompress # information on the fly. Note: Not all browsers support this. # #AddEncoding x-compress .Z #AddEncoding x-gzip .gz .tgz # # If the AddEncoding directives above are commented-out, then you # probably should define those extensions to indicate media types: # AddType application/x-compress .Z AddType application/x-gzip .gz .tgz # # AddHandler allows you to map certain file extensions to "handlers": # actions unrelated to filetype. These can be either built into the server # or added with the Action directive (see below) # # To use CGI scripts outside of ScriptAliased directories: # (You will also need to add "ExecCGI" to the "Options" directive.) # #AddHandler cgi-script .cgi # For type maps (negotiated resources): #AddHandler type-map var # # Filters allow you to process content before it is sent to the client. # # To parse .shtml files for server-side includes (SSI): # (You will also need to add "Includes" to the "Options" directive.) # #AddType text/html .shtml #AddOutputFilter INCLUDES .shtml </IfModule> # # The mod_mime_magic module allows the server to use various hints from the # contents of the file itself to determine its type. The MIMEMagicFile # directive tells the module where the hint definitions are located. # #MIMEMagicFile conf/magic # # Customizable error responses come in three flavors: # 1) plain text 2) local redirects 3) external redirects # # Some examples: #ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html # # # MaxRanges: Maximum number of Ranges in a request before # returning the entire resource, or one of the special # values 'default', 'none' or 'unlimited'. # Default setting is to accept 200 Ranges. #MaxRanges unlimited # # EnableMMAP and EnableSendfile: On systems that support it, # memory-mapping or the sendfile syscall may be used to deliver # files. This usually improves server performance, but must # be turned off when serving from networked-mounted # filesystems or if support for these functions is otherwise # broken on your system. # Defaults: EnableMMAP On, EnableSendfile Off # #EnableMMAP off #EnableSendfile on # Supplemental configuration # # The configuration files in the conf/extra/ directory can be # included to add extra features or to modify the default configuration of # the server, or you may simply copy their contents here and change as # necessary. # Server-pool management (MPM specific) #Include conf/extra/httpd-mpm.conf # Multi-language error messages #Include conf/extra/httpd-multilang-errordoc.conf # Fancy directory listings #Include conf/extra/httpd-autoindex.conf # Language settings #Include conf/extra/httpd-languages.conf # User home directories #Include conf/extra/httpd-userdir.conf # Real-time info on requests and configuration #Include conf/extra/httpd-info.conf # Virtual hosts #Include conf/extra/httpd-vhosts.conf # Local access to the Apache HTTP Server Manual #Include conf/extra/httpd-manual.conf # Distributed authoring and versioning (WebDAV) #Include conf/extra/httpd-dav.conf # Various default settings #Include conf/extra/httpd-default.conf # Configure mod_proxy_html to understand HTML4/XHTML1 <IfModule proxy_html_module> Include conf/extra/proxy-html.conf </IfModule> # Secure (SSL/TLS) connections #Include conf/extra/httpd-ssl.conf # # Note: The following must must be present to support # starting without SSL on platforms with no /dev/random equivalent # but a statically compiled-in mod_ssl. # <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule> # # uncomment out the below to deal with user agents that deliberately # violate open standards by misusing DNT (DNT *must* be a specific # end-user choice) # #<IfModule setenvif_module> #BrowserMatch "MSIE 10.0;" bad_DNT #</IfModule> #<IfModule headers_module> #RequestHeader unset DNT env=bad_DNT #</IfModule>
基本設定
一般的な設定
以下はインストール時にデフォルトで設定されるので、特に変更の必要は無い。
- ServerRoot
apacheが使用するディレクトリのパスを記述する
- 書式
ServerRoot <パス>
- 書式
- DocumentRoot
apacheが公開ディレクトリとして使用するパスを絶対パスで記述する。
apacheを実行するユーザの読み取り権限が必要。
- 書式
DocumentRoot <パス>
- 書式
- Listen
apacheデーモンがHTTPを待ち受けるIPアドレス、ポートを記述する - 書式
Listen <IPアドレス>:<ポート番号>
or
Listen <ポート番号>
ホスト名設定
ホスト名を設定しないと起動時にエラーが出る。
ServerName行を探し、以下のように編集する。( 行頭# コメントアウトは削除する)
ServerName <自ホスト名 or 127.0.0.1>:80
この設定後、最低限の状態で起動できるので、http://127.0.0.1/にアクセス可能となる。
- 初期状態
#ServerName www.example.com:80
- 設定内容
ServerName 127.0.0.1:80
実行ユーザ設定
Apacheは起動したユーザでなく、設定したユーザで起動される。
デフォルトではdaemonとなっているが、分かりにくいので、apacheユーザ・グループに変更する。
実際にそのユーザ・グループが存在する必要があるので、作成する。
不要であれば、デフォルトのdaemonは削除する。
- 初期状態
User daemon Group daemon
- 設定内容
User apache Group apache
- ユーザ作成
useradd --user-group --no-create-home --shell /sbin/nologin apache
- ユーザ削除
userdel daemon groupdel daemon
管理者連絡先
サーバがエラーページを表示する際に埋め込むサーバ管理者の連絡先。
この設定は未記載でもエラーにならないので、消してしまっても良い。
- 書式
ServerAdmin <メールアドレス or URL>
分散設定ファイルの使用
設定はhttpd.confに通常まとめて書くが、公開対象の各ディレクトリに個別にアクセス権などを記述した
設定ファイルを設置して設定を行うことが出来る。
ここで記述した内容はhttpd.confで記述した内容を上書きできる。
各ユーザのホームディレクトリで各ユーザのWEBサービスを公開させるなどで複数の管理者で管理するような場合を除き、
設定が散らばってしまうことや、分散設定ファイルの読み込みオーバーヘッドが発生するので、通常は利用すべきではない。
- 書式
AccessFileName <分散設定ファイル名>
通常は .htaccess を使用する場合が多い。
なお、AllowOverrideディレクティブによって上書き可能なディレクティブや、対象ディレクトリを指定できる。
ディレクトリ内設定
指定したディレクトリに対してディレクティブを設定する。
指定するディレクトリパスは前方部分一致である。
- 書式
<Directory <パス>> 任意のディレクティブ </Directory>
パスは絶対パスを指定する。
パスにはワイルドカードを利用でき * で/を除く任意の文字列、 ? で任意の1文字にヒットする。
更に、 ~ “<正規表現>” の形式で記述することで正規表現を利用可能となる。
<Directory ~ "<正規表現>"> 任意のディレクティブ </Directory>
特定のディレクトリをApacheが参照する際、複数のDirectoryディレクティブにヒットした場合は、
指定パスの短い順から全て適用される。つまり、 / と /var/ の2つでヒットした場合は、前者が先に適用される。
正規表現による指定はこの後に、記述した順番で適用される。
- Directoryディレクティブ内で使用するディレクティブ
- 分散設定ファイルによる設定の上書き
- 書式
AllowOverride <上書き対象>
上書き対象には次が指定できる - All
全ての上書きを許可する - None
全ての上書きを許可しない - FileInfo
拡張子とファイルタイプの対応の指定やファイル名置換など設定可能になる - AuthConfig
ユーザ認証に関する指定を設定可能になる - Limit
アクセス制限に関する指定を設定可能になる
- 書式
- 特殊機能の有効化
- 書式
options <機能>
<機能>の前に + をつけると現在の設定に加えられ、 – をつけることで無効化できる。
何もつけないと現在の設定に上書きされる。
使用できる機能は以下。 - All
MultiViewsを除いた以下の全ての機能を有効にする。
なお、デフォルトではAllとなっている。 - ExecCGI
CGIを有効にする。(要mod_cgi) - FollowSymLinks
シンボリックリンクをたどれるようにする - Includes
SSIを有効にする。(要mod_include) - IncludesNOEXEC
SSIは有効になるが、#exec コマンドと #exec CGI は無効になる。
ただし、#include virtual により、ScriptAlias されたディレクトリで CGI を実行することは可能である。 - Indexes
ディレクトリに対するHTTPアクセスで、かつDirectoryIndexに記述されたファイル(index.htmlなど)が存在しない場合、
ファイルのリストを生成して返す。 - MultiViews
コンテントネゴシエーションされた “MultiViews” を許可する。(言語を自動選択してファイルを返す機能)(要mod_negotiation) - SymLinksIfOwnerMatch
- 書式
- その他のディレクティブ
こちら
- 分散設定ファイルによる設定の上書き
公開対象ファイルの付加設定
ApacheがHTTPクエリによってファイルを公開参照する際に個別にそのファイルに対する振る舞いを定義できる。
指定するファイルパスは前方部分一致である。つまりJPEGファイルに適用する場合は”.jpg”ではなく、”*.jpg”とする必要がある。
- 書式
<Files "<ファイル名>"> 任意のディレクティブ </Files>
ファイル名にはワイルドカードを利用でき * で/を除く任意の文字列、 ? で任意の1文字にヒットする。
更に、 ~ “<正規表現>” の形式で記述することで正規表現を利用可能となる。
<Files ~ "<正規表現>"> 任意のディレクティブ </Files>
また、これは以下と同じである。
<FilesMatch "<ファイル名>"> 任意のディレクティブ </FilesMatch>
特定URLへのアクセスの制御設定
特定のURLにアクセスがあった際のアクセス制御などの挙動を設定する。
通常ファイルシステム内のファイルに対する制御はDirectoryやFilesディレクティブを使用することが推奨されているので、
Apacheによって生成されるページに対する制御を行う際にのみ利用する。
指定するURLパスは完全一致である。
- 書式
<Location <URLパス>> 任意のディレクティブ </Location>
Directory / Files / Locationディレクティブ内の設定
- アクセス元制御(Order/Allow/Deny)
- 書式
Order Deny,Allow
もしくは
Order Allow,Deny
加えて
(Allow or Deny) from <IPアドレス or ネットワークアドレス(CIDR形式) or ホスト名>
Orderで許可・拒否の評価の順序を決める。次に許可・拒否対象を記述する。
Allow・Denyディレクティブは複数列挙することができる。
いずれのAllow・Denyディレクティブにもヒットしない場合は、Orderディレクティブで最後に指定した方が適用される。
両方にヒットした場合も、Orderディレクティブで最後に指定した方が適用される。
- 書式
- アクセス元制御(Require)
複数記述した場合は1つでも条件を満たしていればアクセス可能となる。
- 書式
Require <制御内容>
使用できる制御内容は以下
- all granted
全体に許可する - all denied
全体を拒否する - method <HTTPメソッド> …
指定したHTTPメソッドのみ許可する
GET、POST、HEADなど使用可能。 - user <ユーザID> …
BASIC認証やDIGEST認証をパスした、指定したユーザのみ許可する - group <グループ名> …
BASIC認証やDIGEST認証をパスしたユーザの所属するグループが指定したグループであれば許可する - valid-user
BASIC認証やDIGEST認証をパスした、パスワードファイルに書かれている全てのユーザを許可する - ip <IPアドレス or ネットワークアドレス>
指定したIPアドレス/ネットワークアドレスからのアクセスのみ許可する。
スペース区切りで複数列挙することができる。
また、記述したアドレスは先頭から比較される。
つまり、プライベートアドレスのみから許可したい場合は、次の2通りの書き方ができる。
Require ip 10 172.16 172.17、、、172.31 192.168. Require ip 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
- env <env変数名>
SetEnvIfディレクティブで作成した条件に一致していれば許可する。 - expr <条件>
時間などを評価し、指定した条件を満たせば許可する。
- all granted
- 書式
DNS逆引きを有効化する
アクセス制御でホスト名を使用する際やログにホスト名を記録する際にアクセスのあったIPアドレスから
ホスト名を逆引きして取得する必要がある。
デフォルトでは無効化されているので、有効化する必要がある。
ただし、DNS解決のオーバーヘッドが発生するので、通常は無効化したままの方が良い。
- 書式
HostnameLookups (On|Off|Double)
Doubleを指定すると、逆引きで得たホスト名を再度正引きしてIPアドレスを取得し、元のIPアドレスと比較するようにする
- デフォルト
HostnameLookups Off
エイリアスの設定
エイリアスを設定することで、URLのパスと実際のディレクトリの階層の対応を手動で定義できる。
- 書式
Alias <URLパス> "<ディレクトリ絶対パス>"
インデックスファイルの指定
- DirectoryIndex
フォルダへのアクセスの際に返すファイルの優先順位を定義する。
優先順位の高い順からそのフォルダ内を探し、見つかればそのファイルを返す。
- 書式
DirectoryIndex <ファイル名1> <ファイル名2> ...
- 例
DirectoryIndex index.html index.htm index.php
- 書式
リダイレクト
HTTP30Xを使用したリダイレクト
特定のURLパスにアクセスがあった際に、指定したURLに転送させる(リダイレクト)ことができる。
サーバはリダイレクトのレスポンスコードとリダイレクト先を返し、
実際にリダイレクト先に再アクセスするのはクライアント側である。
- 書式
Redirect [<HTTPステータス>] <URLパス> <転送先URL>
HTTPステータスを指定するとそのステータスを返すことができる。デフォルトは302。
通常使用するステータスは以下。 - 301 or permanent
リソースが永久に移動した - 302 or temp
一時的なリダイレクト(デフォルト)
リライト
指定したURLでアクセスがあった際、
リライトは単純なリダイレクトと異なり正規表現を使用した一括したルールの記述など
柔軟な設定を行うことができる。
リライトは分散設定ファイル(.htaccess)内か、Directoryディレクティブ内に記述する必要がある。
- 書式
- RewriteEngine (on|off)
リライトを有効/無効にする。 - RewriteBase <URLパス>
URL書き換えを行うURLのプレフィックスパスを指定する - RewriteCond <アクセスURL> <一致条件>
リライトを行うかどうかの条件を記述する。
- RewriteEngine (on|off)
- デフォルト
- 設定例
LoadModule rewrite_module modules/mod_rewrite.so
DSO
読み込みDSO設定
DSO(Dynamic Shared Object)と呼ばれる、実行時に動的に読み込まれるモジュールを指定する設定
インストールされているモジュール一覧は次のコマンドで得られる。
ls $APACHE_HOME/modules/
- 書式
LoadModule <モジュール識別子(任意)> <モジュールファイルのパス>
DSO使用設定
読み込むDSOによって使用できないディレクティブがある。
DSOが読み込まれていないのにそのディレクティブを使用するのを避けるため、”指定したDSOが読み込まれていた場合”という記述ができる。
- 書式
<IfModule <モジュール識別子>> 任意のディレクティブ </IfModule>
上記のように、IfModuleディレクティブ内のディレクティブは指定したDSOが読み込まれていない場合は無効となる。
VirtualHost
VirtualHostとは、HTTPサーバにアクセスされる際に、どのようなホスト名指定でアクセスされたかによって異なるWEBサーバとして振舞うことができる機能である。
例えば、aaa.example.comとbbb.example.comでは同じパスでも異なるファイルを返すことができる。
- 書式
下記のように<VirtualHost>ディレクティブ内の記述がそれぞれのVirtualHost内でのみ有効になる設定である。
<VirtualHost <IPアドレス>[:<ポート>]> ServerName <ホスト名(FQDN)> DocumentRoot <パス> </VirtualHost> <Directory "<パス>"> # 全て許可する場合 Require all granted </Directory>
IPアドレスは*とすることで、ワイルドカード指定ができる。
ServerNameとDocumentRootが通常最低限必要だが、ErrorLogディレクティブなどのログも分けた方が良い。
また、Requireディレクティブなどで、アクセス許可を別途設定する必要がある。
キープアライブ
1回のTCPコネクションで複数のHTTPリクエストを行えるようにできる。
デフォルトではキープアライブは有効であり、無効の場合は通常は有効にしたほうが性能が上がる。
- デフォルト
KeepAlive On KeepAliveTimeout 5 MaxKeepAliveRequests 100
- 書式
KeepAlive (On or Off) KeepAliveTimeout <タイムアウト秒> MaxKeepAliveRequests <リクエスト数>
- KeepAliveTimeout
キープアライブのタイムアウトまでの時間(秒)
デフォルト秒で大抵の場合問題ない。 - MaxKeepAliveRequests
1回のコネクションでダウンロードできるコンテンツの数。
0にすると無制限となる。
- KeepAliveTimeout
MPM
マルチプロセッシングモジュール(MPM)とはHTTPクエリーの処理を行う際の
マルチプロセス・スレッドの扱いに関する動作方法のことである。
prefork、worker、eventの3種類があり、eventがデフォルトである。
configure時にMPMを選択できるよう設定した場合はどのMPMを使用するかを記述する必要がある。
prefork
preforkは事前に複数の子プロセスを生成しておき、HTTPクエリーに対して1プロセスを割り当てる方法。
プロセスの独立性が高いが、メモリやCPUリソースを多く消費する。
- 書式
- StartServers <プロセス数>
起動時のプロセス数 - ServerLimit <プロセス数>
MaxRequestWorkersディレクティブに設定可能な最大の値 - MinSpareServers <プロセス数>
待機プロセスの最小数を指定する - MaxSpareServers <プロセス数>
待機プロセスの最大数を指定する - MaxRequestWorkers <プロセス数>
同時に生成し得るプロセス数 - MaxConnectionsPerChild <コネクション数>
各子プロセスで応答可能なコネクション数。この数を超えるとプロセスが破棄される。
- StartServers <プロセス数>
- デフォルト
StartServers 5 MaxRequestWorkers 256 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 256 MaxConnectionsPerChild 0
- 設定例
LoadModule mpm_event_module modules/mod_mpm_event.so StartServers 5 MaxRequestWorkers 256 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 256 MaxConnectionsPerChild 0
worker
workerは複数の子プロセス内に更にマルチスレッドを展開し、HTTPクエリーに対して1スレッドを割り当てる方法。
preforkと比較して、プロセスの独立性が高くないが、メモリ消費を抑えられる。
- 書式
- デフォルト
StartServers 3
- 設定例
LoadModule mpm_worker_module modules/mod_mpm_worker.so
event
eventはworkerと似た動作をおこうが、workerやpreforkと異なり、
Keep-Aliveの維持処理を独立したスレッドで行うことで、
Keep-Aliveのために継続するか分からないHTTPクエリーを待つことなく
応答の完了したスレッドの破棄を瞬時に行えるようにしている。
- 書式
- StartServers <プロセス数>
Apache起動時の初期プロセス数。
起動後にプロセス数は動的に変更されるので、通常は変更不要。 - ServerLimit <プロセス数>
MaxRequestWorkersディレクティブに設定可能な上限を決定する。
指定可能な上限は ServerLimit * ThreadsPerChild の値となる。
16の倍数で指定する必要がある。 - ThreadsPerChild <スレッド数>
子プロセス起動後に、プロセス内に生成されるスレッドの数を指定する - ThreadLimit <スレッド数>
子プロセス内に生成され得るスレッドの最大数を指定する - MaxRequestWorkers <スレッド数>
※MaxClientsと同じ
同時に稼動しうる全スレッドの最大数を指定する。(つまり同時コネクション数)
ServerLimitの値以下で無ければならない。 - MinSpareThreads <スレッド数>
全プロセス合計での待機スレッドの最小数を指定する - MaxSpareThreads <スレッド数>
全プロセス合計での待機スレッドの最大数を指定する - AsyncRequestWorkerFactor <接続可能コネクション倍数>
MPMがeventの時のみ使用可能なディレクティブ。
event MPMは各コネクションに対して必要な時にスレッドが割り当てられる非同期処理のため、
必ずしもスレッド数の上限がコネクション数の上限とならない。
AsyncRequestWorkerFactorディレクティブによってコネクション数を制限することができる。
具体的には次の値だけ新たに接続可能となる。
ThreadsPerChild値 + 現在のアイドル状態のスレッド数 × AsyncRequestWorkerFactor値
つまり、プロセスあたりの最大コネクション数は以下の式となる。
(AsyncRequestWorkerFactor値 + 1) × MaxRequestWorkers
なお、全てのスレッドが使用状態である場合には新規の接続はできないが、
既存の接続の処理に対してスレッドが割り当てられない場合はkeep-alive中の接続があれば、
そのスレッドをkeep-aliveを中断して再利用しようとする。
AsyncRequestWorkerFactorには小数を指定することが可能である。
- StartServers <プロセス数>
- デフォルト
StartServers 3 ServerLimit 16 ThreadsPerChild 25 ThreadLimit 64 MaxRequestWorkers 400 MinSpareThreads 75 MaxSpareThreads 250 AsyncRequestWorkerFactor 2
- 設定例
LoadModule mpm_event_module modules/mod_mpm_event.so StartServers 3 ServerLimit 16 ThreadsPerChild 25 ThreadLimit 64 MaxRequestWorkers 400 MinSpareThreads 75 MaxSpareThreads 250 AsyncRequestWorkerFactor 2
プロセスの再生成
一定回数のコネクションを処理したプロセスを破棄して再生成させることができる。
例えば、PHP等を使用している場合、メモリリークが発生する場合があるが
子プロセスが応答できるリクエスト数を設定し、その制限を越えるとリクエストを一旦破棄することで、メモリリークを開放することができる。
ただし、子プロセスの再生成はオーバーヘッドとなるので、調整が必要である。
- 書式
MaxRequestsPerChild <リクエスト数>
0にすることで、無制限となる。
- デフォルト
MaxRequestsPerChild 10000
情報出力
サーバ情報
サーバ情報(特にモジュール情報)を出力することができる。
参考:http://httpd.apache.org/docs/current/ja/mod/mod_info.html
SetHandlerによりserver-infoを特定のLocationに関連付けることで出力する。
- 設定例
LoadModule info_module modules/mod_info.so <IfModule info_module> <Location /server-info> SetHandler server-info </Location> </IfModule>
アクセス元制御を行う場合はAllow,Denyディレクティブで行う。
例えば、192.168.0.0/16からのみ許可したい場合は、Locationディレクティブ内に次のように書く。
Require ip 192.168.0.0/16
RewriteRuleで .* を使用している場合、ヒットしてしまうので、
LocationMatch /.*/server-info
として一応回避できる。
サーバ情報に任意の出力追加(特定モジュール箇所)
- 書式
- AddModuleInfo <モジュール名> ‘<HTML文>’
指定したモジュールの表示箇所に指定したHTMLを出力する。
HTML文の ” 内では \ を行末に記載することで開業することができる。
- AddModuleInfo <モジュール名> ‘<HTML文>’
ステータス情報の取得
HTTPデーモンの現在のステータスを出力する
参考:http://httpd.apache.org/docs/current/ja/mod/mod_status.html
SetHandlerによりserver-statusを特定のLocationに関連付けることで出力する。
ExtendedStatusディレクティブを使用することで、より詳細情報を出力できる。
- 設定例
LoadModule info_module modules/mod_status.so <IfModule status_module> ExtendedStatus On <Location /server-status> SetHandler server-status </Location> </IfModule>
アクセス元制御を行う場合はAllow,Denyディレクティブで行う。
例えば、192.168.0.0/16からのみ許可したい場合は、Locationディレクティブ内に次のように書く。
Require ip 192.168.0.0/16
RewriteRuleで .* を使用している場合、ヒットしてしまうので、
LocationMatch /.*/server-status
として一応回避できる。
クライアントキャッシュ
クライアントにダウンロードされたコンテンツの有効期限の設定を行う。
ただし、サーバ側で有効期限の設定を行ってもクライアント側でキャッシュが無効になっている場合は毎回ダウンロードされることになる。
また、有効期限内であってもクライアントによってはIf-Modified-Sinceリクエストヘッダによって
更新がある場合はダウンロードするという挙動を行う場合もある。
なお、クエリストリングも含めて完全一致の場合のみキャッシュが利用される。
参考
- 書式
- ExpiresActive (On | Off)
有効期限の設定を有効・無効にする。
有効期限の値はExpiresByType、もしくはExpiresDefaultディレクティブで設定される。 - ExpiresByType <MIMEタイプ> <有効期限式>
MIMEタイプを指定し、そのタイプの有効期限を指定する。
なお、ExpiresDefaultと同時に指定された場合は、こちらが優先される。 - ExpiresDefault <有効期限式>
指定の式に従って有効期限を設定する。
- ExpiresActive (On | Off)
- 有効期限式
有効期限の式は次のような書式で記述する。
"<base> [plus] <times>*"
例えば、一ヶ月間有効な場合、以下のように記述する(plusは省略可能)
"access plus 1 months"
- base
基準の時刻。この時刻にtimesで指定した時刻を加えたものが有効期限となる。
- access / now
アクセス時刻 - modification
最終更新時刻
- access / now
- times
数値 単位
で表す。
- 単位
years months weeks days hours minutes seconds
- 単位
- 省略形
式は省略して次のように書ける。 ” は不要
(A | M)<秒>
baseにaccessを指定するときはA、modificationの場合はMを指定する。
続けて有効な秒数を指定する。
例えば、アクセス時刻から1ヶ月有効な場合は以下のように記述する。
A2592000
- base
- 設定例
LoadModule expires_module modules/mod_expires.so ExpiresActive On ExpiresDefault "access plus 1 years"
タイムアウト
全般的なタイムアウト時間の設定
以下のタイムアウト値を設定できる。
- クライアントからのデータを読み込む時。受信バッファが空になっていて、TCP パケットが届くまで 待つ時間の長さ
- クライアントに対してデータを送り出す時。送信バッファがいっぱいで、パケットの受信完了(ACK)が届くまで待つ時間の長さ
- mod_cgi内で、CGI スクリプトが出力を 返すまでの待ち時間の長さ
- mod_ext_filter内で、フィルタ処理で出力を待つ時間の長さ
- mod_proxy内で、ProxyTimeoutが設定されていない場合のデフォルトの待ち時間
- 書式
- Timeout <タイムアウト秒>
- デフォルト
TimeOut 60
詳細なタイムアウト時間の設定
header部、body部を受信する際のタイムアウトを定義できる。
デフォルトでは
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
という設定であるが、これは
「ヘッダのタイムアウトまで20秒、データを500byte/s以上送信している間は
タイムアウト時間が1秒ずつ増え、最大40秒まで増える。
データ部は20秒以内に送信する必要がある。」と言う意味である。
- 書式
- RequestReadTimeout [header=<初期タイムアウト秒>[-<最大タイムアウト秒>]][,MinRate=<ヘッダー部転送レート>] [body=<初期タイムアウト秒>[-<最大タイムアウト秒>],MinRate=<ボディ部転送レート>]
headerのみbodyのみ初期タイムアウト秒のみ設定など出来る。
- RequestReadTimeout [header=<初期タイムアウト秒>[-<最大タイムアウト秒>]][,MinRate=<ヘッダー部転送レート>] [body=<初期タイムアウト秒>[-<最大タイムアウト秒>],MinRate=<ボディ部転送レート>]
- デフォルト
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
- 設定例
LoadModule reqtimeout_module modules/mod_reqtimeout.so
サーバキャッシュ
コンテンツをサーバ内でキャッシュする設定を行う。
メモリ上にファイルをキャッシュしたり、プロキシとして利用されるときにローカルにキャッシュする際に利用できる。
参考:http://httpd.apache.org/docs/current/mod/mod_cache.html
- モジュール読み込み書式
LoadModule cache_module modules/mod_cache.so LoadModule cache_disk_module modules/mod_cache_disk.so LoadModule cache_socache_module modules/mod_cache_socache.so mod_mem_cache <IfModule expires_module> </IfModule>
キャッシュ期限
- 書式
- CacheDefaultExpire <キャッシュ時間(秒)>
キャッシュ時間のデフォルト値 - CacheLastModifiedFactor <有効期限計算の重み>
Last-Modified の日付から有効期限の値を次の計算式によって設定する。
有効期限 = current-date + Last-Modifiedの時刻からの経過時間 * CacheDefaultExpire値
例えば、10時間前に更新されたコンテンツの場合、有効期限が1時間後に設定される。 - CacheMaxExpire <キャッシュ時間(秒)>
- CacheDefaultExpire <キャッシュ時間(秒)>
圧縮
クライアントへのコンテンツ応答送信を圧縮することができる
参考:http://httpd.apache.org/docs/current/ja/mod/mod_deflate.html
- 書式
- DeflateBufferSize <バッファサイズ(byte)>
圧縮したデータを格納するバッファ。
バッファを使用しきるとバッファを送出、クリアする。
- DeflateBufferSize <バッファサイズ(byte)>
- DeflateCompressionLevel <圧縮レベル>
圧縮レベルを指定する。
値は 1 (低圧縮) から 9 (高圧縮)である。
レベルが高いほどCPU負荷が高まる
- DeflateMemLevel <メモリ使用レベル>
圧縮時に使用するメモリのレベルを指定する。
1~9で指定し、大きいほどより多くメモリを消費する。
- DeflateWindowSize <ウインドウサイズ>
圧縮処理を行うデータのサイズ(ウインドウサイズ)。
1~15で指定し、大きいほど圧縮効率が向上する。
最近のzlibでは8以上を指定するべきである。
- DeflateFilterNote [<記録値>] <変数名>
圧縮率を記録する(変数に格納する)。
記録した値はアクセスログに出力することができる。
例えば以下のように設定する。
DeflateFilterNote ratio LogFormat '%{ratio}n' customelogtype
記録値は以下が使用可能。
記録値を省略した場合はRatioが記録される。
- Input
圧縮前byte数 - Output
圧縮後byte数 - Ratio
圧縮率
- Input
- 圧縮対象の設定
- SetOutputFilter DEFLATE
全ての応答で圧縮を有効にする
- SetOutputFilter DEFLATE
- AddOutputFilterByType DEFLATE <MIMEタイプ> [<MIMEタイプ>]
特定のMIMEタイプで圧縮を有効にする
HTMLで有効にする場合は以下である。
AddOutputFilterByType DEFLATE text/html
PHPで有効にする場合は以下である。
AddOutputFilterByType DEFLATE application/x-httpd-php
- BrowserMatch <ブラウザ名> gzip-only-text/html
指定のブラウザでhtmlファイル以外の圧縮を無効にする
- BrowserMatch <ブラウザ名> no-gzip
指定のブラウザで圧縮を無効にする
- デフォルト
DeflateBufferSize 8096 DeflateCompressionLevel <zlibのデフォルト> DeflateMemLevel 9 DeflateWindowSize 15
- 設定例
- PHPを圧縮する
LoadModule deflate_module modules/mod_deflate.so DeflateBufferSize 8096 DeflateCompressionLevel 8 DeflateMemLevel 8 DeflateWindowSize 15 AddOutputFilterByType DEFLATE text/html application/x-httpd-php
- PHPを圧縮する
CGI
CGIファイルの保存場所の設定
CGIはサーバ再度で実行するので、通常プログラムそのものは公開ディレクトリに設定する必要はない。
そのため、エイリアスを設定してURLとCGI実行場所を関連付ける。
- 書式
ScriptAlias <URLパス> "<ディレクトリ絶対パス>"
SSLの利用
SSLを利用してHTTPSアクセスできるようにする。
SSLモジュールはデフォルトではインストールされないのでApacheインストール時にインストールしていない場合は再度コンパイルする必要がある。
証明書の用意
SSLを使用する場合、公開鍵証明書が必要となる。
外部で発行された証明書がない場合はローカルで証明書を生成する。
- 手順
- RSA秘密鍵を生成する
openssl genrsa -out server.key 2048
- 生成した鍵ファイルから証明書を作成する
openssl req -new -key server.key -out server.csr
- 証明書に署名を行う
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 配置する
mkdir $APACHE_HOME/ssl mv server.* $APACHE_HOME/ssl/
- RSA秘密鍵を生成する
設定
- 書式
Listen 443 SSLRandomSeed SSLCipherSuite SSLHonorCipherOrder SSLPassPhraseDialog SSLSessionCache SSLSessionCacheTimeout SSLEngine on SSLCertificateFile ssl/server.csr SSLCertificateKeyFile
認証
Basic認証
Basic認証を用いてアクセス制限を行う。
- モジュール
LoadModule auth_basic_module modules/mod_auth_basic.so
- ディレクティブ
- AuthType
BASIC認証であることを指定する。
AuthType Basic
- AuthName
認証画面に表示させるメッセージを指定する - AuthUserFile
作成したパスワードファイルを指定する - AuthGroupFile
作成したグループファイルを指定する - Require
認証対象とするユーザまたはグループを指定する
Require user <ユーザ名1> <ユーザ名2> ...
or
Require group <グループ名1> <グループ名2> ...
もしくは認証が通った全てのユーザのアクセスを許可する
Require valid-user
- AuthType
- 書式
Digest認証
Digest認証では認証領域(レルム)というパラメータを利用し、
パスワードファイルとApacheに同じ値を設定しておく必要がある。
- ディレクティブ
- AuthType
Digest認証であることを指定する。
AuthType Digest
- AuthName
認証領域を設定する。 - AuthUserFile
作成したパスワードファイルを指定する - AuthGroupFile
作成したグループファイルを指定する - Require
認証対象とするユーザまたはグループを指定する
Require user <ユーザ名1> <ユーザ名2> ...
or
Require group <グループ名1> <グループ名2> ...
もしくは認証が通った全てのユーザのアクセスを許可する
Require valid-user
- AuthType
- パスワードファイルの管理
認証に使用するパスワードファイルはhtdigestコマンドにより管理する。
- 書式
- パスワードファイルを新規に作成する場合
htdigest -c <パスワードファイル> <領域名> <ユーザ名>
- パスワードファイルが既に作成されている場合
htdigest <パスワードファイル> <領域名> <ユーザ名>
- パスワードファイルを新規に作成する場合
ログ
Apacheには2種類のログが存在する。
1つはHTTP(S)リクエストに関する情報を記録するアクセスログで、
もう一つはWebサーバ自体の挙動に関する情報を記録するエラーログである。
なお、VirtualHostディレクティブ内とグローバル両方にアクセスログの設定を行った場合は、
VirtualHostに関するログはVirtualHost内に設定したログファイルのみに記録され、グローバルで設定したほうには記録されない。
エラーログ
Webサーバ自体の挙動に関する情報を記録する。
エラーログはログ記録対象となるイベントが発生したタイミングで記録される。
エラーログとして出力される情報は設定した重要度以上のものが出力される。
ただし、noticeレベルのログは設定にかかわらず、必ず出力される。
なお、エラーログ中にログレベルは出力される。
- 書式
- LogLevel <ログレベル名>
出力するログレベルを指定する - ErrorLog “<ログファイル>”
ログの保存先を指定する。
syslogに記録する場合は次のようにする。
ErrorLog syslog:<ファシリティ>
- LogLevel <ログレベル名>
- ログレベル
レベルの数値が大きいほど重要度は高い。
レベル レベル名 説明 7 emerg 緊急 – システムが利用できない 6 alert 直ちに対処が必要 5 crit 致命的な状態 4 error エラー 3 warn 警告 2 notice 普通だが、重要な情報 1 info 追加情報 0 debug デバッグメッセージ
アクセスログの使用
HTTP(S)リクエストに関する情報を記録する。
アクセスログはリクエストの応答が完了した時点で記録される。
つまり、リクエスト開始から終了まで時間がかかった場合は終了時間は把握できるが、開始時間が把握しづらくなる。
- 書式
- LogFormat “<フォーマット>” <フォーマット名>
アクセスログを記録する際に任意に指定したフォーマットで記録できる。
- フォーマット特殊変数
フォーマット文字列 説明 %% パーセント記号 %a リモート IP アドレス %A ローカル IP アドレス %B レスポンスのバイト数。HTTPヘッダは除く。 %b レスポンスのバイト数。HTTPヘッダは除く。CLF 書式。 すなわち、1バイトも送られなかったときは0ではなく、’-‘ になる %{Foobar}C サーバに送られたリクエスト中のクッキー Foobar の値 %D リクエストを処理するのにかかった時間、マイクロ秒単位 %{FOOBAR}e 環境変数 FOOBAR の内容 %f ファイル名 %h リモートホスト %H リクエストプロトコル %{Foobar}i サーバに送られたリクエストの Foobar: ヘッダの内容。例%{Referer}i、%{User-Agent}i %l (identd からもし提供されていれば) リモートログ名。 これは mod_ident がサーバに存在して、 IdentityCheck ディレクティブが On に設定されていない限り、-になります。 %m リクエストメソッド %{Foobar}n 他のモジュールからのメモ Foobar の内容 %{Foobar}o 応答の Foobar: ヘッダの内容 %p リクエストを扱っているサーバの正式なポート %{format}p サーバがリクエストを処理しているポートの公式のポート番号(canonical)か、サーバの実際のポート番号(local)か、クライアント側の実際のポート番号(remote)かです。 %P リクエストを扱った子プロセスのプロセス ID %{format}P リクエストを扱ったワーカーのプロセス ID かスレッド ID。 format として有効な値は pid, tid, hextid です。hextid を使うには APR 1.2.0 以降が必要です。 %q 問い合せ文字列 (存在する場合は前に ? が追加される。 そうでない場合は空文字列) %r リクエストの最初の行 %s ステータス。内部でリダイレクトされたリクエストは、元々の リクエストのステータス — 最後のステータスは %>s %t リクエストを受付けた時刻。 CLF の時刻の書式 (標準の英語の書式) %{format}t format で与えられた書式による時刻。format は strftime (3) の 書式である必要がある。(地域化されている可能性がある) %T リクエストを扱うのにかかった時間、秒単位 %u リモートユーザ (認証によるもの。ステータス (%s) が 401 のときは意味がないものである可能性がある) %U リクエストされた URL パス。クエリ文字列は含まない %v リクエストを扱っているサーバの正式な ServerName %V UseCanonicalName の設定によるサーバ名 %X 応答完了時の接続ステータス:X=応答完了前に接続が異常終了、+=応答送信後に接続を持続することが可能、-=応答送信後に接続が切られる %I リクエストとヘッダを含む、受け取ったバイト数。 0 にはならない。 これを使用するためには mod_logio が必要 %O ヘッダを含む、送信したバイト数。0 にはならない。 これを使用するためには mod_logio が必要 - ユーザーエージェント
%{User-Agent}i
- リファラー
%{Referer}i
- 転送元(バランサやプロキシを使用時)
%{X-Forwarded-For}i
- Cookie
%{Cookie}i
- フォーマット特殊変数
- CustomLog “<ログファイル>” <ログフォーマット>
ログの保存先を指定する。
ログファイルの指定で、 | を先頭に指定することで、外部プログラムに渡すことができる。
自動ログローテーションを行うツールが付属しているので、そこのログ出力を渡すことでローテーションを行うことができる。
24時間ごとにローテーションを行う例
CustomLog "| /usr/local/apache-httpd/bin/rotatelogs /usr/local/apache-httpd/logs/access_log.%Y-%m-%d 86400" <ログフォーマット>
- BufferedLogs (On|Off)
バッファを有効にするかどうかを指定する。
バッファを有効にすると、アクセスログの書き出し時にメモリバッファに一旦格納し、複数のログを一度に書き出すようになる。
これによって通常パフォーマンスが向上する。
ただし、各プロセス、またはスレッドはアクセス直後にログを書き出さなくなるので、ログが時系列順に出力されなくなる。
- LogFormat “<フォーマット>” <フォーマット名>
- 設定例
LogFormat "%{%Y/%m/%d(%a) %T}t %>s:\"%r\" \"Ref:%{Referer}i\" \"UA:%{User-Agent}i\" %a (%T sec (%D usec))" original CustomLog "logs/access_log" original BufferedLogs On
パフォーマンス
排他制御の設定
- デフォルト
なし ※Mutex default
- 書式
Mutex <排他方式> [default|<適用箇所>] ... [OmitPID]
- 排他方式
排他方式の後に続けて :<パス> を書くことで、ロックファイルを書き出す場所を指定できる。
- default
- none
- 適用箇所
- OmitPIDフラグ
OmitPIDを付記することによってロックファイルの名前の末尾に .プロセスID が付く。
- 排他方式
セキュリティ
レスポンスヘッダ
レスポンスヘッダにはデフォルトでApacheのバージョンとOS名が含まれる。
この情報は既知のセキュリティホールに対して攻撃を誘発させるので、隠蔽したほうがよい。
この環境でのデフォルトのレスポンスは次のとおり。
Server: Apache/2.4.6 (Unix)
これを変更することで、次のようになる。
Server: Apache
- デフォルト
ServerTokens OS
- 設定内容
ServerTokens Prod
もし反対に、更にPHPなどアプリケーションの情報も付加したい場合は以下のように設定する。
ServerTokens Full
フッター
存在しないページにアクセスした時に表示されるエラーページに表示されるApacheのバージョンなどの情報がフッターとして出力される。
この情報は既知のセキュリティホールに対して攻撃を誘発させるので、隠蔽したほうがよい。
ただしデフォルトでOffであるので、特に変更する必要はない。
- 書式
ServerSignature (On | Off | EMail)
- デフォルト
ServerSignature Off
Traceメソッドの無効化
HTTPのTraceメソッド(リクエスト内容をそのまま応答する)は過去に攻撃に用いられており、
現在では危険性はそれほどではないが、特に必要ではないので、無効化する。
- デフォルト
TraceEnable on
- 設定内容
TraceEnable off
シンボリックリンクの利用禁止
ツール
起動スクリプト
インストール時に作成した/etc/init.d/httpdの起動スクリプトにより以下が行える。
- 起動
service httpd start
- 終了
service httpd stop
- 再起動(起動していない場合は通常の起動を行う)
service httpd restart
- 再起動(起動している場合のみ)
service httpd condrestart
- 設定の再読み込み
service httpd reload
- 起動確認
service httpd status
- 現在のコネクションを終了するまで待って再起動
service httpd graceful
- 設定ファイルの検査
service httpd configtest
httpd
デーモンプログラムの本体であるが、モジュール確認など行える。
- オプション一覧
[root@apache1 ~]# httpd -h Usage: httpd [-D name] [-d directory] [-f file] [-C "directive"] [-c "directive"] [-k start|restart|graceful|graceful-stop|stop] [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X] Options: -D name : define a name for use in <IfDefine name> directives -d directory : specify an alternate initial ServerRoot -f file : specify an alternate ServerConfigFile -C "directive" : process directive before reading config files -c "directive" : process directive after reading config files -e level : show startup errors of level (see LogLevel) -E file : log startup errors to file -v : show version number -V : show compile settings -h : list available command line options (this page) -l : list compiled in modules -L : list available configuration directives -t -D DUMP_VHOSTS : show parsed vhost settings -t -D DUMP_RUN_CFG : show parsed run settings -S : a synonym for -t -D DUMP_VHOSTS -D DUMP_RUN_CFG -t -D DUMP_MODULES : show all loaded modules -M : a synonym for -t -D DUMP_MODULES -t : run syntax check for config files -T : start without DocumentRoot(s) check -X : debug mode (only one worker, do not detach)
バージョン確認
- 書式
httpd -v
- 出力例
[root@apache1 ~]# httpd -v Server version: Apache/2.4.7 (Unix) Server built: Mar 11 2014 07:41:34
コンパイル情報確認
- 書式
httpd -V
- 出力例
[root@apache1 ~]# httpd -V Server version: Apache/2.4.7 (Unix) Server built: Mar 11 2014 07:41:34 Server's Module Magic Number: 20120211:27 Server loaded: APR 1.5.0, APR-UTIL 1.5.3 Compiled using: APR 1.5.0, APR-UTIL 1.5.3 Architecture: 64-bit Server MPM: event threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/usr/local/apache-httpd-2.4.7" -D SUEXEC_BIN="/usr/local/apache-httpd-2.4.7/bin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf"
staticモジュールの確認
- 書式
httpd -l
- 出力例
[root@apache1 ~]# httpd -l Compiled in modules: core.c mod_so.c http_core.c
使用可能ディレクティブ一覧の確認
- 書式
httpd -L
- 出力例
[root@apache1 ~]# 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> <Location (core.c) Container for directives affecting resources accessed through the specified URL paths Allowed in *.conf only outside <Directory>, <Files>, <Location>, or <If> <VirtualHost (core.c) Container to map directives to a particular virtual host, takes one or more host addresses Allowed in *.conf only outside <Directory>, <Files>, <Location>, or <If> <Files (core.c) Container for directives affecting files matching specified patterns Allowed in *.conf anywhere and in .htaccess when AllowOverride isn't None ... .. .
基本情報の確認
実行ユーザやディレクトリといった基本的な情報を確認できる
- 書式
httpd -t -D DUMP_RUN_CFG
- 出力例
[root@apache1 ~]# httpd -t -D DUMP_RUN_CFG ServerRoot: "/usr/local/apache-httpd-2.4.7" Main DocumentRoot: "/usr/local/apache-httpd-2.4.7/htdocs" Main ErrorLog: "/usr/local/apache-httpd-2.4.7/logs/error_log" Mutex proxy: using_defaults Mutex authn-socache: using_defaults Mutex default: dir="/usr/local/apache-httpd-2.4.7/logs/" mechanism=default Mutex authdigest-opaque: using_defaults Mutex authdigest-client: using_defaults PidFile: "/usr/local/apache-httpd-2.4.7/logs/httpd.pid" Define: DUMP_RUN_CFG User: name="apache" id=501 Group: name="apache" id=501
読み込みモジュールの一覧確認
- 書式
httpd -M
- 出力例
[root@apache1 ~]# httpd -M Loaded Modules: core_module (static) so_module (static) http_module (static) authn_file_module (shared) authn_dbm_module (shared) authn_anon_module (shared) authn_dbd_module (shared) authn_socache_module (shared) authn_core_module (shared) authz_host_module (shared) authz_groupfile_module (shared) authz_user_module (shared) authz_dbm_module (shared) authz_owner_module (shared) authz_dbd_module (shared) authz_core_module (shared) access_compat_module (shared) auth_basic_module (shared) auth_form_module (shared) auth_digest_module (shared) reqtimeout_module (shared) filter_module (shared) mime_module (shared) log_config_module (shared) log_debug_module (shared) log_forensic_module (shared) logio_module (shared) env_module (shared) headers_module (shared) setenvif_module (shared) version_module (shared) proxy_module (shared) proxy_http_module (shared) mpm_event_module (shared) unixd_module (shared) dav_module (shared) autoindex_module (shared) dav_fs_module (shared) dav_lock_module (shared) dir_module (shared) alias_module (shared) info_module (shared) status_module (shared) php5_module (shared) wsgi_module (shared)
設定ファイルのチェック
- 書式
httpd -t
- 出力例
[root@apache1 ~]# httpd -t Syntax OK
apachectl
$APACHE_HOME/bin/apachectl
にインストールされたツール。
起動スクリプトとほぼ同様の動作の制御に加えて、各種モジュールの導入確認も行える。
よく使う場合は、PATHに入れておく。
find / -name apachectl # /usr/sbin/などPATH内に含まれていたら削除しておく。 ln -s $APACHE_HOME/bin/apachectl /usr/local/sbin/apachectl
また、ステータス確認系はテキストブラウザと呼ばれるツールが必要になるので、インストールしておく。
yum install lynx
- 起動
apachectl start
- 終了
apachectl stop
- 再起動
apachectl restart
- 現在のコネクションを終了するまで待って再起動
apachectl graceful
- 現在のコネクションを終了するまで待って停止
apachectl graceful-stop
- 設定ファイルの検査
apachectl configtest
ステータス確認
mod_statusモジュールをロードし、/server-statusのURLでローカルからアクセスな場合、ステータスの表示を行える。
- 簡易ステータス確認
apachectl status
- 詳細ステータス確認
apachectl fullstatus
- 出力例
- 簡易ステータス確認
[root@main2 httpd-2.4.7]# apachectl status Apache Server Status for localhost (via ::1) Server Version: Apache/2.4.7 (Unix) Server MPM: event Server Built: Dec 19 2013 11:31:18 __________________________________________________________________ Current Time: Thursday, 19-Dec-2013 12:50:59 JST Restart Time: Thursday, 19-Dec-2013 12:03:08 JST Parent Server Config. Generation: 2 Parent Server MPM Generation: 1 Server uptime: 47 minutes 51 seconds Server load: 0.00 0.00 0.00 Total accesses: 1 - Total Traffic: 3 kB CPU Usage: u0 s.03 cu0 cs0 - .00104% CPU load .000348 requests/sec - 1 B/second - 3072 B/request 1 requests currently being processed, 74 idle workers PID Connections Threads Async connections total accepting busy idle writing keep-alive closing 10849 0 yes 1 24 0 0 0 10850 0 yes 0 25 0 0 0 10851 0 yes 0 25 0 0 0 Sum 0 1 74 0 0 0 ___W____________________________________________________________ ___________..................................................... ................................................................ ................................................................ ................................................................ ................................................................ ................ Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, "C" Closing connection, "L" Logging, "G" Gracefully finishing, "I" Idle cleanup of worker, "." Open slot with no current process
- 簡易ステータス確認
- 詳細ステータス確認
[root@main2 httpd-2.4.7]# apachectl fullstatus Apache Server Status for localhost (via ::1) Server Version: Apache/2.4.7 (Unix) Server MPM: event Server Built: Dec 19 2013 11:31:18 __________________________________________________________________ Current Time: Thursday, 19-Dec-2013 12:51:45 JST Restart Time: Thursday, 19-Dec-2013 12:03:08 JST Parent Server Config. Generation: 2 Parent Server MPM Generation: 1 Server uptime: 48 minutes 36 seconds Server load: 0.00 0.00 0.00 Total accesses: 2 - Total Traffic: 7 kB CPU Usage: u.27 s.6 cu0 cs0 - .0298% CPU load .000686 requests/sec - 2 B/second - 3584 B/request 1 requests currently being processed, 74 idle workers PID Connections Threads Async connections total accepting busy idle writing keep-alive closing 10849 0 yes 1 24 0 0 0 10850 0 yes 0 25 0 0 0 10851 0 yes 0 25 0 0 0 Sum 0 1 74 0 0 0 _W______________________________________________________________ ___________..................................................... ................................................................ ................................................................ ................................................................ ................................................................ ................ Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, "C" Closing connection, "L" Logging, "G" Gracefully finishing, "I" Idle cleanup of worker, "." Open slot with no current process Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request 0-1 10849 0/1/1 _ 0.03 2636 0 0.0 0.00 0.00 ::1 127.0.0.1:80 GET /server-status HTTP/1.0 0-1 10849 0/0/0 W 0.00 0 0 0.0 0.00 0.00 ::1 127.0.0.1:80 GET /server-status HTTP/1.0 0-1 10849 0/1/1 _ 0.87 45 0 0.0 0.00 0.00 ::1 127.0.0.1:80 GET /server-status HTTP/1.0 __________________________________________________________________ Srv Child Server number - generation PID OS process ID Acc Number of accesses this connection / this child / this slot M Mode of operation CPU CPU usage, number of seconds SS Seconds since beginning of most recent request Req Milliseconds required to process most recent request Conn Kilobytes transferred this connection Child Megabytes transferred this child Slot Total megabytes transferred this slot
起動時のログを確認する
apacheを起動した際に発生するログを表示する。
起動していない場合は実際に起動される。
起動時に多量のエラーが発生している場合に、問題解決のため表示の抑制をするのに使用する。
- 書式
apachectl -e <ログレベル>
- ログレベル
レベル 説明 emerg 緊急 – システムが利用できない alert 直ちに対処が必要 crit 致命的な状態 error エラー warn 警告 notice 普通だが、重要な情報 info 追加情報 debug デバッグメッセージ
ab (Apache HTTP server benchmarking tool)
特定の単一のページにHTTPアクセスによる負荷をかけ、そのベンチマークを計測するツール。
- 書式
ab [オプション] <URL>
オプション
- -A <auth-username>:<password>
BASIC認証が必要なページで認証情報を設定する - -c <同時接続数>
同時接続数を指定する - -f <SSL/TLSプロトコル>
SSL/TLSプロトコルを指定する - -k
KeepAliveを有効にする。デフォルトでは無効である。 - -n <リクエスト数>
接続試行回数を指定する - -s <タイムアウト秒>
タイムアウト時間を指定する。デフォルトでは30秒である。 - -v <詳細レベル>
4まで指定可能。 - -H “<ヘッダ>”
任意のヘッダを指定する
圧縮を有効にする場合は以下
-H "Accept-Encoding: gzip,deflate"
htdigest
HTTP Digest認証で使用できる認証情報ファイルを作成できる。
- 書式
htdigest [-c] <ファイルパス> <レルム> <ユーザ名>
実行後、パスワード入力が求められるので、指定したユーザに設定するパスワードを入力する。
新規にファイルを作成する場合は-cオプションを付ける。
既存のファイルが存在する場合は削除されてしまうので注意。
なお、レルムとは認証領域とも言われ、認証を求める場合にレルムを指定して、そのレルム内に設定されたユーザ情報で認証を行う。
運用
チューニング
セッション数
keepalive timeout
CPU負荷が高い
Preforkを使用していてマイナーページフォルトが多発している
プロセスの有効期限を短くする
シンボリックリンクの利用許可
Options FollowSymLinks