Apache 2.4.34

Contents

Apache HTTPDについて

公式ページ

リファレンス

用語

スロット

HTTPリクエストを処理するユニットのこと。
マルチプロセスモデルではプロセスがスロットとなり、マルチスレッドモデルではスレッドがスロットとなる。


サーバー構築

構築環境

 

 

OS設定

ネットワーク

固定IPアドレス割り当て


次のファイルを編集する

# ifcfg-loはループバックインタフェースであるため、触らない
vi /etc/sysconfig/network-scripts/ifcfg-<インタフェース名>


以下では例として192.168.0.51/24を割り当てた

BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.0.51
NETMASK=255.255.255.0
NETWORK=192.168.0.0
GATEWAY=192.168.0.1


ネットワークを再起動する

systemctl restart network


ip addressコマンドにより、インタフェースが有効になっていることを確認する
これによりホストマシンなどからSSHでログイン可能となる


firewalld

HTTPを開ける
  1. 現在ルールが定義されていることを確認
    firewall-cmd --permanent --info-service=http
  2. 現在ルールが適用されていないことを確認する
    firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep http
  3. ルールを適用する
    firewall-cmd --add-service=http --zone=public --permanent
  4. ルールが適用されていることを確認する
    firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep http
  5. 設定を再読み込みして反映させる
    firewall-cmd --reload

 

HTTPSも開ける場合
  1. 現在ルールが定義されていることを確認
    firewall-cmd --permanent --info-service=https
  2. 現在ルールが適用されていないことを確認する
    firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep https
  3. ルールを適用する
    firewall-cmd --add-service=https --zone=public --permanent
  4. ルールが適用されていることを確認する
    firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep https
  5. 設定を再読み込みして反映させる
    firewall-cmd --reload

 

TCP/10080を開ける場合

標準のHTTP/HTTPSポートではないポートを使用する場合は次のように行う。

  1. 現在ルールが定義されていないか確認
    firewall-cmd --permanent --info-service=http_10080
  2. 新しいルールを定義
    firewall-cmd --new-service=http_10080 --permanent
    firewall-cmd --service=http_10080 --add-port=10080/tcp --permanent
  3. ルールが定義されていることを確認
    firewall-cmd --permanent --info-service=http_10080
  4. 現在ルールが適用されていないことを確認する
    firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep http_10080
  5. ルールを適用する
    firewall-cmd --add-service=http_10080 --zone=public --permanent
  6. ルールが適用されていることを確認する
    firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep http_10080
  7. 設定を再読み込みして反映させる
    firewall-cmd --reload

 

ホスト名


ホスト名としてapacheを設定する

hostname apache.corp
# 再起動しても有効にする
echo apache.corp > /etc/hostname

再ログインすることで有効になる。

ユーザ作成


Apache用のユーザを作成する

useradd --user-group --no-create-home --shell /sbin/false apache



Apacheインストール

 

ソースコードからインストール

関連ソフトウェアのインストール

OpenSSL

HTTPS(SSL)を使用する場合、opensslが必要となる。
デフォルトでもインストールされているが、古いバージョンなので、新しくインストールする。

最新のバージョンを確認する場合はこちら

 

 

zlib

mod_deflate(圧縮)を使用する場合必要となる。
最新バージョンを確認する

curl -s -O https://zlib.net/zlib-1.2.11.tar.gz
tar xfvz zlib-*.tar.gz
cd zlib-*
./configure --prefix=/usr/local/`pwd | sed "s/.*\///"`
make
make install
ln -s /usr/local/zlib-* /usr/local/zlib
cd ../
rm -rf zlib*

 

その他

以下のパッケージをまとめてインストールする

yum install gcc pcre-devel lynx expat-devel -y

 

Apacheのインストール

