前回 MovableType 5.2b2 を nginx + PSGI/Plack で動作させるところまで行きました。この方式では、以下の図のように動的コンテンツは Starman(PSGI/Plack)で、静的コンテンツは従来通り Apache で配信されます。
このとき、/mt
直下にある .cgi
ファイルは Starman で元気に動いているのですが、この前導入した「ほぼ指定日投稿プラグイン」を動かすことが出来ませんでした。
具体的には、プラグインの CGI へのアクセスが 500 エラーになってしまいます。
$ curl -L https://blog.delphinus.dev/mt/plugins/RunPeriodicTasks/mt-run-periodic-tasks.cgi # 500 エラー
プラグイン自体がこのような環境での動作を想定していないのが原因だとは思うのですが、悩んだ結果、この CGI だけは今まで通り Apache で動かすことにしました。修正した nginx の設定ファイルは以下の通りです。
user _www; worker_processes 1; events { worker_connections 1024; } http { upstream apache { server 127.0.0.1:10080; } upstream mt { server 127.0.0.1:18520; } gzip on; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; server { listen 80; server_name remora.cx; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location /mt/ { proxy_pass http://mt; break; } location /mt/plugins/ { proxy_pass http://apache; break; } location / { proxy_pass http://apache; break; } } server { listen 80; server_name blog.delphinus.dev; access_log /var/log/nginx/blog-access.log; error_log /var/log/nginx/blog-error.log; location /mt/ { proxy_pass http://mt; break; } location /mt/plugins/ { proxy_pass http://apache; break; } location / { proxy_pass http://apache; break; } } }
色を付けた部分で、/mt/plugins/
以下の処理を Apache に委譲しています。
これで解決はしたのですが、せっかく重たい処理を PSGI/Plack で処理できるようになったのに、一部だけ従来の CGI(正確には FastCGI)というのはかっこわるい……。何かいい手はないものでしょうか。