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