お知らせ
現在サイトのリニューアル作業中のため、表示が崩れているページが存在することがあります。
adiaryをローカルで開発するための動かす環境構築のログ。
http://adiary.example.test/のようなサブドメイン付きURLとする
| Env | Ver | 
|---|---|
| OS | Ubuntu 24.04.3 LTS | 
| nginx | 1.26.1 | 
| apache2 | 2.4.58 (Ubuntu) | 
| adiary | 3.51a | 
この手順では手描きした内容をteeに書き直しており、正しくファイルが生やせるか見てないので注意。
/etc/nginx/nginx.confのhttpセクションのincludeの手前にapacheのupstream情報を追記する
upstream apache {
  server [::1]:8080;
}
nginx→apache2のリバプロ設定の作成
cat <<'EOF' | sudo tee /etc/nginx/conf.d/adiary.conf
server {
  listen        [::]:80;
  client_max_body_size 100M;
  server_name  adiary.example.local;
  access_log   /var/log/nginx/adiary.example.access.log;
  error_log    /var/log/nginx/adiary.example.error.log;
  location / {
    proxy_pass http://apache/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}
EOF
sudo service nginx restart
Apache2でadiaryをホスティングするバーチャルホスト設定の作成
cat <<'EOF' | sudo tee /etc/apache2/sites-enabled/001-adiary.conf
<VirtualHost *:8080>
      # internal use only domain
      ServerName adiary.example.local
      ServerAdmin webmaster@localhost
      DocumentRoot /var/www/html/sites/adiary
      # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
      # error, crit, alert, emerg.
      # It is also possible to configure the loglevel for particular
      # modules, e.g.
      #LogLevel info ssl:warn
      ErrorLog ${APACHE_LOG_DIR}/adiary-error.log
      CustomLog ${APACHE_LOG_DIR}/adiary-access.log combined
      # For most configuration files from conf-available/, which are
      # enabled or disabled at a global level, it is possible to
      # include a line for only one particular virtual host. For example the
      # following line enables the CGI configuration for this host only
      # after it has been globally disabled with "a2disconf".
      #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
EOF
/etc/apache2/apache2.confを開き<Directory /var/www/>のセクションを次のように書き換える
Options Indexes FollowSymLinks
AllowOverride All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi
Require all granted
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatchの行は標準のserve-cgi-bin.confからパクってきたのでOptions +ExecCGIだけでも動く可能性があるAllowOverride Allはindex.htmlを残したまま表示させないために.htaccessを書くのに使うmod_rewriteとmod_cgiを有効化し、apache2を再起動
sudo a2enmod rewrite
sudo a2enmod cgi
sudo service apache2 restart
/var/www/html/sites/adiaryを作成し、adiaryの動作環境一式を配置
chmod 777 -R /var/www/html/sites/adiary
sudo chown -R <your-user-name>:<your-user-name> /var/www/html/sites/adiary/
/var/www/html/sites/adiary/.htaccessにadiary用の.htaccessを書く
DirectoryIndex
RewriteEngine   On
# favicon
RewriteRule     ^favicon\.ico           /path/to/icon.png [L]
# 正規URLは通す
RewriteCond     %{REQUEST_FILENAME}     !-f
RewriteRule     ^(.*)                  adiary.cgi/$1   [L]
結論から書くとnginx + fcgiwrapだとtry_filesの仕様的にadiaryが行うパス解析が上手く行かずに正常に動作しないためだ。
元々ModRewrite前提のCGIとして設計されており、個人的なユースケースがCGIとしての動作であることから、Apacheで動かすことにした。
adiaryの作者がcgiラッパーを作っているため、これを使えばnginxでも動かせそうだが、adiary専用のデーモンを起動するのもなんか嫌というのも理由の一つとしてある。
何より現在このブログが動作している環境が、さくらのレンタルサーバーであり、構成的にnginx + Apacheであるため、この構成を作ることに興味があったというのもあるし、現状のローカル環境ではnginxをフロントに立たせて後ろで様々なものを動かしている都合で、フロントはnginxで捌いた方が管理がしやすいのもある。