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 忘れずに!