設定


http.conf

書きかけ。
Global的設定。
細かい設定はIncludeで読み込む。

ServerRoot "/usr/local/apache2"

# Mutex default:logs

#Listen 12.34.56.78:80
Listen 80

モジュールの類いはまだ整理出来ていないので
全部入りでmakeして、ここで取捨選択。
ここでは基本的かつ典型的なHTTPサーバを目的とする。
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.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 deflate_module modules/mod_deflate.so
#LoadModule xml2enc_module modules/mod_xml2enc.so
#LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule brotli_module modules/mod_brotli.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 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_uwsgi_module modules/mod_proxy_uwsgi.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 proxy_hcheck_module modules/mod_proxy_hcheck.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_crypto_module modules/mod_session_crypto.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 ssl_module modules/mod_ssl.so
#LoadModule dialup_module modules/mod_dialup.so
LoadModule http2_module modules/mod_http2.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 suexec_module modules/mod_suexec.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
LoadModule systemd_module     modules/mod_systemd.so
LoadModule fcgid_module modules/mod_fcgid.so
LoadModule allowfileowner_module modules/mod_allowfileowner.so
LoadModule maxminddb_module   modules/mod_maxminddb.so

<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

ServerAdmin you@example.com
ServerName www.example.com:80

以下、OrderではなくRequireになっているので注意。
<Directory />
    AllowOverride none
    Require all denied
</Directory>

当方ではVirtualHost運用のためデフォルトは塞ぐ。
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
    Options None
    AllowOverride None
    Require all denied
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    CustomLog "logs/access_log" combined
</IfModule>

<IfModule cgid_module>
    Scriptsock logs/cgisock
</IfModule>

<IfModule mime_module>
    TypesConfig conf/mime.types
    #AddType application/x-gzip .tgz
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    <FilesMatch "\.cgi$">
       SetHandler cgi-script
    </FilesMatch>
    #AddHandler type-map var
    #AddType text/html .shtml
    #AddOutputFilter INCLUDES .shtml
</IfModule>

#MIMEMagicFile conf/magic

Include conf/extra/httpd-mpm.conf
#Include conf/extra/httpd-multilang-errordoc.conf
#Include conf/extra/httpd-autoindex.conf
Include conf/extra/httpd-languages.conf
#Include conf/extra/httpd-userdir.conf
#Include conf/extra/httpd-info.conf
Include conf/extra/httpd-vhosts.conf
#Include conf/extra/httpd-manual.conf
#Include conf/extra/httpd-dav.conf
Include conf/extra/httpd-default.conf

リバースプロキシ時にHTMLのURIマークアップなんかをバックエンド用から
フロントエンド用にリライトしたりするやーつ。
# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

Include conf/extra/httpd-ssl.conf
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

httpd-default.conf

基本設定。以下はデフォルトで入っていないディレクティブを追加している。

Timeout 60
もう5分も待つような時代ではない(´・ω・`)

KeepAlive On
HTTP1.1(と1.0拡張)で有効。eventMPMではOn(にしないとeventのメリットがない)。

MaxKeepAliveRequests 100
KeepAliveの間処理出来るリクエストの数。
100なら100個のリクエストを処理したら接続を切る。
0で無制限になるのだが、プロセスなりスレッドなり
無駄が増えるので相当リッチな鯖でもそれはやめた方がいい。

KeepAliveTimeout 5
次のリクエストを待つ秒数。
5なら5秒待ってリクエストがなかったら接続を切る。

UseCanonicalName Off
これちょっとややこしい。
Apacheが自分の名前をServerNameディレクティブの内容を見て決めるか
クライアントから言われた名前にしちゃうかの設定。

  ServerName www.example.jp:80と設定、
  イントラではhostsでdevelopと設定、
  クライアントが"http://develop/hoge"と最後のスラッシュなしで
  hogeディレクトリにアクセスしたとする。

  Onの場合:ServerNameを見るのでhttp://www.example.jp/hoge/に
  mod_dirがスラッシュつけてリダイレクトする。
  イントラ側で"www.example.jp"のIPアドレスが引けなければアウト。

  Offの場合:クライアントが言う名前を使うのでhttp://develop/hoge/に
  mod_dirがスラッシュつけてリダイレクトする。
  イントラ側ではhostsでIPアドレスが引けるのでおk。

  通常はOffでの運用となるでしょう( ´ω`)
  よく「最後にスラッシュつけるつけないの設定!」と
  思われているようですが違いますヨ。
  (それはDirectorySlashで、これをOffにする理由はない)

AccessFileName .htaccess

