| 項目 | Apache | nginx |
|---|---|---|
| 登場 | 1995年頃 | 2004年 |
| 処理方式 | プロセス/スレッド型 | イベント駆動型 |
| 特徴 | 柔軟・設定豊富 | 高速・軽量・同時接続に強い |
| CGI(.cgiファイル) | 得意 | 苦手(別途設定が複雑) |
| 設定のしやすさ | 簡単 | やや難しい |
| Basic認証 | 簡単 | できるが設定が面倒 |
| 特徴 | 1リクエストごとにプロセス/スレッドを使う | 少数のプロセスで大量接続をさばく(イベント駆動) |
| 柔軟でカスタマイズ性が高い | 静的ファイル(画像・動画)配信がめちゃ速い | |
| 同時アクセスが増えると重くなりやすい | リバースプロキシが得意(裏で別サーバー動かす構成) |
■Apache 2 インストール
ホストにApache 2 をインストール
sudo apt install apache2 -y sudo systemctl enable apache2 sudo systemctl start apache2 sudo a2enmod cgi
以前Windowsでのcgiファイルは shift-JIS を使用していたが、Ubuntu Server は、UTF-8に変換するので nkf(Network Kanji Filter)をインストール
sudo apt update && sudo apt install nkf -y
基本設定 000-default.conf ファイルの作成
sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /mnt/data/docker/vafee-server/html
<Directory /mnt/data/docker/vafee-server/html>
Options +ExecCGI +Indexes +FollowSymLinks
AllowOverride All
Require all granted
AddHandler cgi-script .cgi
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
詳細設定 vafee2.conf ファイルの作成
sudo nano /etc/apache2/sites-enabled/vafee2.conf
<VirtualHost *:80>
ServerName vafee-lab.com
ServerAlias www.vafee-lab.com
ServerAlias ubuntu-sv.xxxxxxxx.ts.net
DocumentRoot /mnt/data/docker/vafee-server/html
ProxyPreserveHost On
# --- Vaultwarden ---
# /vault/ で始まるパスのみ 8080 へ転送(末尾スラッシュ必須)
ProxyPass /vault/ http://127.0.0.1:8080/vault/
ProxyPassReverse /vault/ http://127.0.0.1:8080/vault/
# --- Netdata ---
ProxyPass /netdata/ http://127.0.0.1:19999/
ProxyPassReverse /netdata/ http://127.0.0.1:19999/
# --- EPGStation ---
ProxyPass /epgstation/ http://127.0.0.1:8888/
ProxyPassReverse /epgstation/ http://127.0.0.1:8888/
# --- passmanager API ---
ProxyPass /passmanager/ http://127.0.0.1:8100/
ProxyPassReverse /passmanager/ http://127.0.0.1:8100/
# lounge Basic認証
<Location /vafee2/lounge/>
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /mnt/data/docker/vafee-server/conf/userpass
Require valid-user
</Location>
# iconsフォルダは認証不要・Apache直接配信
<Location /vafee2/lounge/icons/>
Require all granted
</Location>
ProxyPass /vafee2/lounge/icons/ !
ProxyPassReverse /vafee2/lounge/icons/ !
<Location /vafee2/lounge/lounge_bg.gif>
Require all granted
</Location>
ProxyPass /vafee2/lounge/lounge_bg.gif !
# bgフォルダは認証不要・Apache直接配信
<Location /vafee2/lounge/bg/>
Require all granted
</Location>
ProxyPass /vafee2/lounge/bg/ !
# メディアフォルダは認証不要・Apache直接配信
<Location /vafee2/lounge/jpg/>
Require all granted
</Location>
ProxyPass /vafee2/lounge/jpg/ !
<Location /vafee2/lounge/video/>
Require all granted
</Location>
ProxyPass /vafee2/lounge/video/ !
<Location /vafee2/lounge/music/>
Require all granted
</Location>
ProxyPass /vafee2/lounge/music/ !
# --- vafee2 lounge ---
# /api/ の独立ルールは不要(lounge の JS はすべて /vafee2/lounge/api/ を使用)
RequestHeader set X-Remote-User expr=%{REMOTE_USER}
ProxyPass /vafee2/lounge/ http://127.0.0.1:5000/
ProxyPassReverse /vafee2/lounge/ http://127.0.0.1:5000/
# --- 画像・動画ファイル配信 ---
ProxyPass /files/ http://127.0.0.1:5000/files/
ProxyPassReverse /files/ http://127.0.0.1:5000/files/
# --- 静的ファイル・CGI ---
<Directory /mnt/data/docker/vafee-server/html>
Options +ExecCGI +FollowSymLinks +Indexes
AddHandler cgi-script .cgi
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/vafee2_error.log
CustomLog ${APACHE_LOG_DIR}/vafee2_access.log combined
</VirtualHost>
Apache 2 起動
sudo systemctl start apache2
設定ファイルのバックアップ用シンボリックリンク(バックアップ対象に含める
sudo ln -s /etc/apache2/sites-available/000-default.conf \
/mnt/data/docker/vafee-server/apache-000-default.conf■メール発信ソフト msmtp インストール
msmtp インストール
sudo apt install msmtp msmtp-mta -y
設定ファイル msmtprc の作成
sudo nano /etc/msmtprc
defaults auth on tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile /var/log/msmtp.log account gmail host smtp.gmail.com port 587 from ◯◯@gmail.com user ◯◯@gmail.com password (Gmailアプリパスワード16文字) account default : gmail
Ubuntu 側のファイアウォール80番ポートを開ける
sudo ufw allow 80/tcp sudo ufw reload
■Windowsで使用していたcgiファイル等の修正
CGIプログラムと設定ファイル(.cgi, .pl, .dat)だけをShift-JIS /CRLF⇒UTF-8 / LF 一括変換
cd /mnt/data/docker/nginx/html sudo find . -name ".cgi" -o -name ".pl" -o -name "*.dat" | xargs -n 10 sudo nkf -w -Lu --overwrite
全ファイルの持ち主をユーザーに変え、読み書き権限を与える
sudo chown 33:33 . sudo chmod 777 .
htmlファイルのヘッダーを一個一個変更
<......" CONTENT="text/html; charset=SHIFT_JIS">
⇒
<......" CONTENT="text/html; charset=UTF-8">
cgiファイルは、Windows ActivePerlで、動かしていたので、Ubuntu Perl用に 先頭の一行のヘッダーを一個一個変更
#!/usr/local/bin/perl
⇒
#!/usr/bin/perl
<......" CONTENT="text/html; charset=SHIFT_JIS">
⇒
<......" CONTENT="text/html; charset=UTF-8">
cgiファイルは、Windows ActivePerlで、動かしていたので、Ubuntu Perl用に 先頭の一行のヘッダーを一個一個変更
#!/usr/local/bin/perl
⇒
#!/usr/bin/perl
掲示板フォルダ全体の権限を読み書き可能にする
sudo chmod -R 755 /mnt/data/docker/vafee-server/html/
windows と違って、 Ubuntu は、cgiファイルの修正を行うとコマンドを打たないと表示されなくなる
chmod 755 /mnt/data/docker/vafee-server/html/vafee2/view25/view25.cgi sed -i 's/\r//' /mnt/data/docker/vafee-server/html/vafee2/view25/view25.cgi docker exec -it vafee-apache perl -c /var/www/html/vafee2/view25/view25.cgi
これで、自宅内での掲示板が復活した。