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