ServerTokens Full
ServerSignature On
セキュリティの為に隠しましょう!
とか言われてましたけど、ぶっちゃけ臭いものに蓋をしてるだけ。
隠す前に対策しましょうや( ´ω`)
セキュリティチェックとかで引っかかるから隠す!なら
#ServerTokens Prod
#ServerSignature Off

HostnameLookups On
名前引くか引かないかですけど
ウチは弱小だし引く(`・ω・´)!

TraceEnable Off
TRACEメソッド禁止。通常運用時はOffでしょう。

クライアント(ブラウザとか)からのリクエストヘッダとリクエストボディの受付待ち時間。
以下の場合
<IfModule reqtimeout_module>
  RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
</IfModule>
1.リクエストヘッダが来るまで20秒待つ
2.500byte受け取るごとに1秒延長する。ただし40秒までしか待たない
3.リクエストボディも20秒待つ
4.500byte受け取るごとに上限なしに1秒延長する。
5.タイムアウトしたらステータスコード408(Request Timeout)を返す

マニュアル意訳。

このディレクティブはクライアントからのリクエストヘッダとリクエストボディ受付タイムアウトを設定します。
クライアントが設定された時間内にヘッダーまたは本文の送信に失敗した場合
408 REQUEST TIME OUTエラーが送信されます。

SSLバーチャルホストの場合、ヘッダーのタイムアウト値は
最初のSSLハンドシェイクを行うために必要な時間を考慮します。
ユーザーのブラウザがCRLを問い合わせるよう設定されており、CRLサーバから返事がなかった場合など
ブラウザがCRLをあきらめるまで、最初のSSLハンドシェイクはかなりの時間がかかることがあります。
なのでヘッダーのタイムアウト値は、SSLバーチャルホストについては
非常に低い値を設定するべきではありません。
ボディのタイムアウト値は、SSLの再ネゴシエーション(必要な場合)に必要な時間を考慮します。

AcceptFilterディレクティブを使用する(通常はLinuxやFreeBSD上での場合)場合
少なくとも1byte(またはBSDのhttpready指定時にはリクエスト全体を)受け取るまでは
ソケットはサーバプロセスへ送りません。
RequestReadTimeoutディレクティブで設定したリクエストヘッダのタイムアウトは
ソケットからサーバプロセスが受け取った後にのみ有効です。

httpd-info.conf

サーバのリクエスト状況やらプロセス状態やらなんやらの表示設定。

Locationはデフォルトから変更しておいたほうがよい。
<Location /server-status>
    SetHandler server-status
    Require ip 127 192.168.
</Location>

ExtendedStatus On

なんか設定が効いてないとか挙動が変なときに見るとよいかも。
#<Location /server-info>
#    SetHandler server-info
#    Require ip 127 192.168.
#</Location>

httpd-language.conf

コンテントネゴシエーションでの言語設定。
クライアントの言語設定に対応した言語の
ドキュメントを返したいときは大事。

# DefaultLanguage nl

AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage tr .tr
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt  pt-BR ru sv tr zh-CN zh-TW

ForceLanguagePriority Prefer Fallback

AddCharset us-ascii.ascii .us-ascii
AddCharset ISO-8859-1  .iso8859-1  .latin1
AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
AddCharset ISO-8859-3  .iso8859-3  .latin3
AddCharset ISO-8859-4  .iso8859-4  .latin4
AddCharset ISO-8859-5  .iso8859-5  .cyr .iso-ru
AddCharset ISO-8859-6  .iso8859-6  .arb .arabic
AddCharset ISO-8859-7  .iso8859-7  .grk .greek
AddCharset ISO-8859-8  .iso8859-8  .heb .hebrew
AddCharset ISO-8859-9  .iso8859-9  .latin5 .trk
AddCharset ISO-8859-10  .iso8859-10  .latin6
AddCharset ISO-8859-13  .iso8859-13
AddCharset ISO-8859-14  .iso8859-14  .latin8
AddCharset ISO-8859-15  .iso8859-15  .latin9
AddCharset ISO-8859-16  .iso8859-16  .latin10
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5.Big5   .big5 .b5
AddCharset cn-Big5 .cn-big5
# For russian, more than one charset is used (depends on client, mostly):
AddCharset WINDOWS-1251 .cp-1251   .win-1251
AddCharset CP866   .cp866
AddCharset KOI8  .koi8
AddCharset KOI8-E  .koi8-e
AddCharset KOI8-r  .koi8-r .koi8-ru
AddCharset KOI8-U  .koi8-u
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-7   .utf7
AddCharset UTF-8   .utf8
AddCharset UTF-16  .utf16
AddCharset UTF-16BE .utf16be
AddCharset UTF-16LE .utf16le
AddCharset UTF-32  .utf32
AddCharset UTF-32BE .utf32be
AddCharset UTF-32LE .utf32le
AddCharset euc-cn  .euc-cn
AddCharset euc-gb  .euc-gb
AddCharset euc-jp  .euc-jp
AddCharset euc-kr  .euc-kr
#Not sure how euc-tw got in - IANA doesn't list it???
AddCharset EUC-TW  .euc-tw
AddCharset gb2312  .gb2312 .gb
AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2
AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4
AddCharset shift_jis   .shift_jis .sjis

