AppServer/

nginx&php7@FreeBSD 安装过程中的一些小问题的总结

发布
修订
未修订
字数
650
阅读
2 分钟

发现最近用 nginx 的机会越来越多了…
今天有一台业务服务器的需求,所以就先大致的安装了一下。先装 FreeBSD ,然后再装 nginx ,再装 php7 和一些扩展 php71-extensions ,然后设置 nginx 支持 php ,使用的是 php-fpm ,按默认的配置

bash
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 ,怎么也不能成功,日志显示:

bash
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 的日志分割。设置方法如下:

bash
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 的启动用户,如:

bash
chown -R nginx_user:nginx_user /var/log/nginx

再重启一下服务,就没这个报错了。

弄完了 nginx ,赶紧上个 phpinfo() 来测试一下吧,没问题,尝试查询一下 sql server ,结果报 could not find driver 的错误。我记得我是装了 freetds 的,也进行了配置的呀。用 tsql -C 测试了一下,没问题呀。然后在页面输出

php
print_r(PDO::getAvailableDrivers());

一看,哦没有 dblib 字样,原来是忘记 pdo 的 sql server 的驱动。这个就简单了。找到 /usr/ports/databases/php71-pdo_dblib ,然后 make install clean 。然后重启服务就 OK 了。

评论

正在载入评论…

留下评论

人机验证
四位数字,看不清可点击图片刷新

评论经审核后显示。

回到顶部 ↑