見出し画像

【Linux】 Apacheサーバ設定

世界的に最も普及しているWebサーバ(HTTPサーバ)ソフトウェアの一つ。

作業ログ


Apache

設定ファイル(RED HAT)
 /etc/httpd/conf/httpd.conf:主要設定ファイル。
 /etc/httpd/conf.d/:主要設定ファイル内に含まれている設定ファイル用の補助ディレクトリー。

設定例 (/etc/httpd/conf/httpd.conf)

# root権限で起動したApacheの親プロセスが、
# 子プロセスを生成する際に使用するユーザー名とグループ名を指定
User apache
Group apache

# http://example.com/old を http://example.com/new に
# リダイレクトURLを別のURLにリダイレクトするRedirect
Redirect /old http://example.com/new

# /static を /var/www/html/static に
# マッピングURLを別のパスにマッピングするAlias
Alias /static /var/www/html/static

# 404エラーに対するカスタムエラーページを 
# /var/www/html/error/404.html に設定する
ErrorDocument 404 /error/404.html

# エラーログの出力先とファイル名
ErrorLog "logs/error_log"

# ログの出力レベル
LogLevel warn

# ドキュメントルートを /var/www/html に
# 設定Webサイトで使用するファイルが保存されている
DocumentRoot /var/www/html

# index.html をDirectoryIndexに設定特定のディレクトリ内のファイルの一覧を表示
DirectoryIndex index.html

# サーバー管理者への問い合わせ先メールアドレス (または別サーバーのURL) を指定
ServerAdmin webmaster@example.jp

# サーバーのホスト名とポート番号を指定
ServerName example.jp:80

# ディレクトリごとのアクセス制御の設定
<Directory "/var/www/html">
</Directory>

# すべてのクライアントからの接続を許可。denied は拒否。
Require all granted

# 有効なユーザー名とパスワードを持つユーザーのみがアクセスできる
Require valid-user

# 特定のディレクトリに対してアクセスができないようにする
Options None

# Apacheによって自動的に生成されたインデックスページを有効にする。
# これにより、ディレクトリ内のファイルやサブディレクトリの一覧が表示
Indexes
    
# シンボリックリンクをたどることを許可する
FollowSymLinks

# .htaccessファイルを無効にする
# AllowOverride Allは、すべての設定を許可
AllowOverride None

# Apacheは最初に index.html ファイルを探し、次に index.php ファイルを探す
DirectoryIndex index.html index.php 

 ApacheはUTF-8エンコーディングを使用して、ディレクトリ内のファイルを表示
AddDefaultCharset UTF-8

# Apacheがインストールされているディレクトリを指定
ServerRoot "/etc/httpd"

# リクエストを失敗させるまでにサーバが待つ時間を設定
Timeout 60

# 持続的な接続上で許可されるリクエストの数を設定する。
# 0 に設定していれば、受け付けるリクエストは無制限になる
MaxKeepAliveRequests 100

# クライアント数を100に制限する 
MaxClients 100

# サーバが listen するIPアドレスとポート番号を設定
Listen 80