不特定多数から直接アクセスを受けるWebサーバであるApacheは常に最新のバージョンを
導入できるようにソースコードからのインストールを推奨。
(パッケージは用意されるまでに時間がかかる)

  1. ダウンロードサイトからアーカイブのURLを取得し、ダウンロードする
    curl -s -O http://ftp.riken.jp/net/apache//httpd/httpd-2.4.34.tar.gz
  2. アーカイブファイルを展開する
    tar zfxv httpd-*.tar.gz
  3. アーカイブは削除する
    rm -f httpd-*.tar.gz
  4. Apache Portable Runtime(APR)をインストールする
    ※Apache Portable Runtimeとはクロスプラットフォームサポート用のライブラリ
    1. ダウンロードサイトからアーカイブのURLを取得し、ダウンロードする
      curl -s -O http://ftp.riken.jp/net/apache//apr/apr-1.6.3.tar.gz
      curl -s -O http://ftp.riken.jp/net/apache//apr/apr-util-1.6.1.tar.gz
    2. アーカイブファイルを展開する
      tar zfxv apr-1*.tar.gz
      tar zfxv apr-util-*.tar.gz
    3. アーカイブは削除する
      rm -f apr-*.tar.gz
    4. Apacheディレクトリへ移動
      mv apr-util-* `ls -d httpd-*`/srclib/apr-util
      mv apr-* `ls -d httpd-*`/srclib/apr
  5. Apacheのディレクトリに移動する
    cd httpd-*
  6. コンパイル、インストールを行う
    1. コンパイル最適化設定を行う
      export CFLAGS="-O3 -m64"
    2. Makefileを生成する
      • インストール先(prefix)
        /usr/local/apache-httpd-<APACHE_VERSION>
      • ファイル配置(enable-layout)
        標準(Apache)。配置内容はconfig.layoutに記載。
      • 静的モジュール(enable-modules)
        全て使用
      • 動的モジュール(enable-mods-shared)
        基本的なものは全て使用(後から個別に無効にできる)
      • 圧縮モジュール(enable-deflate / –with-z)
        有効
      • SSL使用(enable-ssl)
        ./configure --prefix=/usr/local/apache-`pwd | sed "s/.*-//"` \
            --enable-layout=Apache --enable-modules=all --enable-mods-shared=all \
            --enable-deflate --with-z=/usr/local/zlib --enable-ssl --with-ssl=/usr/local/openssl \
            2>&1 | tee configure.log.`date +"%Y%m%d"`
        ※event以外のMPMを使用する可能性がある場合は次のオプションを加える。
        --enable-mpms-shared=all
      • SSL未使用
        ./configure --prefix=/usr/local/apache-`pwd | sed "s/.*-//"` \
            --enable-layout=Apache --enable-modules=all --enable-mods-shared=all \
            --enable-deflate --with-z=/usr/local/zlib \
            2>&1 | tee configure.log.`date +"%Y%m%d"`
        ※event以外のMPMを使用する可能性がある場合は次のオプションを加える。
        --enable-mpms-shared=all

        使用できる設定内容は以下のとおり

      • オプション一覧

        [root@apache httpd-2.4.34]# ./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
          --enable-authnz-fcgi    FastCGI authorizer-based authentication and
                                  authorization
          --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-brotli         Brotli compression support
          --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
                                  --enable-proxy.
          --enable-proxy-ftp      Apache proxy FTP module. Requires --enable-proxy.
          --enable-proxy-http     Apache proxy HTTP module. Requires --enable-proxy.
          --enable-proxy-fcgi     Apache proxy FastCGI module. Requires
                                  --enable-proxy.
          --enable-proxy-scgi     Apache proxy SCGI module. Requires --enable-proxy.
          --enable-proxy-uwsgi    Apache proxy UWSGI module. Requires --enable-proxy.
          --enable-proxy-fdpass   Apache proxy to Unix Daemon Socket module. Requires
                                  --enable-proxy.
          --enable-proxy-wstunnel Apache proxy Websocket Tunnel module. Requires
                                  --enable-proxy.
          --enable-proxy-ajp      Apache proxy AJP module. Requires --enable-proxy.
          --enable-proxy-balancer Apache proxy BALANCER module. Requires
                                  --enable-proxy.
          --enable-proxy-express  mass reverse-proxy module. Requires --enable-proxy.
          --enable-proxy-hcheck   reverse-proxy health-check module. Requires
                                  --enable-proxy and --enable-watchdog.
          --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-http2          HTTP/2 protocol handling in addition to HTTP
                                  protocol handling. Implemented by mod_http2. This
                                  module requires a libnghttp2 installation. See
                                  --with-nghttp2 on how to manage non-standard
                                  locations. This module is usually linked shared and
                                  requires loading.
          --enable-nghttp2-staticlib-deps
                                  link mod_http2 with dependencies of libnghttp2's
                                  static libraries (as indicated by "pkg-config
                                  --static"). Must be specified in addition to
                                  --enable-http2.
          --enable-proxy-http2    HTTP/2 proxy module. This module requires a
                                  libnghttp2 installation. See --with-nghttp2 on how
                                  to manage non-standard locations. Also requires
                                  --enable-proxy.
          --enable-md             Managed Domain handling
          --enable-jansson-staticlib-deps
                                  link mod_md with dependencies of libjansson's static
                                  libraries (as indicated by "pkg-config --static").
                                  Must be specified in addition to --enable-md.
          --enable-curl-staticlib-deps
                                  link mod_md with dependencies of libcurl's static
                                  libraries (as indicated by "pkg-config --static").
                                  Must be specified in addition to --enable-md.
          --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-suexec-capabilities
                                  Use Linux capability bits not setuid root suexec
          --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-brotli=PATH      Brotli installation directory
          --with-lua=PATH         Path to the Lua 5.3/5.2/5.1 prefix
          --with-ssl=PATH         OpenSSL installation directory
          --with-nghttp2=PATH     nghttp2 installation directory
          --with-jansson=PATH     jansson installation directory
          --with-curl=PATH        curl 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-syslog    Use syslog for suexec logging
          --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.
    3. コンパイルする
      make 2>&1 | tee make.log.`date +"%Y%m%d"`
    4. インストールを行う。
      make install 2>&1 | tee make_install.log.`date +"%Y%m%d"`
  7. リンク作成、環境変数設定などを行う
    1. インストールディレクトリへのシンボリックリンクを作成する。
      これによって、複数のバージョンを同居させ、リンクを切り替えることで、バージョン変更が可能となる。
      各バージョンの実行ファイルはデフォルトでは各バージョンの設定ファイルを読み込むこととなる。
      rm -f /usr/local/apache
      ln -s /usr/local/apache-`pwd | sed "s/.*-//"` /usr/local/apache
    2. 簡単にアクセスできるように環境変数を設定する
      export APACHE_HOME=/usr/local/apache
    3. ツール類にパスを通す
      export PATH=$APACHE_HOME/bin:$APACHE_HOME/sbin:$PATH
    4. 環境変数を再起動後も有効にする
      echo "" >> /etc/bashrc
      echo "# APACHE ENVIRONMENT VARIABLE" >> /etc/bashrc
      echo "export APACHE_HOME=$APACHE_HOME" >> /etc/bashrc
      echo "export PATH=\$APACHE_HOME/bin:\$APACHE_HOME/sbin:\$PATH" >> /etc/bashrc
    5. 実行できることを確認する
      httpd -V
      # バージョン情報が出力される
  8. systemdの設定する
    1. サーバーのサービスファイルを作成する
      cat > /etc/systemd/system/apache.service << EOT
      [Unit]
      Description=The Apache HTTP Server
      After=network.target remote-fs.target nss-lookup.target
      Documentation=man:httpd(8)
      Documentation=man:apachectl(8)
      
      [Service]
      Type=forking
      ExecStart=$APACHE_HOME/bin/apachectl start
      ExecReload=$APACHE_HOME/bin/apachectl graceful
      ExecStop=$APACHE_HOME/bin/apachectl stop
      # We want systemd to give httpd some time to finish gracefully, but still want
      # it to kill httpd after TimeoutStopSec if something went wrong during the
      # graceful stop. Normally, Systemd sends SIGTERM signal right after the
      # ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
      # httpd time to finish.
      KillSignal=SIGCONT
      PrivateTmp=true
      
      [Install]
      WantedBy=multi-user.target
      EOT
    2. サービスを有効化する
      systemctl enable apache
    3. サービスが有効化されていることを確認する
      systemctl list-unit-files --type service --no-pager | grep apache
  9. インストールしたディレクトリに移動する
    cd $APACHE_HOME
  10. ファイル所有者を変更する
    chown -R apache:apache /usr/local/apache*
  11. 基本設定を行う
    sed "s/^#ServerName.*/ServerName 127.0.0.1:80/g" -i conf/httpd.conf
    sed "s/User daemon/User apache/g" -i conf/httpd.conf
    sed "s/Group daemon/Group apache/g" -i conf/httpd.conf
  12. Apacheを起動する
    systemctl start apache
  13. 稼働確認
    systemctl status apache
    正常に起動していない場合、ログを確認する。
    journalctl -u apache
    cat /var/log/messages
  14. 接続確認
    curl http://localhost/
    # <html><body><h1>It works!</h1></body></html>
  15. 停止
    systemctl stop apache
  16. シェルなどから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

 

初期設定

cat > $APACHE_HOME/conf/httpd.conf << EOT
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule alias_module modules/mod_alias.so

ServerRoot "/usr/local/apache"
Listen 80

LoadModule unixd_module modules/mod_unixd.so
<IfModule unixd_module>
  User apache
  Group apache
</IfModule>

<Directory />
  AllowOverride none
  Require all denied
</Directory>

DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs">
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

LoadModule dir_module modules/mod_dir.so
<IfModule dir_module>
  DirectoryIndex index.html
</IfModule>

LoadModule mime_module modules/mod_mime.so
<IfModule mime_module>
    TypesConfig conf/mime.types
</IfModule>

ErrorLog "logs/error_log"
LogLevel warn

LoadModule log_config_module modules/mod_log_config.so
<IfModule log_config_module>
  LogFormat "%{%Y/%m/%d(%a) %T}t  %>s:\"%r\" \"Ref:%{Referer}i\" \"UA:%{User-Agent}i\" %a (%T sec (%D usec))" original
  CustomLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%Y-%m-%d 86400" original
  BufferedLogs On
</IfModule>
EOT


パッケージからインストール

次のコマンドでインストールできる

yum install httpd -y

 

モジュール

モジュールの確認

 

 

モジュールの追加

パッケージからインストールした場合

パッケージとしてモジュールが提供されているので追加インストールする。

例:mod_sslをインストールする場合

yum -y install mod_ssl

ソースコードからインストールした場合



マニュアルの配置

ダウンロードしたソースコード中にHTML形式のマニュアルがあるので、それをApacheから参照できるように設定することで、マニュアルを閲覧できる。
これはサンプルなので、通常は実施する必要は無い。

  1. マニュアルの設置
    cp -R docs $APACHE_HOME/
  2. タイプマップファイルが拡張子htmlとなっているのでリネーム
    find /usr/local/apache-httpd/docs/manual -name "*.html" | xargs rename .html .var
  3. 公開設定
    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>

 

ソースコードの削除

不要なソースコードを削除する

cd <ソースコードの配置パス>
rm -rf httpd*

 

設定

設定ファイルの書き方

設定ファイルは次のパスにある。

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

 

基本設定















一般的な設定


以下はインストール時にデフォルトで設定されるので、特に変更の必要は無い。

 

 

 

ホスト名設定


ホスト名を設定しないと起動時にエラーが出る。
ServerName行を探し、以下のように編集する。( 行頭# コメントアウトは削除する)

ServerName <自ホスト名 or 127.0.0.1>:80

この設定後、最低限の状態で起動できるので、http://127.0.0.1/にアクセス可能となる。

 



実行ユーザ設定


Apacheは起動したユーザでなく、設定したユーザで起動される。
デフォルトではdaemonとなっているが、分かりにくいので、apacheユーザ・グループに変更する。
実際にそのユーザ・グループが存在する必要があるので、作成する。
不要であれば、デフォルトのdaemonは削除する。

 

 

 

 

管理者連絡先


サーバがエラーページを表示する際に埋め込むサーバ管理者の連絡先。
この設定は未記載でもエラーにならないので、消してしまっても良い。




分散設定ファイルの使用


設定はhttpd.confに通常まとめて書くが、公開対象の各ディレクトリに個別にアクセス権などを記述した
設定ファイルを設置して設定を行うことが出来る。
ここで記述した内容はhttpd.confで記述した内容を上書きできる。
各ユーザのホームディレクトリで各ユーザのWEBサービスを公開させるなどで複数の管理者で管理するような場合を除き、
設定が散らばってしまうことや、分散設定ファイルの読み込みオーバーヘッドが発生するので、通常は利用すべきではない。



ディレクトリ内設定


指定したディレクトリに対してディレクティブを設定する。
指定するディレクトリパスは前方部分一致である。

 



公開対象ファイルの付加設定


ApacheがHTTPクエリによってファイルを公開参照する際に個別にそのファイルに対する振る舞いを定義できる。
指定するファイルパスは前方部分一致である。つまりJPEGファイルに適用する場合は”.jpg”ではなく、”*.jpg”とする必要がある。

 

特定URLへのアクセスの制御設定


特定のURLにアクセスがあった際のアクセス制御などの挙動を設定する。
通常ファイルシステム内のファイルに対する制御はDirectoryやFilesディレクティブを使用することが推奨されているので、
Apacheによって生成されるページに対する制御を行う際にのみ利用する。
指定するURLパスは完全一致である。

 

Directory / Files / Locationディレクティブ内の設定



 





DNS逆引きを有効化する


アクセス制御でホスト名を使用する際やログにホスト名を記録する際にアクセスのあったIPアドレスから
ホスト名を逆引きして取得する必要がある。
デフォルトでは無効化されているので、有効化する必要がある。
ただし、DNS解決のオーバーヘッドが発生するので、通常は無効化したままの方が良い。

 

 

エイリアスの設定


エイリアスを設定することで、URLのパスと実際のディレクトリの階層の対応を手動で定義できる。




インデックスファイルの指定

 



送信元IPの置換

ロードバランサーを経由する場合、送信元IPアドレスはたいていの場合、ロードバランサーのIPアドレスになる。

ログ出力であれば単にX-Forwarded-Forヘッダーを出力すればよいが、アクセス制御を行う際は正常に制御できない。

mod_remoteipを使用することで、Apacheでの処理上の送信元IPアドレスを任意のアドレスに書き換えられる。IP通信のルーティングを変えるわけではない。

以下の設定では、X-Forwarded-ForヘッダーのIPアドレスを送信元IPアドレスとする。ただし、127.0.0.1からのアクセスの場合は、送信元IPアドレスの置換を行わない。

LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1

 

ファイル一覧


ディレクトリにアクセスした際にそのディレクトリのファイル一覧を表示できる

 

 



リクエストの転送

HTTP30Xを使用したリダイレクト


特定のURLパスにアクセスがあった際に、指定したURLに転送させる(リダイレクト)ことができる。
サーバはリダイレクトのレスポンスコードとリダイレクト先を返し、
実際にリダイレクト先に再アクセスするのはクライアント側である。

 

リライト


指定したURLでアクセスがあった際、
リライトは単純なリダイレクトと異なり正規表現を使用した一括したルールの記述など
柔軟な設定を行うことができる。
リライトは分散設定ファイル(.htaccess)内か、Directoryディレクティブ内に記述する必要がある。



リライトルールの書き方

RewriteRule

リライトの実行内容を記述する。

書式は次である。

RewriteRule <リライト前正規表現> <リライト後URL> [フラグ]

 

RewriteCond

RewriteRuleを実行する条件式を記述する。

複数記述した場合は、AND条件となる。

大文字小文字は識別される。

書式は次である。

RewriteCond ( <アクセスURL> | <変数> ) <一致条件> [フラグ]

参考:https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

 

 

DSO

 

読み込みDSO設定


DSO(Dynamic Shared Object)と呼ばれる、実行時に動的に読み込まれるモジュールを指定する設定
インストールされているモジュール一覧は次のコマンドで得られる。

ls $APACHE_HOME/modules/

 

 

DSO使用設定


読み込むDSOによって使用できないディレクティブがある。
DSOが読み込まれていないのにそのディレクティブを使用するのを避けるため、”指定したDSOが読み込まれていた場合”という記述ができる。


上記のように、IfModuleディレクティブ内のディレクティブは指定したDSOが読み込まれていない場合は無効となる。


VirtualHost


VirtualHostとは、HTTPサーバにアクセスされる際に、どのようなホスト名指定でアクセスされたかによって異なるWEBサーバとして振舞うことができる機能である。
例えば、aaa.example.comとbbb.example.comでは同じパスでも異なるファイルを返すことができる。

 

キープアライブ


1回のTCPコネクションで複数のHTTPリクエストを行えるようにできる。
デフォルトではキープアライブは有効であり、無効の場合は通常は有効にしたほうが性能が上がる。

 



MPM


マルチプロセッシングモジュール(MPM)とはHTTPクエリーの処理を行う際の
マルチプロセス・スレッドの扱いに関する動作方法のことである。
prefork、worker、eventの3種類があり、eventがデフォルトである。
configure時にMPMを選択できるよう設定した場合はどのMPMを使用するかを記述する必要がある。


prefork


preforkは事前に複数の子プロセスを生成しておき、HTTPクエリーに対して1プロセスを割り当てる方法。
プロセスの独立性が高いが、メモリやCPUリソースを多く消費する。

 

 

 

 

worker


workerは複数の子プロセス内に更にマルチスレッドを展開し、HTTPクエリーに対して1スレッドを割り当てる方法。
preforkと比較して、プロセスの独立性が高くないが、メモリ消費を抑えられる。



 



event


eventはworkerと似た動作をおこうが、workerやpreforkと異なり、
Keep-Aliveの維持処理を独立したスレッドで行うことで、
Keep-Aliveのために継続するか分からないHTTPクエリーを待つことなく
応答の完了したスレッドの破棄を瞬時に行えるようにしている。




 




プロセスの再生成


一定回数のコネクションを処理したプロセスを破棄して再生成させることができる。
例えば、PHP等を使用している場合、メモリリークが発生する場合があるが
子プロセスが応答できるリクエスト数を設定し、その制限を越えるとリクエストを一旦破棄することで、メモリリークを開放することができる。
ただし、子プロセスの再生成はオーバーヘッドとなるので、調整が必要である。

 





情報出力

 

サーバ情報


サーバ情報(特にモジュール情報)を出力することができる。
参考:http://httpd.apache.org/docs/current/ja/mod/mod_info.html
SetHandlerによりserver-infoを特定のLocationに関連付けることで出力する。

 

アクセス元制御


アクセス元制御を行う場合はAllow,Denyディレクティブで行う。
例えば、192.168.0.0/16からのみ許可したい場合は、Locationディレクティブ内に次のように書く。

Require ip 192.168.0.0/16


RewriteRuleで .* を使用している場合、ヒットしてしまうので、

LocationMatch /.*/server-info

として一応回避できる。

なお、ロードバランサ―経由でアクセスする際にアクセス元IPアドレスがロードバランサ―に変換されている環境では制御できないので注意が必要である。

ユーザー認証


ユーザー認証を行う場合はLocationディレクティブに次を記載する。
※Digest認証を使用し、Digest認証の有効化が行われている場合

                AuthType Digest
                AuthName server-info
                AuthUserFile conf/users.digest
                Require valid-user

 

サーバ情報に任意の出力追加(特定モジュール箇所)



 

ステータス情報の取得


HTTPデーモンの現在のステータスを出力する
参考:http://httpd.apache.org/docs/current/ja/mod/mod_status.html
SetHandlerによりserver-statusを特定のLocationに関連付けることで出力する。
ExtendedStatusディレクティブを使用することで、より詳細情報を出力できる。


以下を設定することで、アクセス制限ができる。
アクセス元制御とユーザー認証を行った場合は、いずれかをクリアすればアクセスできる。
外部からはユーザー認証、ローカルからはアクセス元制御をすると良い。

アクセス元制御


アクセス元制御を行う場合はAllow,Denyディレクティブで行う。
例えば、192.168.0.0/16からのみ許可したい場合は、Locationディレクティブ内に次のように書く。

Require ip 192.168.0.0/16

ローカルホストからのみアクセスを許可する場合は次である。

 Require ip 127.0.0.1


RewriteRuleで .* を使用している場合、ヒットしてしまうので、

LocationMatch /.*/server-status

として一応回避できる。

なお、ロードバランサ―経由でアクセスする際にアクセス元IPアドレスがロードバランサ―に変換されている環境では制御できないので注意が必要である。

ユーザー認証


ユーザー認証を行う場合はLocationディレクティブに次を記載する。
※Digest認証を使用し、Digest認証の有効化が行われている場合

                AuthType Digest
                AuthName server-info
                AuthUserFile conf/users.digest
                Require valid-user

 

ページのオプション


Webブラウザでアクセスする際に下記のオプションを付けることができる。
両方を指定することも可能。

 

 

クライアントキャッシュ


クライアントにダウンロードされたコンテンツの有効期限の設定を行う。
ただし、サーバ側で有効期限の設定を行ってもクライアント側でキャッシュが無効になっている場合は毎回ダウンロードされることになる。
また、有効期限内であってもクライアントによってはIf-Modified-Sinceリクエストヘッダによって
更新がある場合はダウンロードするという挙動を行う場合もある。
なお、クエリストリングも含めて完全一致の場合のみキャッシュが利用される。

参考

 



 

タイムアウト

 

全般的なタイムアウト時間の設定


以下のタイムアウト値を設定できる。

 

 

 

詳細なタイムアウト時間の設定


header部、body部を受信する際のタイムアウトを定義できる。
デフォルトでは

RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

という設定であるが、これは
「ヘッダのタイムアウトまで20秒、データを500byte/s以上送信している間は
タイムアウト時間が1秒ずつ増え、最大40秒まで増える。
データ部は20秒以内に送信する必要がある。」と言う意味である。

 

 

 

サーバキャッシュ


コンテンツをサーバ内でキャッシュする設定を行う。
メモリ上にファイルをキャッシュしたり、プロキシとして利用されるときにローカルにキャッシュする際に利用できる。

参考:http://httpd.apache.org/docs/current/mod/mod_cache.html

 

キャッシュ期限

 



圧縮


クライアントへのコンテンツ応答送信を圧縮することができる
参考:http://httpd.apache.org/docs/current/ja/mod/mod_deflate.html



 

 

 

 



 

 

 

 













CGI

 

CGIファイルの保存場所の設定


CGIはサーバ再度で実行するので、通常プログラムそのものは公開ディレクトリに設定する必要はない。
そのため、エイリアスを設定してURLとCGI実行場所を関連付ける。



SSLの利用


SSLを利用してHTTPSアクセスできるようにする。
SSLモジュールはデフォルトではインストールされないのでApacheインストール時にインストールしていない場合は再度コンパイルする必要がある。


証明書の用意


SSLを使用する場合、公開鍵証明書が必要となる。
外部で発行された証明書がない場合はローカルで証明書を生成する。

 

設定

 

 

認証

Basic認証

Basic認証を用いてアクセス制限を行う。

 



 

Digest認証


Digest認証では認証領域(レルム)というパラメータを利用し、パスワードファイルとApacheに同じ値を設定しておく必要がある。

 

 

 

 

 

ログ


Apacheには2種類のログが存在する。
1つはHTTP(S)リクエストに関する情報を記録するアクセスログで、
もう一つはWebサーバ自体の挙動に関する情報を記録するエラーログである。
なお、VirtualHostディレクティブ内とグローバル両方にアクセスログの設定を行った場合は、
VirtualHostに関するログはVirtualHost内に設定したログファイルのみに記録され、グローバルで設定したほうには記録されない。

エラーログ


Webサーバ自体の挙動に関する情報を記録する。
エラーログはログ記録対象となるイベントが発生したタイミングで記録される。
エラーログとして出力される情報は設定した重要度以上のものが出力される。
ただし、noticeレベルのログは設定にかかわらず、必ず出力される。
なお、エラーログ中にログレベルは出力される。

 




アクセスログの使用


HTTP(S)リクエストに関する情報を記録する。
アクセスログはリクエストの応答が完了した時点で記録される。
つまり、リクエスト開始から終了まで時間がかかった場合は終了時間は把握できるが、開始時間が把握しづらくなる。

 

 

パフォーマンス






排他制御の設定

 

 










セキュリティ

 

レスポンスヘッダ


レスポンスヘッダにはデフォルトでApacheのバージョンとOS名が含まれる。
この情報は既知のセキュリティホールに対して攻撃を誘発させるので、隠蔽したほうがよい。
この環境でのデフォルトのレスポンスは次のとおり。

Server: Apache/2.4.6 (Unix)


これを変更することで、次のようになる。

Server: Apache

 

 


もし反対に、更にPHPなどアプリケーションの情報も付加したい場合は以下のように設定する。

ServerTokens Full

 

フッター


存在しないページにアクセスした時に表示されるエラーページに表示されるApacheのバージョンなどの情報がフッターとして出力される。
この情報は既知のセキュリティホールに対して攻撃を誘発させるので、隠蔽したほうがよい。
ただしデフォルトでOffであるので、特に変更する必要はない。

 




Traceメソッドの無効化


HTTPのTraceメソッド(リクエスト内容をそのまま応答する)は過去に攻撃に用いられており、
現在では危険性はそれほどではないが、特に必要ではないので、無効化する。

 

 

シンボリックリンクの利用禁止



プロキシ

 

 

HTTP(S)リバースプロキシ



 

 

AJP


AJPを利用して特定のサーバにリクエストを転送する場合、次の設定を行う。

 

 

ヘッダー制御

mod_headersを使用すると受信時、送信時にヘッダーの置換や挿入、削除などを行える。

 

WebDav

Webサーバをファイルサーバとして扱うことができる。

Windowsエクスプローラーで”http://<サーバー名>/<パス>”と入力することでアクセス可能となる

Digest認証などの認証を付けると、Windowsエクスプローラーで開こうとするとWebブラウザが開き、ブラウザで閲覧をすることになる

 

 

 

ツール

 

httpd


デーモンプログラムの本体であるが、モジュール確認など行える。

 

バージョン確認

 

 

 

コンパイル情報確認

 

 

 

staticモジュールの確認

 

 

 

使用可能ディレクティブ一覧の確認

 

 

 

基本情報の確認


実行ユーザやディレクトリといった基本的な情報を確認できる

 

 

読み込みモジュールの一覧確認

 

 



設定ファイルのチェック

 

 



apachectl


起動スクリプトとほぼ同様の動作の制御に加えて、各種モジュールの導入確認も行える。
また、ステータス確認系はテキストブラウザと呼ばれるツールが必要になるので、インストールしていない場合は、インストールしておく。

yum install lynx

 

 

ステータス確認


mod_statusモジュールをロードし、/server-statusのURLでローカルからアクセスな場合、ステータスの表示を行える。

 

 



起動時のログを確認する


apacheを起動した際に発生するログを表示する。
起動していない場合は実際に起動される。
起動時に多量のエラーが発生している場合に、問題解決のため表示の抑制をするのに使用する。

 



ab (Apache HTTP server benchmarking tool)


特定の単一のページにHTTPアクセスによる負荷をかけ、そのベンチマークを計測するツール。
SSL/TLSには対応していない。httpsを使用すると次のようなエラーが出る。

SSL not compiled in; no https support

 

オプション

 

htdigest

HTTP Digest認証で使用できる認証情報ファイルを作成できる。

 

apr-1-config




apu-1-config

 

apxs

 

checkgid

 

dbmmanage

 

fcgistarter

 

htcacheclean

 

htdbm

 

htpasswd

 

httxt2dbm

 

logresolve

 

rotatelogs



運用

 

Apacheの起動・停止

 

Apacheを起動する

 

apachectl start

or

systemctl start apache

 

Apacheを停止する

 

apachectl stop

or

systemctl stop apache

 

Apacheの起動状況を確認する

 

apachectl

or

systemctl status apache

 

コンテンツ配置

 

静的コンテンツを配置する


初期状態の設定ファイルでは「htdocs」配下が静的コンテンツの公開ディレクトリになっている。
この場所にファイルを配置することで公開可能。
ただし、apacheユーザに読み取り権限が必要。

チューニング

 

セッション数



keepalive timeout

CPU負荷が高い

 

Preforkを使用していてマイナーページフォルトが多発している


プロセスの有効期限を短くする

シンボリックリンクの利用許可


Options FollowSymLinks


分散設定ファイルの利用停止




コンテンツネゴシエーションの利用停止


多言語の同じコンテンツを用意することで、自動でブラウザの要求言語に従ってファイルを選択して返す。
特定言語しか対応していない場合は、この機能を無効にすることで、ネゴシエーションのオーバーヘッドがなくなる。

参考:https://httpd.apache.org/docs/2.4/mod/mod_negotiation.html

Options -MultiViews

 

メモリの使用量が多い

 

PHPを使用している


プロセスあたりのメモリの使用量を変更する。
下記設定はプロセス単位でのメモリ使用量の上限なので、プロセス数×下記の値が上限になるようにする。

php_value memory_limit <メモリ上限>M

 

プロセス数/スレッド数を制限する



コネクション数不足

コネクション数の追加

コネクション数自体の上限はLinuxでは存在しない。

ただし、コネクション作成時にソケットファイルが作成されるため、ファイルディスクリプタの上限によりコネクション数が規定される。ファイルディスクリプタはソケットファイル以外でも消費されるので、その点は考慮する必要がある。

Apacheがリクエスト処理時に別のサーバに接続する場合、エフェメラルポートを消費する。クライアントとして接続する際は、1コネクションで1ポート消費するので、ポートが枯渇する可能性がある。使用可能なポート範囲を拡張することで対応可能。

 

TCPタイムアウトの高速化


コネクションが不足しており接続しても応答が返らない場合、通常はコネクションの上限を増やす。
しかし、メモリ不足によりコネクション数を増やせない場合、CLOSE_WAIT状態のコネクションが多ければTCPタイムアウトを早めることで解決できる。
なお、正常にコネクションが終了されればCLOSE_WAIT状態にはならないが、何らかの原因でコネクションが正常に終了しなかった場合にのみCLOSE_WAIT状態になるので、必ずしもこの方法が使用できるわけではない。

CLOSE_WAIT状態のコネクションはssコマンドで確認する

ss -anpo | egrep ":80 |:443 "

デフォルトでは二時間で、結果の右端の数値がタイムアウトまでの時間である。

tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49940               timer:(timewait,52sec,0)
tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49914               timer:(timewait,13sec,0)
tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49917               timer:(timewait,13sec,0)
tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49939               timer:(timewait,52sec,0)
tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49929               timer:(timewait,31sec,0)
tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49943               timer:(timewait,52sec,0)
tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49913               timer:(timewait,13sec,0)
tcp    TIME-WAIT  0      0      133.18.48.26:443                XXX.XXX.XXX.XXX:49942               timer:(timewait,52sec,0)


このタイムアウト時間はカーネルパラメータにより変更可能。

[root@apache conf]# sysctl -a | grep tcp_keepalive_
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75

 


これらのパラメータを変更することで、TCPコネクションの最小生存時間は「tcp_keepalive_time+tcp_keepalive_intvl*tcp_keepalive_probes」に抑えることができる。
この方法は全てのTCP接続に影響を与えるが、通信中のコネクションは強制切断されるわけではない。

 


Notice: Trying to get property 'queue' of non-object in /usr/local/wordpress/wp-includes/script-loader.php on line 2876

Warning: Invalid argument supplied for foreach() in /usr/local/wordpress/wp-includes/script-loader.php on line 2876