Apache2.4の設定めも

Aug 22 2026
Mar  4 2026
Jan 31 2023
Dec  8 2017
Mar 25 2015
Mar  6 2014
Jul 19 2009



関連   OpenSSL対応   WebDav設定メモ  Webアクセスログ解析  ブログサーバtdiaryの設定 

1 インストール

 
#  apt-get install apache2

2 設定

(0)設定手順の基本事項 

   設置ファイルの空白は[tab]を使わずスペースを使う。以前、(かなり昔) [tab]を使うとなぜかCGIがうまく動かなかったことがあった。

 基本的に設定は /etc/apache2/conf-aveilable の中の[コンフィグレーション].confファイルを書き換える。
 
 書き換えたら
# a2enconf [コンフィグレーション].conf
 を実行するとそのコンフィグレーションファイルが /etc/apache2/conf-enable 内に登録され
同時に reloadもされて動作に反映される。
 登録を削除するコマンドは
# a2disconf[コンフィグレーション].conf
 

同様にバーチャルホストの設定は/etc/apache2/sites-availableの設定ファイルを書き換えて
# a2ensite [コンフィグレーション].conf
 を実行するとバーチャルホストが /etc/apache2/sites-enableに登録される。
 削除コマンドは
# a2dissite [コンフィグレーション].conf
 

モジュールは/etc/apache2/mods-available内にある。
これもたぶん
# a2enmod [コンフィグレーション].conf
 
で登録する。削除は
# a2dismod[コンフィグレーション].conf
 



因みに
 /etc/apache2/*-enable/*.conf を書き換えて
#  systemctl reload apache2
 を実行しても /etc/apache2/*-available/*.confとリンクされていて同じファイルなので問題はない



(1)文字化けを直す

/etc/apache2/conf-available/charset.conf のUTF-8をコメントアウトする。(defaultでは コメントアウトされている)
# AddDefaultCharset UTF-8

いったん設定を削除して再登録する
# a2disconf charset.conf
# a2enconf charset.conf


(2) /etc/apache2/conf-available/security.conf の次のところを変更する。



ServerTokens Prod    <--- Full をProdに変更。サーバーの情報(バージョン、OSなど)を表示しないように

ServerSignature Off


いったん設定を削除して再登録する
#a2disconf  security.conf
#a2enconf   security.conf


(3) cgiやssiなどが動くようにする。

a2enmodコマンドでモジュールを使えるようにする。
#  a2enmod  cgi
  enableにするモジュール
      cgi      cgiプログラムの実行をサポート
      cgid     cgiプログラム(スレッド)の実行をサポート
      include  ページ内に埋め込むSSI(Server Side Includes)のサポート
      rewrite  要求されたURLの動的な書き換えをサポート
      ssl      SSLとTSLをサポート
      userdir   http://ホスト名/~hogehoge/のページを許可する。
  
  因みにモジュールの解除はa2dismodコマンド


(4)Virtual Hostの設定

 Virtual Hostの設定によって複数のドメインに対応できる。
 
 例 
 hoge.example.comでアクセスしたら/home/hoge/public_html/下の内容を表示するようにする。
 cgiやSSIも使えるようにする。
 さらに/home/下の他のユーザもpublic_html下のページをhttp://ドメイ名/~ユーザ/でアクセスできるように設定する。

  まず/etc/apache2/sites-available/000-default.confを hoge.example.com.confとい うファイル名でコピーし書き換える。
/etc/apache2/sites-available/hoge.example.com.conf
<VirtualHost *:80>                 <-----ポート番号指定

    ServerName  hoge.com
    ServerAlias hoge.com

    DocumentRoot /home/hoge/public_html/
    <Directory /home/*/public_html>
                Options ExecCGI Indexes FollowSymLinks MultiViews Includes <ーーーー (CGI,SSIが動くようにExecCGI Includesを追加)
                AllowOverride None
                Order allow,deny
                allow from all
               ServerSignature Off  <--- サーバー情報を表示しないようにする
                AddHandler cgi-script .cgi .pl <----  *.cgiとPerlのCGIを動かす
                AddType text/html .rhtml  .shtml <---------- rubyのcgiや.shtmlも動かす
   </Directory>
                                

</VirtualHost>




※補足 ServerNameのところに記述するサーバー名はDNSで検索できないとたぶんエラーになる。


設定ファイルのチェック
apache2ctl configtest
Syntax OK がでることを確認する


    

defaultのHost設定を削除してVirtual Hostを再登録する( /etc/apache2/sites-available のディレクトリの中で以下を実行)

#a2dissite  000-default.conf
#a2ensite   hoge.example.com.conf
#systemctl reload apache2
/etc/apache2/sites-enabled のディレクトリの000-default.conf が削除されてhoge.example.com.confが登録される。


ここまでの設定でクライアント側から http://hoge.example.com/hoge/をアクセスすると /home/hoge /public_html/index.htmlが表示される。
また、hoge以外のユーザ たとえば/home/taro/public_html/index.htmlをアクセスする場合は、ユーザ名の前 にチルダをつけて
http://hoge.example.com/~taro/でアクセスする。  ただし、userdirのモジュールをenableにしないと動かないかも
  a2enmod userdir 


