nginxでzoneminder (Zm)を動かす

ZoneMinderをNginxで運用する際のコツ

① PHPのタイムゾーンについて
  PHPのタイムゾーンが未設定の場合、
  エラーが表示されるだけになる

  /etc/php/7.0/fpm/php.ini
  の中の [DATE]セクションの
  ;date.timezone =
を探して、以下のようにする

  date.timezone = “Asia/Tokyo”

  そのあと、
  service php-7.0fpm restart
  これやらないと、うまくゆかない

② config について
  /etc/nginx/sites-enabled/default
  のserver{}セクションに以下を書く

location /zm {
alias '/usr/share/zoneminder/www';
index index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset UTF-8;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
location ~ \.(jpg|jpeg|gif|png|ico)$ {
access_log off;
expires 33d;
}
}

location /zm/cgi-bin/ {
gzip off;
root "/usr/lib/zoneminder/";
allow all;
try_files $uri $uri/ =404;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
location ~ /.*(\|\.sh|\.pl|\.cgi)$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi.conf;
}
}

※ apacheで動作させる場合、alias先と実際のディレクトリ
  構造が違っていても問題無いが、nginxの場合、合わせる
  必要がある模様(回避策があるかもしれないけどわからない(笑))
  なぜせら、cgiはaliasだとforbiddenとなり動作しないから
  root で指定しなければいけない

  このため、実体が”/usr/lib/zoneminder/cgi-bin”にあるものを
  location /zm/cgi-bin/ と設定できないので
  apacheと互換をもたせるなら、/usr/lib/zoneminder/cgi-binを
  /usr/lib/zoneminder/zm/cgi-bin にコピーして、上記のconfig
  で参照できるようにしなければならない
  

location /zm/api/ {
root "/usr/share/zoneminder/www/";
allow all;
rewrite ^/zm/api(.+)$ /zm/api/index.php?p=$1 last;
}

※ cgi-binと同じ理由で
  ”/usr/share/zoneminder/www/api”を
  ”/usr/share/zoneminder/www/zm/api”にコピーして、rootによる
  参照ができるようにしてあげる必要がある

  設定が終わったら service nginx restart 忘れずに!