# サーバ設定ファイル中から他の設定ファイルを取り込む
Include conf.d/*.conf

# OSのシステムコールを使用するかどうかを制御するためのパラメータ。
# 有効にすることで、Apacheの読み込み速度が向上する可能性があるが、動作が不安定になることもある
EnableSendfile On

# Apacheが返すコンテンツの文字エンコーディングを指定
AddDefaultCharset UTF-8

# Apacheが返すコンテンツに対して、出力フィルタを適用する
# HTML、plain text、CSSのコンテンツに対して、DEFLATE出力フィルタが適用され、圧縮される
AddOutputFilter DEFLATE text/html text/plain text/css

#Apacheが返すコンテンツのMIMEタイプを指定する
#.jsの拡張子を持つファイルに対して、MIMEタイプをapplication/x-javascriptに指定
AddType application/x-javascript .js

# パフォーマンス向上のためのコネクションキープアライブの設定
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

# pacheはX-XSS-Protectionヘッダを送信し、
# クロスサイトスクリプティング攻撃から保護するためのブラウザの機能を有効
Header set X-XSS-Protection "1; mode=block" A

参考:https://qiita.com/KoriCori/items/e4fc93482f9b434a92cd

htmlファイルを置く際は、ドキュメントルートの/var/www/html/配下に置くようにする。権限にも注意が必要で、読み込み実行権限をつける必要がある。(755)。

CMSをサイト上で動かす場合、SFTPツールやFTPツールを使わなくても、CMSの管理画面からファイルをアップロードしたり、プラグインをインストールしたりすることが可能ではあるが、書き込み権限がないと実行できない。


HTTPS の設定

HTTPS を利用するための設定

Listen 443 https

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
    ServerName example.com
    DocumentRoot /var/www/html/example
</VirtualHost>

Listen 443 https: HTTPS のポート番号を設定する。この場合は 443 を指定している

  • <VirtualHost *:443>: HTTPS 用のバーチャルホストを指定する

  • SSLEngine on: SSL を有効化する設定

  • SSLCertificateFile /path/to/cert.pem: SSL 証明書のファイルパスを指定する設定

  • SSLCertificateKeyFile /path/to/key.pem: SSL 証明書の秘密鍵のファイルパスを指定する設定

  • ServerName example.com: このバーチャルホストのドメイン名を指定する設定

  • DocumentRoot /var/www/html/example: ドキュメントルートを指定する


外部設定ファイル

AllowOverride ディレクティブ:.htaccess を使ってどのディレクティブに関する設定を変更することができるのかを指定。.htaccessとは、Webサーバーの動作をディレクトリ(複数のファイルの分類・整理ができる保管場所)単位で制御できるファイル。

.htaccessファイル
ディレクトリ単位で設定を行い、そのディレクトリ以下の全てのファイルに適用。これにより、特定のディレクトリやファイルにアクセス制限をかけたり、URLの書き換えを行ったり、カスタムエラーページを表示したりすることができる。
ただし、.htaccessファイルは、セキュリティ上の理由から、Webサーバーの設定ファイルよりも遅い処理速度を持っているため、可能な限り、.htaccessファイルを使用せず、Webサーバーの設定ファイルを編集することが推奨される。
書き方は httpd.conf ファイルと変わらない。
ファイルパスは、/var/www/html/.htaccess

# .htaccessファイルで設定されるオプションを有効にする 
<Directory "/var/www/html">     
AllowOverride All 
</Directory> 

# .htaccessファイルで設定されるオプションを無効にする 
<Directory "/var/www/html">     
AllowOverride None 
</Directory> 

# 認証に関する.htaccessファイルで設定されるオプションを有効にする 
<Directory "/var/www/html">     
AllowOverride AuthConfig <
/Directory> 

# ファイルに関する.htaccessファイルで設定されるオプションを有効にする 
<Directory "/var/www/html">     
AllowOverride FileInfo 
</Directory>
  •  AuthConfig 認証に関するディレクティブ

  •  FileInfo ドキュメントに関するディレクティブ

  •  Indexes ディレクトリインデックスに関するディレクティブ

  •  Limit (以前の)アクセス制御をに関するディレクティブ

  •  Options[=Option,...] Options ディレクティブ

  •  All:すべての.htaccessファイルで設定されるオプションを有効にする


クライアントアクセス制御

BASIC認証
Apache認証方式の一つで、ユーザー名とパスワードを使う単純な認証方式。

<Directory "/var/www/html/protected">     
   AuthType Basic     # 認証のタイプ
   AuthName “認証領域” 
   AuthUserFile “.htpasswdファイルの設置場所”    
   Require valid-user # ユーザー認証を求めるという意味
</Directory>


ダイジェスト認証
ブラウザとサーバ間でユーザー名とパスワードの情報がやり取りされるときに MD5 でハッシュ化されて送信される。認証が通ったユーザーだけにディレクトリやファイルに対するアクセスを許可することができる。

Directory "/var/www/html/protected">
     AuthType Digest            # 認証のタイプ
     AuthName "Protected Area"  # 認証領域
     AuthDigestDomain /         # 保護するURI
     AuthDigestProvider file    # 認証プロバイダ
     AuthUserFile /etc/httpd/conf/.htdigest  # パスワードファイル
     Require valid-user 
</Directory>


リダイレクト設定
特定のURLにアクセスした際に別のURLに自動的に転送する設定

#リダイレクト設定
Redirect permanent / リダイレクト先のURL

# ページ単位でリダイレクト設定
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (リダイレクト元のURL) $ (リダイレクト先のURL) [R=301,L]
</IfModule>


firewallの設定

$ firewall-cmd --add-port=<変更したポート番号>/tcp --permanent 
$ firewall-cmd --reload
$ firewall-cmd --list-all


LoadModule

書式:LoadModule module filename

Apache HTTPサーバーの機能を拡張する。例えば、mod_rewriteモジュールは、URLリライト機能を、mod_sslモジュールは、暗号化されたSSL接続を提供する。

# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.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 substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
#LoadModule asis_module modules/mod_asis.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule cgid_module modules/mod_cgid.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule filter_module modules/mod_filter.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule unique_id_module modules/mod_unique_id.so

主なモジュール

  •  mod_access  ホストベースのアクセス制御の実現を提供

  •  mod_actions 特定のファイルタイプが要求されたときに、必ずCGIスクリプトが実行される

  •  mod_alias サーバーのファイルシステムを別の場所にマップしたり、URLをリダイレクトしたりすることを可能に

  •  mod_asis ドキュメントにHTTPヘッダなどを付けずそのまま送信することを可能に

  •  mod_auth テキストファイルを使ってのユーザー認証を可能に

  •  mod_auth_anon * 匿名ユーザーにユーザー認証の必要な領域へのアクセスを許可

  •  mod_auth_dbm * DBMファイルを使ったユーザー認証機能を提供

  •  mod_autoindex index.html等のインデックスファイルがない場合にApacheによって表示される動的ディレクトリインデックスのタイプを制御できる。

  •  mod_cern_meta * CERN HTTPDが使う追加のHTTPヘッダー形式でメタ情報を指定できるように

  •  mod_cgi CGIスクリプトを実行可能に

  •  mod_digest * MD5に基づくユーザー認証を有効に

  •  mod_dir ディレクトリのインデックス表示を可能に

  •  mod_env 環境変数をCGIスクリプトやSSI(サーバーサイドインクルード)に渡すことを可能に

  •  mod_expires * ExpiresHTTPヘッダー情報を使うことを有効に

  •  mod_headers * HTTP応答ヘッダーを追加、付加、削除できるように

  •  mod_imap イメージマップを実現する機能を提供

  •  mod_include サーバーによって解析されるHTMLドキュメントが使えるように設定

  •  mod_isapi Apacheの機能を拡張するためにWindowsのISAPI拡張を利用できるようにWindows版のみの機能。

  •  mod_log_config サーバーへのリクエストを共通ログ形式またはユーザー定義のログ形式で記録できるように設定

  •  mod_mime 特定のドキュメントまたはファイルタイプに対応した処理方法を指定するハンドラを設定

  •  mod_negotiation コンテンツに対して、ブラウザとサーバーが情報をやり取りできるように

  •  mod_proxy Apacheをプロキシサーバーとして機能できるように設定

  •  mod_rewrite * URLをリクエスト時にその場で書き換える処理を

  •  mod_setenvif 独自の環境変数を作成できる

  •  mod_speling * ユーザーがURLのスペルを間違って入力した際にそれを自動的に直す機能を提供

  •  mod_status サーバーの現在の稼動状態をHTMLページとして表示

  •  mod_userdir ユーザーディレクトリの作成

  •  mod_unique_id * リクエストごとに一意のIDを生成する機能を提供UNIX固有の機能。

  •  mod_vhost_alias *

  •  mod_usertrack *

  •  mod_so * Apacheの起動時に実行可能コードやモジュールをサーバーにロードできるようにいわゆるDSO(Dynamic Shared Object)モードを有効に(バージョン1.3以降の機能)


ifModule

Apache HTTPサーバーの設定ファイルであるhttpd.confや.htaccessファイルにおいて、特定のモジュールがロードされている場合にのみ設定を有効にするためのディレクティブ。

<IfModule mod_ssl.c>
    # SSL設定
</IfModule>

mod_sslモジュールを使用してHTTPS接続をサポートする場合、IfModuleディレクティブを使用して、mod_sslモジュールがロードされている場合のみ、SSL設定を有効にする。


ログファイル

アクセスログ

Webサーバーにアクセスした内容が格納されたログで、アクセスしてきた時間やIPアドレス、アクセスされたページなどを知ることができる。
場所は”/var/log/apache/access.log

エラーログ

Webのエラー情報が格納。
場所は”/var/log/apache/error/log


ログの場所変更

Apacheの設定ファイルで”ErrorLog”と”CustomLog”の項目を変更する。

# ext
ErrorLog ${APACHE_LOG_DIR}/test/error.log
CustomLog ${APACHE_LOG_DIR}/test/access.log combined

変更後は対象のディレクトリを作成して権限などを変更し、Apacheを再起動する。
ログの出力先が変わっていれば変更は成功している。


リモートサーバーとの通信

Apacheサーバー上でウェブページを表示しながら、他のサーバー上にあるコンテンツを取得して表示する。
例えば、Apacheサーバー上であるウェブページにYouTubeの動画を埋め込む。Apacheサーバーを利用することで、複数のサーバー上にあるコンテンツを一つのウェブページにまとめて表示することができる。

vi /etc/httpd/conf/httpd.conf
------------------------------------------------------------------
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    Order allow,deny
    Allow from all
    ProxyPass /remote/ http://example.com/
    ProxyPassReverse /remote/ http://example.com/
</Directory>
------------------------------------------------------------------
systemctl restart httpd

http://example.com/のページがhttp://localhost/remote/でアクセス可能になる。
例えば、http://localhost/remote/index.htmlにアクセスした場合、Apacheはリモートサーバーのhttp://example.com/index.htmlを取得してクライアントに返す。 このとき、リモートサーバーのレスポンス内には、http://example.com/というURLが含まれており、クライアントがそのURLをクリックした場合に、リモートサーバーにアクセスしてしまうので、ProxyPassReverseディレクティブによって、レスポンス内のhttp://example.com/が/remote/に変更される。
つまり、クライアントがhttp://localhost/remote/index.htmlからリンクをたどった場合、http://localhost/remote以下のURLになるように変更される。


ディレクトリリスト

ディレクトリ内に存在するファイルやサブディレクトリの一覧を表示するための機能。通常、ディレクトリ内にindex.htmlやindex.phpなどのファイルが存在する場合、Webブラウザからアクセスした際にはそのファイルが表示されますが、それ以外の場合はディレクトリリストが表示される。

デフォルトでは有効になっており、ファイルが公開されてしまうセキュリティ上の問題があるので、基本的には無効にしたほうが良い。

Options -Indexes
Options +Indexes # 有効



その他のメイン設定



よろしければサポートお願いします!よりいい情報を発信します。