もし、Forbidden You don't have permission to access this resource.が表示されたらユーザディレクトリのパーミッションを
 chmod 755 /home/taro などに変更するとアクセスできるようになる

3 rubyのCGIスクリプトを動かすための設定

  (上の2 (1)から(4)までの設定ができていることが前提)
 
 rubyをインストールしておく。
 
そこで/etc/apache2/conf-available下にcgi-enabled.confというファイルを作成する
<Directory "/home/*/public_html/">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl .py .rb
</Directory>
 内容はたったこれだけで、すべてのユーザのpublic_html/の下でcgiが動くようになる
このファイルを下記コマンドで登録、リロードすればOK
#a2enconf cgi-enabled.conf
#systemctl reload apache2




apacheを再起動したら

まずCGIスクリプトファイルを作成してみる
/home/hoge/public_html/tameshi.cgi 
#!/usr/bin/ruby -Ku
#ヘッダー部
puts "Content-Type: text/html"
puts   #ここでひとつ改行コードを送る
#body部
print <<"EOB"
<html>
        <head>
                <meta http-equiv="content-type" content="text/html; charset=utf8">
                <title>Ruby!</title>
        </head>
        <body>
                <h3>Hello</h3>
                <p>これは、おためしサンプルです。</p>
        </body>
</html>
EOB
  最初の-Ku のuは文字コードがUTF-8という意味、EUCのときは-Ks  SJISのときは-Ks

パーミッションを 755(すべて読み込みと実行可、変更・削除はオーナーのみ可)にする
$ chmod 755  tameshi.cgi
 

これでブラウザから http://サーバ名/~hoge/tameshi.cgiをアクセスすると実行されて表示される


4 BASIC認証によるアクセス制限をしたい。

例として /home/hoge/public_html/camera/下のアクセスをbasic認証するとします。
basic認証なので盗聴される可能性もる。SSLの設定をすればより強固になる。
次のファイルをアクセス制限したいディレクトリにおく。ファイル名の最初がドットなので作成後はls -a でファイルリストが出てくる。
パーミッションを 755(すべて読み込みと実行可、変更・削除はオーナーのみ可)にする
.htaccess
#SSLRequireSSL
AuthType Basic
AuthName "ユーザー名とパスワードを入れて下さい"
AuthUserFile /home/karappi/.htpasswd
require valid-user
 
パスワードファイルは上の例では/home/hoge/.htpasswdというファイルになる。
これは公開ディレクトリ以外に置くのが基本。

  上記2 (4) virtual hostの設定のところで   AllowOverride None というのがあるが
これを AllowOverride AuthConfigまたはAllowOverride Allにして再登録、apache2を再起動する。

AllowOverride All
 
アクセスできるユーザの追加

  htpasswd   -c  パスワードファイル  新規ユーザ  



  例の場合、でhogeさんを登録する場合、

   htpasswd -c   /home/hoge/.htpasswd  hoge

 となる。

  既にパスワードファイルがあり新規ユーザの追加の場合は、
  -cオプションはいらない。

5. apache2+certbot(==letsencrypt)でSSL化

certbotとpython3-certbot-apacheをインストール
apt-get install certbot python3-certbot-apache
 

設定ファイルのチェック
# apache2ctl configtest
# Syntax OK
Syntax OK がでることを確認する

ufwで設定したfirewallの確認
# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                 
80                         ALLOW       Anywhere                 
443                        ALLOW       Anywhere                 
22 (v6)                    ALLOW       Anywhere (v6)            
80 (v6)                    ALLOW       Anywhere (v6)            
443 (v6)                   ALLOW       Anywhere (v6)
#

SSL証明書の設定

# certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address or hit Enter to skip.
 (Enter 'c' to cancel): hoge@hogehoge.co.jp

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at:
https://letsencrypt.org/documents/LE-SA-v1.8-July-06-2026.pdf
You must agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.

Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: karappi.mydns.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Requesting a certificate for karappi.mydns.jp

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/karappi.mydns.jp/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/karappi.mydns.jp/privkey.pem
This certificate expires on 2026-11-21.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for karappi.mydns.jp to /etc/apache2/sites-available/karappi.mydns.jp-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://karappi.mydns.jp

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#

証明書の自動更新タイマーの確認
証明書の有効期限は90日間。certbot.timerというdaemonが1日に2回実行され、有効期限が30日以内に迫っている証明書を自 動更新してくれる。このcertbot.timeの動作確認は次のようにする。

# systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/usr/lib/systemd/system/certbot.timer; enabled; preset: enabled)
     Active: active (waiting) since Sun 2026-08-23 16:26:56 JST; 53min ago
 Invocation: f061bea03eb745a7b31e202e496df012
    Trigger: Mon 2026-08-24 06:22:52 JST; 13h left
   Triggers: ● certbot.service

 8月 23 16:26:56 kogera systemd[1]: Started certbot.timer - Run certbot twice daily.
#
 
更新のテストをドライランで実行できる

# certbot renew --dry-run
 

目次