nginx&php7@FreeBSD 安装过程中的一些小问题的总结
发现最近用 nginx 的机会越来越多了…
今天有一台业务服务器的需求,所以就先大致的安装了一下。先装 FreeBSD ,然后再装 nginx ,再装 php7 和一些扩展 php71-extensions ,然后设置 nginx 支持 php ,使用的是 php-fpm ,按默认的配置
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
把其中的 /scripts 改成 $document_root ,然后启动 nginx 和 php-fpm ,怎么也不能成功,日志显示:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
,擦~翻呀找呀…看一堆老外说这说那,就是没什么头绪。后来突然想到,找不到执行脚本的路径,那我直接补全就好了嘛~那就把 /script 直接改成 /usr/local/www/nginx ,然后重启服务,再一试,果然好了。原来是默认的 nginx 配置文件中定义的 $document_root 的值不正确。改也很简单,直接把原配置中的 root html; 改成 root /usr/local/www/nginx ,然后把 fastcgi_param 改回 SCRIPT_FILENAME $document_root$fastcgi_script_name; ,再重启服务,果然没问题了。
然后就是配置 nginx 的日志了。nginx 的 access_log 支持使用变量。$time_iso8601 使用ISO 8601 格式的时间, 不过这个变量从 0.9.6 版本后才支持。可惜 error_log 不支持,也就无法实现原生的 error_log 的日志分割。设置方法如下:
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})"){ set $year $1; set $month $2; set $day $3; } access_log /var/log/nginx/access.$year$month$daylog;
这样就可以自动实现按天分割 access log 日志了。
如果设置了 nginx 的启动用户,这个时候看 error log ,就会看到类似 failed (13: Permission denied) while logging request 的出错信息。这个时间就需要把 /var/log/nginx 这个目录的权限给到 nginx 的启动用户,如:
chown -R nginx_user:nginx_user /var/log/nginx
再重启一下服务,就没这个报错了。
弄完了 nginx ,赶紧上个 phpinfo() 来测试一下吧,没问题,尝试查询一下 sql server ,结果报 could not find driver 的错误。我记得我是装了 freetds 的,也进行了配置的呀。用 tsql -C 测试了一下,没问题呀。然后在页面输出
print_r(PDO::getAvailableDrivers());
一看,哦没有 dblib 字样,原来是忘记 pdo 的 sql server 的驱动。这个就简单了。找到 /usr/ports/databases/php71-pdo_dblib ,然后 make install clean 。然后重启服务就 OK 了。