This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Apache
Apache HTTPサーバは、効率的で拡張可能なウェブサーバーで、インターネット上で最も人気のあるもののひとつです。
インストール
Apacheのバージョンアップをする時は、 アップグレードガイドを参照してください。
USE フラグ
USE flags for www-servers/apache The Apache Web Server
+suexec-caps
|
Install suexec with capabilities instead of SUID |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
doc
|
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally |
gdbm
|
Add support for sys-libs/gdbm (GNU database libraries) |
ldap
|
Add LDAP support (Lightweight Directory Access Protocol) |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
static
|
Link in apache2 modules statically rather then plugins |
suexec
|
Install suexec with apache |
suexec-syslog
|
Log suexec to syslog instead of to a separate file |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
threads
|
Add threads support for various packages. Usually pthreads |
Emerge
Apache event MPM を使いたい場合、以下を make.conf に追加します:
/etc/portage/make.conf
Apache event MPMAPACHE2_MPMS="event"
Apache worker MPM を使いたい場合、以下を make.conf に追加します:
/etc/portage/make.conf
Apache worker MPMAPACHE2_MPMS="worker"
また、Apache の threads USE フラグも有効化してください:
/etc/portage/package.use
Apache threads サポートwww-servers/apache threads
Apache を emerge します:
root #
emerge --ask www-servers/apache
グローバルなサポート
apache2
グローバル USE フラグを有効化することで、他のパッケージの Apache サポートの提供を受けられます。これにより、Apache に依存するパッケージが emerge された場合に www-servers/apache が自動的にインストールされます。
/etc/portage/make.conf
システム USE フラグに Apache を追加するUSE="apache2"
USEフラグを設定した後には、システム全体をアップデートして変更を適用させたいかもしれません:
root #
emerge --ask --changed-use --deep @world
設定
ファイル
システム上のApache2の動作を設定する、2つの主要なファイルがあります:
- Gentoo の Apache2 用 init スクリプトの設定ファイル /etc/conf.d/apache2
- Apache2 サーバーで一般的に用いられている設定ファイル /etc/apache2/httpd.conf
/etc/conf.d/apache2
/etc/conf.d に配置されている apache2 ファイルは Gentoo の init スクリプトの設定ファイルです。このファイルで唯一有効な行は APACHE2_OPTS 変数の行です:
/etc/conf.d/apache2
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE"
この行のオプションは、全体の設定において特定の部分を有効にしたり無効にしたりするために様々な設定ファイルが利用する記述 <IfDefine option-name>
を解釈するための定義です。これについては後ほど触れます。
/etc/apache2/httpd.conf
httpd.conf ファイルは Apache サーバーの伝統的な設定ファイルです。実際には、このファイルは設定の入り口に過ぎません。設定全体は /etc/apache2/ にある多くのファイルに分割されており、それらは Include
ディレクティブを使って統合されます。たとえば、httpd.conf 内の Include /etc/apache2/modules.d/*.conf
という文は、/etc/apache2/modules.d/ にあるファイルのうち名前が .conf で終わるものをすべて取り込みます。
上記で見たように、またモジュールの設定ファイル(/etc/apache2/modules.d内のファイル)のほとんどが<IfDefine module-name>
から開始することから、対応する-D module-name
というフラグが/etc/conf.d/apache2のAPACHE2_OPTS変数に設定されていなければ、/ect/apache2/modules.d内のファイルの内容は有効にはなりません。00_default_settings.confという設定ファイルは例外でIfDefine
から開始しておらず、そのため常に有効になります。
デフォルト
Apache サーバの新規インストール後には、以下のような、異なる設定ファイル類を集約した設定ができあがっています。その入口である /etc/apache2/httpd.conf から始めましょう。
これはクイックリファレンスであり、概観を記載したものでしかありません。設定における追加や削除を理解するには、様々なファイル群を含めコメント類を熟読することが強く期待されます。また、Apacheの設定のより深い理解のために Apache マニュアルも参照してください。
/etc/apache2/httpd.conf
ServerRoot "/usr/lib64/apache2" #Module loaded unconditionally, assuming the USE flag is no unset in # /etc/portage/make.conf or in /etc/portage/package.use LoadModule actions_modulemodules/mod_actions.so ... #other modules loaded that way : alias_module, auth_basic_module, authn_alias_module, # authn_anon_module, authn_dbm_module, authn_default_module, authn_file_module, # authz_dbm_module, authz_default_module, authz_groupfile_module, authz_host_module, # authz_owner_module, authz_user_module, autoindex_module, cgi_module, cgid_module, # deflate_module, dir_module, env_module, expires_module, ext_filter_module, filter_module, # headers_module, include_module, log_config_module, logio_module, mime_module, # mime_magic_module, negotiation_module, rewrite_module, setenvif_module, # speling_module,ssl_module, status_module, unique_id_module, usertrack_module, host_alias_module #Modules loaded conditionally, assuming matching USE flag is not unset in # /etc/portage/make.conf or in /etc/portage/package.use (flag to be set in ) <IfDefine AUTHNZ_LDAP> LoadModule authnz_ldap_module modules/mod_authnz_ldap.so </IfDefine> #other modules loaded that way : cache_module, dav_module, dav_fs_module, # dav_lock_module,disk_cache_module, file_cache_module, info_module, ldap_module, # mem_cache_module, userdir_module User apache Group apache # Supplemental configuration #**************************************************************************************vvv #this part is included via Include /etc/apache2/modules.d/*.conf #included from /etc/apache2/modules.d/00_default_settings.conf-------------v #this is always included as there is not option to deactivate it. Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 UseCanonicalName Off AccessFileName .htaccess ServerTokens Prod TraceEnable off ServerSignature On HostnameLookups Off EnableMMAP On EnableSendfile On FileEtag INode MTime Size ContentDigest Off ErrorLog /var/log/apache2/error_log LogLevel warn <Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <IfModule dir_module> DirectoryIndex index.html index.html.var </IfModule> <FilesMatch "^\.ht"> Require all denied </FilesMatch> #--------------------------------------------------------------------------^ #included from 00_mod_info.conf--------------------------------------------v <IfDefine INFO> <Location /server-info> SetHandler server-info Require host 127.0.0.1 </Location> </IfDefine> #--------------------------------------------------------------------------^ #--------------------------------------------------------------------------v #included from 00_languages.conf # Settings for hosting different languages. <IfDefine LANGUAGE> AddLanguage ca .ca ... 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 zh-CN zh-TW ForceLanguagePriority Prefer Fallback AddCharset us-ascii.ascii .us-ascii AddCharset ISO-8859-1 .iso8859-1 .latin1 ... AddCharset shift_jis .shift_jis .sjis </IfDefine> #---------------------------------------------------------------------------^ #**************************************************************************************^^^ #***************************************************************************************vvv #this part is included via Include /etc/apache2/vhosts.d/*.conf #from 00_default_ssl_vhost.conf-----------------------------------------------------vv <IfDefine SSL> <IfDefine SSL_DEFAULT_VHOST> <IfModule ssl_module> Listen 443 <VirtualHost _default_:443> ServerName localhost #------------------------------------------v # this part is included via Include /etc/apache2/vhosts.d/default_vhost.include ServerAdmin root@localhost DocumentRoot "/var/www/localhost/htdocs" <Directory "/var/www/localhost/htdocs"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/localhost/cgi-bin/" </IfModule> <Directory "/var/www/localhost/cgi-bin"> AllowOverride None Options None Require all granted </Directory> #end of Include ---------------------------^ ErrorLog /var/log/apache2/ssl_error_log <IfModule log_config_module> TransferLog /var/log/apache2/ssl_access_log </IfModule> SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /etc/ssl/apache2/server.crt SSLCertificateKeyFile /etc/ssl/apache2/server.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/var/www/localhost/cgi-bin"> SSLOptions +StdEnvVars </Directory> <IfModule setenvif_module> BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </IfModule> <IfModule log_config_module> CustomLog /var/log/apache2/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </IfModule> </VirtualHost> </IfModule> </IfDefine> </IfDefine> #---------------------------------------------------------------------------------^^ #from 00_default_vhost.conf-------------------------------------------------------vv <IfDefine DEFAULT_VHOST> Listen 80 NameVirtualHost *:80 <VirtualHost *:80> ServerName localhost #---------------------------------------------------------------v # this part is included via Include /etc/apache2/vhosts.d/default_vhost.include ServerAdmin root@localhost DocumentRoot "/var/www/localhost/htdocs" <Directory "/var/www/localhost/htdocs"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/www/localhost/cgi-bin/" </IfModule> <Directory "/var/www/localhost/cgi-bin"> AllowOverride None Options None Require all granted </Directory> #end of Include -----------------------------------------------^ <IfModule mpm_peruser_module> ServerEnvironment apache apache </IfModule> </VirtualHost> </IfDefine> #-----------------------------------------------------------------------------------^^ # end of include ****************************************************************************************^^^
稼働の第一歩
上記初期設定にあるように、インストール済みのバーチャルホストの DocumentRoot
ディレクトリが /var/www/localhost/htdocs にあり、サーバ名は「localhost」です。 DocumentRoot
にはさらに、index.html ファイルがひとつ生成されていますので、正常にインストールができたかどうかを確認するためには http://localhost/ にブラウザでアクセスしましょう。
そのウェブページには「It works!」のメッセージが表示されているはずです。
Firefoxには、ブラウザのURLバーでミスタイプした場合に役に立つ機能があります。もし入力したURLが解決できなかった場合、FirfoxはURLのホスト名の部分に
.com
を追加したり、www.
を先頭に追加したりして、自動的にユーザが意図していたであろうURLを解決しようとします。
この機能はFirefoxの初期からありますが、開発者にとっては面倒なものでした。つまり、localhostで動いているサーバが応答しなかった場合、Firefoxはlocalhost.com
やwww.localhost.com
に接続を試みたあげく、結局"not found"のページを見るということになってしまうのです。
この「機能」を無効にするために:
about:config
とブラウザのURLバーに入力- 「細心の注意を払って使用する」のボタンをクリックして特別な設定ページに入ります
- 検索ボックスに
browser.fixup.alternate.enabled
と入力 - 下にフィルタされたリストが出てくるので、
browser.fixup.alternate.enabled
を右クリックし、toggleを選んで値をfalseにする
mod_securityを有効にする
www-apache/mod_securityのインストール:
root #
emerge --ask www-apache/mod_security
apache2ファイルのAPACHE2_OPTS変数でSECURITY
モジュールを有効にする:
/etc/conf.d/apache2
セキュリティーモジュールの有効化APACHE2_OPTS="... -D SECURITY"
このモジュールを制御するには、/etc/apache2/modules.d/79_modsecurity.conf と /etc/apache2/modules.d/80_modsecurity-crs.conf ファイルを編集します。/usr/share/doc/mod_security-2.9.1-r1/modsecurity.conf-recommended.bz2 ファイルにおすすめの設定が含まれています( https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#A_Recommended_Base_Configuration )。ベースとなる設定を /etc/apache2/modules.d/79_modsecurity.conf にコピーし、必要に応じて設定を微調整します。/usr/share/doc/modsecurity-crs-3.0.2/crs-setup.conf.example.bz2 ファイルを適当な場所、たとえば /etc/conf.d/crs-setup.conf に解凍して微調整し、解凍したファイルを /etc/apache2/modules.d/80_modsecurity-crs.conf で読み込みます。最後に Apache を再起動します。サイトの Apache ログファイルでエラーをチェックし、状況に応じて対処してください。
PHP サポートを有効にする
apache2
の USE フラグを付けて PHP をインストールし、モジュールを有効にします:
>=app-eselect/eselect-php-0.8.1 では、APACHE2_OPTS 変数が
-D PHP5
から -D PHP
に変更されました。これにより将来のメジャーバージョンへの移行がスムーズになります。2年間の移行期間をおいた後、eselect-php-0.9.4-r5 で互換 shim (訳註: 互換性確保のための仕組み) は削除されました。/etc/conf.d/apache2
PHPモジュールを有効にするAPACHE2_OPTS="... -D PHP"
PHP モジュールが動作しているかテストする前に、/etc/apache2/modules.d/70_mod_php.conf ファイルが存在し、以下の定義が記載されているか、確認しましょう。
/etc/apache2/modules.d/70_mod_php.conf
PHPモジュールがロードされたことを確認する<IfDefine PHP> # The mod_php.so symlink is controlled by # eselect-php. However, the module name changed from # php5_module to php7_module so we can't blindly load whatever # is there. Instead we let eselect-php manage a small # configuration file that loads the appropriate module. # # This is relative to ServerRoot (see httpd.conf). Include ../../../var/lib/eselect-php/mod_php.conf # Tell apache that mod_php should handle PHP files. # # NOTE: Avoiding AddHandler/AddType for security (bug # #538822). Please read the related news item! <FilesMatch "\.(php|php[57]|phtml)$"> SetHandler application/x-httpd-php </FilesMatch> # PHP source files which are meant to be displayed as # syntax-highlighted source code. <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch> DirectoryIndex index.php index.phtml </IfDefine>
もしこのファイルがないようなら、作りましょう。
PHPモジュールが動作しているか確認するために、テストページを作成:
/var/www/localhost/htdocs/index.php
PHPテストページ<html> <body> <?php phpinfo(); ?> </body> </html>
そして、/var/www/localhost/htdocs/index.htmlを削除するかリネームして、テストページを開きましょう: http://localhost/
PHPの設定が記述された表が見られるでしょう。
PHPのバージョンを変更する
Apache によって処理される PHP のバージョンを変えるには、まず apache2
Server Application Programming Interface (SAPI) で利用可能なバージョンをリストアップします:
root #
eselect php list apache2
[1] php5.3 [2] php5.4 * [3] php5.5
選択したバージョンに変更するには:
root #
eselect php set apache2 N
上の例の N
は、先ほど表示したような eselect php list apache2 の出力の中から選択した番号で置き換えてください。
バーチャルホスト
それぞれのバーチャルホストごとに、 DocumentRoot
ディレクトリを用意し Apacheデーモンが見つけられアクセス可能なようにしましょう。/etc/apache2/vhosts.d ディレクトリ内にバーチャルホスト設定ファイル(VirtualHost.conf)を追加し、その中には この DocumentRoot
とホストサーバ名を指定します。また、このホストサーバ名の項目を /etc/hosts に追記することも忘れないでください。
apache ユーザ/グループ の所有者権限を、バーチャルホストのファイル群に割り当てます。以下の例のように chown コマンドで:
root #
chown apache:apache /var/www/sitename
以下に、2つのバーチャルホスト定義例があります。1つは domainname1.com で、もう1つは domainname2.com です。本来のホスト自体(*:80
)は同じでも、DocumentRoot
と ServerName
のディレクティブがそれぞれ異なります。
<VirtualHost *:80> ServerAdmin email@site.com DocumentRoot /var/www/website1 ServerName domainname1.com </VirtualHost> <VirtualHost *:80> ServerAdmin email@site.com DocumentRoot /var/www/website2 ServerName domainname2.com </VirtualHost>
IPアドレスベースのバーチャルホスト定義を行うこともまた推奨されています。管理者はユーザに対して、IPアドレスを通じてサイトへアクセスさせメッセージを掲げられます。
<VirtualHost *:80> ServerAdmin email@site.com DocumentRoot /var/www/html ServerName xxx.xxx.xxx.xxx </VirtualHost> >
バーチャルホストを挿入したあとには、新たなウェブサイトを有効にするために、ウェブサーバを(完全に)再起動する必要があります。
fcgid 経由の PHP を有効にする
www-apache/mod_fcgid と dev-lang/php をインストール。PHP パッケージには、cgi
USE フラグの設定が必要:
root #
emerge --ask www-apache/mod_fcgid dev-lang/php
mod_fcgid.conf ファイルを編集:
/etc/apache2/modules.d/20_mod_fcgid.conf
<IfDefine FCGID> LoadModule fcgid_module modules/mod_fcgid.so SocketPath /var/run/fcgidsock SharememPath /var/run/fcgid_shm AddHandler php-fcgid .php AddType application/x-httpd-php .php Action php-fcgid /fcgid-bin/php-fcgid-wrapper # max request 128mb FcgidMaxRequestLen 134217728 <Location /fcgid-bin/> SetHandler fcgid-script Options +ExecCGI </Location> </IfDefine>
必要なディレクトリの作成:
root #
mkdir /var/www/localhost/htdocs/fcgid-bin
PHP ラッパーへのシンボリックリンクを張る:
root #
ln -s /usr/bin/php-cgi /var/www/localhost/htdocs/fcgid-bin/php-fcgid-wrapper
FCGID
モジュールの有効化:
/etc/conf.d/apache2
fcgidモジュールを有効にするAPACHE2_OPTS="... -D FCGID"
最後に、Apache を再起動して、すでに作成されたphpinfo()
サイトを確認します。Server API
の値は CGI/FastCGI になるはずです。
Apache 2.4でmod_proxy_fcgiを使ってPHP-FPMを使う
PHP-FPM をmod_proxy_fcgi を通じて有効にするには以下の要件を満たす必要があります:
- >= PHP 5.3
- >= Apache 2.4
さらに、Apache 2.4 での機能の利用にはいくつかの制限があります:
- UNIX ソケット経由で PHP-FPM と通信する には >= Apache 2.4.9 が必要です。
- ProxyPassMatch ではなく SetHandler を使用するには >= Apache 2.4.10 が必要です。
以下の設定は Apache 2.4.10 以降でのみ動作します。この手法は、FilesMatch
ディレクティブに基づいており、メインのサーバー設定か VirtualHost
の設定の中に記載します。UNIX ソケットの場所は、php-fpm.conf という設定ファイル内の listen
ディレクティブによって決まり、サイトや機能ごとに別々に定めることが可能です。
以下の例では、FilesMatch
を Apache の PHP モジュールの設定ファイルに記述しています:
/etc/apache2/modules.d/70_mod_php.conf
PHP-FPM を使う(Apache 2.4.10 以降で推奨)<IfDefine PHP> <FilesMatch "\.php$"> SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> # Set it to handle the files <IfModule mod_mime.c> AddHandler application/x-httpd-php .php .php5 .phtml AddHandler application/x-httpd-php-source .phps </IfModule> DirectoryIndex index.php index.phtml </IfDefine>
また、ProxPassMatch を使用することもできます -- Apache のバージョンが 2.4.0 から 2.4.8 (これらを含む) の場合はこれが唯一の選択肢です。
/etc/apache2/modules.d/70_mod_php.conf
PHP-FPM を使う(2.4.8 以前で推奨)<IfDefine PHP> # Send all requested PHP files to PHP-FPM via fcgi://PHP_FPM_LISTEN_ADDRESS:PHP_FPM_LISTEN_PORT/DOCUMENT_ROOT/$1 ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/localhost/htdocs/$1 # Set it to handle the files <IfModule mod_mime.c> AddHandler application/x-httpd-php .php .php5 .phtml AddHandler application/x-httpd-php-source .phps </IfModule> DirectoryIndex index.php index.phtml </IfDefine>
デフォルトでは listen
ディレクティブはソケットに設定されていません。まずソケットファイル用のディレクトリーを作成します:
root #
mkdir /var/run/php-fpm
次に php-fpm.conf ファイルを以下のように変更します:
php-fpm.conf
listen ディレクティブを使う; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0666 listen.owner = nobody listen.group = nobody ;listen.mode = 0666 ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. ;listen = 127.0.0.1:9000 listen = /var/run/php-fpm/www.sock
そして、PHP
および PROXY
のモジュールを有効にします:
/etc/conf.d/apache2
PHP およびプロキシーのモジュールを有効にするAPACHE2_OPTS="... -D PHP -D PROXY"
使い方
サービス
OpenRC
Apache サーバを起動:
root #
/etc/init.d/apache2 start
Apache を default ランレベルに追加:
root #
rc-update add apache2 default
Apache サービスを再起動:
root #
/etc/init.d/apache2 restart
Apache の設定ファイルの再読込:
root #
/etc/init.d/apache2 reload
systemd
Apache サーバを起動:
root #
systemctl start apache2
Apache を default ランレベルに追加:
root #
systemctl enable apache2
Apache サービスを再起動:
root #
systemctl restart apache2
トラブルシューティング
資料
Apache サーバーを適切に設定するのは難しいこともあります。以下の資料は問題が起こったときに役に立つかもしれません:
テスト
Apache2 が動作し listen している IP インターフェースとポートの確認:
root #
netstat -tulpen | grep apache
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 10932720 4544/apache2 tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 0 10932716 4544/apache2
localhost で Apache サーバに接続できるかテスト:
user $
telnet localhost 80
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.
接続テストを中断するには Ctrl+c と Enter を入力します。
apr_sockaddr_info_get() failed for <System_Hostname>
エラー:
apache2: apr_sockaddr_info_get() failed for System_Hostname
対処法:
これが発生したら、/etc/hosts ファイルにホスト名を追加してください:
/etc/hosts
Apache 用にホスト名を追加する127.0.0.1 localhost System_Hostname
参考
- Lighttpd — a fast and lightweight web server.
- Nginx —
外部の情報
- Slicehostの記事: Installing Apache on Gentoo
- Slicehostの記事: Apache configuration files on Gentoo
- Slicehostの記事: Configuring the Apache MPM on Gentoo
- Slicehostの記事: Apache configuration on Gentoo
- Slicehostの記事: Apache Virtual Hosts on Gentoo
- Slicehostの記事: Enabling and using apache's mod_status on Gentoo
- apache.org documentation
- Apache2 mod_pagespeed