httpd-mpm.conf

各MPMについての設定。
当方ではeventを選択。

ここでPID設定だっけw
<IfModule !mpm_netware_module>
    PidFile "logs/httpd.pid"
</IfModule>

<IfModule mpm_event_module>
    AsyncRequestWorkerFactor  2 プロセスごとの接続制限を微調整するための要素
    StartServers              2 起動時のプロセス数
    ThreadLimit             256 スレッド最大数
    MinSpareThreads          25 最低限確保するアイドルスレッド数
    MaxSpareThreads          25 最大でもアイドルスレッドはこの数まで
    ThreadsPerChild          25 プロセスごとのスレッド数
    MaxRequestWorkers       100 スレッド最大数=最大接続数
    MaxConnectionsPerChild 1000 子プロセスでさばく接続数。接続数に達したら子プロセスは死ぬ
</IfModule>
AsyncRequestWorkerFactor(規定値2)が難しいが

アイドル状態の要求ワーカーの数に応じて、プロセスごとに受け入れられる接続の数を制限します。

という仕事のための係数なので状況に応じて計算してみるしかない。
計算式は以下。

ThreadsPerChild + (AsyncRequestWorkerFactor * number of idle workers)

接続数がこの数値以下であれば新しいプロセスが「新規」接続する。
非同期処理をすることで実際のスレッド数より多く処理(受付)するためのものなので(eventのキモ)
ひとまずは倍(規定値2)あればいいのではないかと。

free()が呼ばれるまで確保するメモリ量(kbyte)。規定値は無制限。
<IfModule !mpm_netware_module>
    MaxMemFree            2048
</IfModule>

httpd-ssl.conf

HTTPS設定。
TLSv1.3対応。

https://mozilla.github.io/server-side-tls/ssl-config-generator/

を参考にする。 全体に適用する設定だけを記述し、証明書などはホストごとに設定すると冗長にならなくてよい。

Listen 443

SSLSessionCache "shmcb:/usr/local/apache2/logs/ssl_gcache_data(512000)"

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder On
SSLCompression Off
SSLSessionTickets Off

SSLUseStapling On
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors Off
SSLStaplingCache shmcb:/var/run/ocsp(128000)

httpd-vhosts.conf

バーチャルホスト設定。
NameVirtualHostディレクティブは不要となった。
HTTPS設定はSNI対応が前提。HTTP2対応。

<VirtualHost *:80>
    Protocols h2c http/1.1
    H2Direct On
    H2AltSvc h2c=www.example.com:80
    H2AltSvc h2=www.example.com:443
    H2AltSvcMaxAge 3600
    ServerAdmin webmaster@example.com
    DocumentRoot "/path/to/document/root"
    ServerName www.example.com
    ServerAlias example.com
    ErrorLog "logs/error_log"
    CustomLog "logs/access_log" combined
</VirtualHost>
<VirtualHost *:80>
    Protocols h2c http/1.1
    H2Direct On
    H2AltSvc h2c=another.example.com:80
    H2AltSvc h2=another.example.com:443
    H2AltSvcMaxAge 3600
    ServerAdmin webmaster@example.com
    DocumentRoot "/path/to/document/root2"
    ServerName another.example.com
    ErrorLog "logs/another_error_log"
    CustomLog "logs/another_access_log" combined
</VirtualHost>

<VirtualHost *:443>
    Protocols h2 http/1.1
    ServerAdmin webmaster@example.com
    DocumentRoot "/path/to/document/root"
    ServerName www.example.com:443
    ServerAlias example.com
    ErrorLog "logs/error_log"
    CustomLog "logs/access_log" combined
    SSLEngine On
    SSLCertificateFile "/etc/letsencrypt/live/example.com/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/example.com/privkey.pem"

    <FilesMatch "\.(cgi|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>

    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>
<VirtualHost *:443>
    Protocols h2 http/1.1
    ServerAdmin webmaster@example.com
    DocumentRoot "/path/to/document/root2"
    ServerName another.example.com:443
    ErrorLog "logs/another_error_log"
    CustomLog "logs/another_access_log" combined
    SSLEngine On
    SSLCertificateFile "/etc/letsencrypt/live/example.com/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/example.com/privkey.pem"

    <FilesMatch "\.(cgi|php)$">
         SSLOptions +StdEnvVars
    </FilesMatch>

    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

トップ   編集 凍結解除 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-11-26 (月) 14:10:23