📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の23版が非表示)
27行目: 27行目:
==== ソースコードからインストール ====
==== ソースコードからインストール ====
Apache2をビルドするために必要なライブラリをインストールする。<br>
Apache2をビルドするために必要なライブラリをインストールする。<br>
  sudo zypper install apr-devel apr-util-devel libexpat-devel libnghttp2-devel zlib-devel libxml2-devel \
  sudo zypper install libcurl-devel libexpat-devel libnghttp2-devel zlib-devel libxml2-devel libjansson-devel \
                     libopenssl-devel libopenssl-1_1-devel lua53-devel pcre-devel systemd-devel
                     libopenssl-devel libopenssl-1_1-devel lua53-devel pcre-devel pcre2-devel systemd-devel valgrind-devel
<br>
<br>
[https://httpd.apache.org/download.cgi Apache2の公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
まず、APR(Apache Portable Runtime)をソースコードからインストールする。<br>
[http://apr.apache.org/download.cgi APRの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf apr-<バージョン>.tar.gz
cd apr-<バージョン>
<br>
APRをビルドおよびインストールする。<br>
mkdir builddir && cd builddir
../configure --prefix=<APRのインストールディレクトリ> --enable-threads
make -j $(nproc)
make install
<br>
次に、APR-Utilをソースコードからインストールする。<br>
[http://apr.apache.org/download.cgi APR-Utilの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf apr-util-<バージョン>.tar.gz
cd apr-util-<バージョン>
<br>
APR-Utilをビルドおよびインストールする。<br>
mkdir apr-util-build && cd apr-util-build
../configure --prefix=<APRのインストールディレクトリ>  \
              --with-apr=<APRのインストールディレクトリ> \  # APRを任意のディレクトリにインストールしている場合
              --with-valgrind                      # Valgrindを有効にする場合
<br>
最後に、[https://httpd.apache.org/download.cgi Apache2の公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
ダウンロードしたファイルを解凍する。<br>
  tar xf httpd-<バージョン>.tar.bz2
  tar xf httpd-<バージョン>.tar.bz2
38行目: 62行目:
  mkdir build_Apache2 && cd build_Apache2
  mkdir build_Apache2 && cd build_Apache2
   
   
  ../configure --prefix=<Apache2のインストールディレクトリ>   \
  ../configure --prefix=<Apache2のインストールディレクトリ>                       \
               --with-apr=/usr                        \
               --with-apr=<APRのインストールディレクトリ>                        \
               --with-apr-util=/usr                  \
               --with-apr-util=<APR-Utilのインストールディレクトリ>              \
               --with-included-apr=/usr/include/apr-1 \  # srclib内のAPRとAPR-Utilもビルド対象にする
               --with-included-apr=/<APRのインストールディレクトリ>/include/apr-1 \  # srclib内のAPRとAPR-Utilもビルド対象にする
               --with-mpms-shared=all                 \  # worker, prefork, eventをビルド対象にする
               --with-mpms-shared=all                                     \  # worker, prefork, eventをビルド対象にする
               --with-pcre=<PCREのインストールディレクトリ>   \  # 例. /usr/local/src/pcre-<バージョン>/pcre-config
               --with-pcre=<PCREのインストールディレクトリ>                       \  # 例. /usr/local/src/pcre-<バージョン>/pcre-config
               --with-ssl=<OpenSSLのインストールディレクトリ> \  # 例. /usr/local/src/ssl
               --with-ssl=<OpenSSLのインストールディレクトリ>                     \  # 例. /usr/local/src/ssl
               --enable-dav --enable-dav-fs           \
               --enable-dav --enable-dav-fs                               \
               --enable-deflate                       \
               --enable-deflate                                           \
               --enable-headers                       \
               --enable-headers                                           \
               --enable-mods-shared=all              \  # 動的モジュールをビルド対象にする
               --enable-mods-shared=reallyall                            \  # 動的モジュールをビルド対象にする
               --enable-proxy --enable-proxy-ajp     \
               --enable-proxy --enable-proxy-ajp                         \
               --enable-rewrite=shared               \
               --enable-rewrite=shared                                   \
               --enable-ssl                           \  # SSLモジュールをビルド対象にする
               --enable-ssl                                               \  # SSLモジュールをビルド対象にする
               --enable-so                           \
               --enable-so                                               \
               --enable-speling=shared               \
               --enable-speling=shared                                   \
               --enable-systemd
               --enable-systemd
   
   
101行目: 125行目:
  #EnvironmentFile=/<Apache2の設定ファイルがあるディレクトリ>/conf/httpd.conf
  #EnvironmentFile=/<Apache2の設定ファイルがあるディレクトリ>/conf/httpd.conf
  #Environment=LD_LIBRARY_PATH=/usr/local/ssl/lib:/usr/local/lib:/usr/local/lib64:/usr/lib
  #Environment=LD_LIBRARY_PATH=/usr/local/ssl/lib:/usr/local/lib:/usr/local/lib64:/usr/lib
  ExecStart=/<Apache2のインストールディレクトリ>/bin/apachectl start
  ExecStart=/<Apache2のインストールディレクトリ>/bin/apachectl -k start
  ExecReload=/<Apache2のインストールディレクトリ>/bin/apachectl graceful
  ExecReload=/<Apache2のインストールディレクトリ>/bin/apachectl -k graceful
  ExecStop=/<Apache2のインストールディレクトリ>/bin/apachectl stop
  ExecStop=/<Apache2のインストールディレクトリ>/bin/apachectl -k stop
   
   
  #ExecStart=/<Apache2のインストールディレクトリ>/bin/httpd \$OPTIONS -DFOREGROUND
  #ExecStart=/<Apache2のインストールディレクトリ>/bin/httpd \$OPTIONS -DFOREGROUND
112行目: 136行目:
  # 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.
  # 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
  #KillSignal=SIGCONT
  #PrivateTmp=true
  PrivateTmp=true
   
   
  [Install]
  [Install]
156行目: 180行目:
Webブラウザに、http://localhost と入力する。<br>
Webブラウザに、http://localhost と入力する。<br>
"Welcome to SUSE Web Site"と記載されたWebページが表示されれば、Apache2のインストールは完了である。<br>
"Welcome to SUSE Web Site"と記載されたWebページが表示されれば、Apache2のインストールは完了である。<br>
<br><br>
== mod_fcgidモジュール (FastCGI) ==
==== mod_fcgidモジュールとは ====
mod_fcgidモジュールは、Apache HTTP ServerのFastCGI実装の1つであり、動的なWebコンテンツを効率的に処理するためのモジュールである。<br>
<br>
mod_fcgidモジュールの特徴として、従来のCGIに比べて高いパフォーマンスを実現する。<br>
これは、プロセスを再利用することにより、リクエスト毎にプロセスを生成・破棄する従来のCGIの問題点を解決しているためである。<br>
<br>
設定では、基本的な設定だけで運用を開始できる。<br>
プロセス管理も自動的に行われて、必要に応じてプロセスの数を増減させることができる。<br>
<br>
セキュリティにおいては、実行ユーザ、グループの制御、タイムアウト設定、プロセス数の制限等が可能である。<br>
これにより、サーバリソースの過剰な使用を防ぎ、安全な運用を実現できる。<br>
<br>
mod_fcgidモジュールは、PHP、Python、Perl等のスクリプト言語との相性が良い。<br>
また、他のFastCGI実装であるmod_fastcgiモジュールと比較すると、より軽量で設定が簡単という特徴がある。<br>
<br>
ただし、高度な設定オプションはmod_fastcgiモジュールの方が多く用意されている。<br>
<br>
==== mod_fcgidモジュールのインストール ====
[https://httpd.apache.org/download.cgi Apache2の公式Webサイト]にアクセスして、mod_fcgidモジュールのソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf mod_fcgid-<バージョン>.tar.gz
cd mod_fcgid-<バージョン>
<br>
mod_fcgidモジュールをビルドおよびインストールする。<br>
export APXS=/<Apache2のインストールディレクトリ>/bin/apxs; \
./configure.apxs --prefix=<Apache2のインストールディレクトリ>
make -j $(nproc)
make install
<br>
==== mod_fcgidモジュールの設定 ====
<syntaxhighlight lang="apache">
# FastCGIデーモンプロセスの基本設定
LoadModule fcgid_module modules/mod_fcgid.so
<IfModule mod_fcgid.c>
    # メモリリークを防ぐための重要な設定
    # プロセスの生存時間を3600秒 (1時間) に設定
    # 長時間実行されているプロセスをクリーンアップして、メモリリークを防ぐ
    FcgidProcessLifeTime 3600
    # サーバリソースの制御 (高負荷環境ではFcgidMaxProcessesの値を増やすことを検討する)
    # 同時に実行可能な最大プロセス数を5に制限
    # サーバリソースの過剰使用を防ぐための重要な設定
    # 必要に応じてサーバスペックに合わせて調整可能
    FcgidMaxProcesses 5
    # メモリ管理とパフォーマンスのバランス (環境に応じて500〜5000の範囲で調整)
    # 1つのプロセスが処理できる最大リクエスト数を1000に設定
    # プロセスのメモリリークを防ぎ、定期的なプロセス再起動を強制
    # 値を小さくするとプロセスの再起動が頻繁になり、大きくするとメモリリークのリスクが増加
    FcgidMaxRequestsPerProcess 1000
    # レスポンス時間とリソース効率のトレードオフを制御 (メモリに余裕がある場合はFcgidMinProcessesPerClassを1以上に設定する)
    # クラスごとの最小プロセス数を0に設定
    # 必要な時のみプロセスを起動して、アイドル状態のプロセスを持たない
    # リソース効率を重視する場合は0、レスポンス時間を重視する場合は1以上を設定
    FcgidMinProcessesPerClass 0
    # 追加の推奨設定例:
    # プロセスのタイムアウト時間 (秒)
    #FcgidProcessConnectTimeout 20
    # IOタイムアウト時間 (秒)
    #FcgidIOTimeout 40
    # 1リクエストあたりの最大実行時間 (秒)
    #FcgidBusyTimeout 300
    # スクリプトのタイムアウト時間 (秒)
    #FcgidIdleTimeout 30
    # 最大リクエストサイズ (バイト)
    # アップロードサイズを制限することを推奨
    #FcgidMaxRequestLen 1073741824
    # エラーログの詳細レベル (debug, info, warn, error)
    #FcgidLogLevel error
</IfModule>
# 特定のディレクトリに対する個別の設定例
#<Directory "/var/www/html/fcgi-bin">
#    SetHandler fcgid-script
#    Options +ExecCGI
#    AllowOverride None
#    Require all granted
#</Directory>
</syntaxhighlight>
<br><br>
<br><br>


236行目: 352行目:
<br><br>
<br><br>


== 仮想ホストの構築 ==
== 仮想ホストの構築 (パッケージ管理システムからApache2をインストールした場合) ==
==== パッケージ管理システムからインストールした場合 ====
このセクションでは、SUSEにおいて、仮想ホストの構築手順を記載する。<br>
このセクションでは、SUSEにおいて、仮想ホストの構築手順を記載する。<br>
<br>
<br>
505行目: 620行目:
仮想ホストの設定ファイル(*.confファイル)を反映させるため、Apache2を再起動する。<br>
仮想ホストの設定ファイル(*.confファイル)を反映させるため、Apache2を再起動する。<br>
  sudo systemctl restart apache2
  sudo systemctl restart apache2
<br>
<br><br>
==== ソースコードからインストールした場合 ====
 
== 仮想ホストの構築 (ソースコードからApache2をインストールした場合) ==
まず、/<Apache2のインストールディレクトリ>/conf/extraディレクトリに、.confファイル(ファイル名は任意)を作成して、上記のような内容を記述する。<br>
まず、/<Apache2のインストールディレクトリ>/conf/extraディレクトリに、.confファイル(ファイル名は任意)を作成して、上記のような内容を記述する。<br>
なお/<Apache2のインストールディレクトリ>/conf/extraディレクトリは、仮想ホストの設定ファイル(*.confファイル)や他の設定ファイル等を配置するディレクトリである。
なお/<Apache2のインストールディレクトリ>/conf/extraディレクトリは、仮想ホストの設定ファイル(*.confファイル)や他の設定ファイル等を配置するディレクトリである。
513行目: 629行目:
  # /<Apache2のインストールディレクトリ>/conf/extra/vhost_1.confファイル
  # /<Apache2のインストールディレクトリ>/conf/extra/vhost_1.confファイル
   
   
  # 上記のような内容を記述する
  # 上記のセクションで記述されているような仮想ホストのconfファイルの内容を記述する
<br>
<br>
作成した.confファイルをインクルードするため、/<Apache2のインストールディレクトリ>/conf/httpd.confファイルに以下の設定を追記する。<br>
作成した.confファイルをインクルードするため、/<Apache2のインストールディレクトリ>/conf/httpd.confファイルに以下の設定を追記する。<br>
549行目: 665行目:
  # Systemdサービスユニットを作成していない場合
  # Systemdサービスユニットを作成していない場合
  /<Apache2のインストールディレクトリ>/bin/apachectl start
  /<Apache2のインストールディレクトリ>/bin/apachectl start
<br><br>
== HTTPS(SSL)の設定 ==
==== CSRについて ====
CSR(Certificate Signing Request)とは、証明書発行要求といい、認証局に対して行う、認証局の秘密鍵で署名してもらうためのリクエストのことである。<br>
<br>
CSRの中身を確認するためには、<code>req</code>コマンドに<code>-text</code>オプションを付加することで確認できる。<br>
openssl req -text -in <サーバ証明書のファイル名>.csr
# 出力例
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=TOKYO, L=KAWASAKI, O=Kaisha, OU=Busho, CN=common.name
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                (省略)
    Signature Algorithm: sha256WithRSAEncryption
                (省略)
<br>
上記の出力例において、[Signature Algorithm]項目は、sha256WithRSAEncryptionである。<br>
SHA-1は解読されるリスクが高まっているため、今後作成するものはSHA-2とするべきである。<br>
<br>
SHA-2には、SHA-224、SHA-256、SHA-384、SHA-512の4種類がある。<br>
SHA-512が最も安全性が高いが、クライアント端末側がSHA-512に対応している必要がある。<br>
<br>
==== 自己証明書の発行(サーバ側) ====
秘密鍵を作成する。<br>
openssl genrsa -out <秘密鍵のファイル名>.key 2048
<br>
作成した秘密鍵を使用して、CSRを作成する。<br>
openssl req -sha256 -new -subj "/C=JP/ST=Tokyo/L=Tokyo City/O=Company Name/OU=Department/CN=*.<ドメイン名>" -key <秘密鍵のファイル名>.key -out <CSRのファイル名>.csr
<br>
作成したCSRに署名を行って、サーバ証明書を発行する。<br>
<u><サーバ証明書のファイル名>.csrファイルは、サーバ証明書を発行するためのファイルのため、削除してもよい。</u><br>
openssl x509 -sha256 -req -days <証明書の有効日数 例. 3650> -in <CSRのファイル名>.csr -signkey <秘密鍵のファイル名>.key -out <サーバ証明書のファイル名>.crt
<br>
秘密鍵のファイルのアクセス権限を変更する。<br>
chmod 400 <秘密鍵のファイル名>.key
<br>
Webサーバに設置するものは、秘密鍵(.key拡張子)とサーバ証明書(.crt拡張子)の2つである。<br>
<br>
SSLを有効にするため、Apache2のSSLの設定ファイルを編集する。<br>
# パッケージ管理システムからインストールしている場合
sudo vi /etc/httpd/conf.d/ssl.conf
# ソースコードからインストールしている場合
sudo vi /<Apache2のインストールディレクトリ>/conf/extra/httpd-ssl.conf
<br>
<syntaxhighlight lang="apache">
Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
</syntaxhighlight>
<br>
次に、仮想ホストの設定ファイルを作成または編集する。<br>
# パッケージ管理システムからインストールしている場合
sudo vi /etc/apache2/vhosts.d/vhost01.conf
# ソースコードからインストールしている場合
sudo vi /<Apache2のインストールディレクトリ>/conf/extra/httpd-vhosts.conf
<br>
<syntaxhighlight lang="apache">
<VirtualHost *:443>
    DocumentRoot "<ドキュメントルートのパス>"
    ServerName <ホスト名またはIPアドレスまたはドメイン名 (例. www.sample.co.jp)>
    ServerAdmin <管理者のメールアドレス (例. webmaster@example.com)>  # この項目は任意である
    ServerAlias <サーバエイリアス名 (例. sample.co.jp)>              # この項目は任意である
    ErrorLog <エラーログファイルの絶対パスまたは相対パス>
    TransferLog <アクセスログファイルの絶対パスまたは相対パス>
    LogLevel warn
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile <サーバ証明書ファイルのフルパス>
    SSLCertificateKeyFile <秘密鍵ファイルのフルパス>
    SSLCertificateChainFile <中間証明書ファイルのフルパス>            # 自己証明書の場合、この項目は不要である
</VirtualHost>
</syntaxhighlight>
<br>
<u>ロードバランサにSSL証明書を設置して、SSL接続を終端することもできる。</u><br>
<u>その場合、サーバ証明書は1つ用意して、ロードバランサからWebサーバまでの通信はhttpとなる。(httpsでも可能であるが、httpの方が負荷が軽いため)</u><br>
<br>
<u>httpを使用するメリットとして、Webサーバで受けるアクセスがhttpとなるので負荷が減るためである。(暗号化された通信を複合するために、SSLの接続を受けるのは負荷が掛かる)</u><br>
<br>
==== 自己証明書の発行(クライアント側) ====
秘密鍵を作成する。<br>
openssl genrsa -out <秘密鍵のファイル名>.key 2048
<br>
作成した秘密鍵を使用して、クライアント側のCSRを作成する。<br>
openssl req -sha256 -new -subj "/C=JP/ST=Tokyo/L=Tokyo City/O=Company Name/OU=Department/CN=*.<ドメイン名>" \
                          -key <秘密鍵のファイル名>.key -out <CSRのファイル名>.csr
<br>
作成したCSRに署名を行って、サーバ証明書を発行する。<br>
<u><サーバ証明書のファイル名>.csrファイルは、サーバ証明書を発行するためのファイルのため、削除してもよい。</u><br>
openssl x509 -sha256 -req -days <証明書の有効日数 例. 3650> -in <CSRのファイル名>.csr -signkey <秘密鍵のファイル名>.key -out <サーバ証明書のファイル名>.crt
<br>
<u>クライアントPCがWindowsの場合、Windows PCにインポートするには、サーバ証明書のファイル(.crt拡張子)をpkcs12形式に変換する必要がある。</u><br>
openssl pkcs12 -export -inkey <秘密鍵のファイル名>.key -in <サーバ証明書のファイル名>.crt \
                        -out <クライアント側にインポートするサーバ証明書のファイル名>.p12 -name <任意の識別子名>
<br>
秘密鍵のファイルのアクセス権限を変更する。<br>
chmod 400 <秘密鍵のファイル名>.key
<br>
CSRファイルは、サーバ証明書を発行するためのファイルであるため、削除してもよい。<br>
<br>
<u>サーバに設置するものは、サーバ証明書のファイル(.crt拡張子)と秘密鍵(.key拡張子)の2つである。</u><br>
<u>Windows PCへ配布するものは、pkcs12形式に変換したクライアント側のサーバ証明書のファイル(.p12拡張子)である。</u><br>
<br>
Windows PCへクライアント側のサーバ証明書のファイル(.p12拡張子)をインポートする場合、ファイルを実行することによりインポート画面が起動するため、<br>
インポート画面に沿って、サーバ証明書のファイル(.p12拡張子)をインポートする。<br>
<br>
==== .htaccessの設定 ====
必要ならば、httpプロトコルでアクセスがあった場合にhttpsプロトコルへリダイレクトする設定を行う。<br>
<br>
ドキュメントルートの.htaccessファイルを作成または編集する。<br>
sudo vi /<ドキュメントルートのディレクトリ>/.htaccess
<br>
# /<ドキュメントルートのディレクトリ>/.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sample\.co\.jp  # wwwありに統一する設定
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://www.sample.co.jp/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^sample\.co\.jp  # wwwありに統一する設定(SSL)
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ http://www.sample.co.jp/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.sample.co.jp/$1 [R=301,L]
<br>
なお、さくらインターネットのレンタルサーバにおいて、SSLを導入した場合は.htaccessファイルの設定が特殊である。<br>
RewriteCond %{HTTP_HOST} ^sample\co\.jp$ [OR,NC]
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://www.sample.co.jp/$1 [R=301,L]
<br>
WordPressをSSL化する場合は、[https://wordpress.org/plugins/wordpress-https/ Wordpress-httpsプラグイン]を使用することもできる。<br>
<br><br>
<br><br>


570行目: 829行目:
インストール済みのPHPの情報が表示されていれば、Apache2が正常に動作している。<br>
インストール済みのPHPの情報が表示されていれば、Apache2が正常に動作している。<br>
<br><br>
<br><br>
== PHP-FPMを使用する場合 ==
PHP-FPMを使用する場合、PHP-FPMが動作するユーザ名およびグループ名 (www.confファイルにある<code>user</code>および<code>group</code>) と同名にする必要がある。 (<code>nobody</code>でもよい)<br>
この設定を行わない場合、リクエストが来てもテキストファイルのように.phpファイルの内容を返してしまう。<br>
<br>
Apache2の設定ファイル (httpd.confファイル) において、<code>User</code>および<code>Group</code>を設定する。<br>
sudo vi /<Apache2のインストールディレクトリ>/conf/httpd.conf
<br>
<syntaxhighlight lang="apache">
# /<Apache2のインストールディレクトリ>/conf/httpd.confファイル
User <PHP-FPMが動作する同一のユーザ名またはnobody>
Group <PHP-FPMが動作する同一のグループ名またはnobody>
</syntaxhighlight>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:SUSE]]
[[カテゴリ:SUSE]][[カテゴリ:Web]]