最近在学习《中小型企业通用自动化运维架构》这门课程在安装zabbix 时默认web服务器是httpd,我主要是用nginx来作为web服务器,httpd 一窍不通,因为httpd默认也是以80端口来进行监听的,服务器上也有其他的项目都换成httpd也不太合适,所以就想着将zabbix 替换默认web服务器httpd为nginx。
替换思路 : zabbixweb服务是用php写的,httpd 只是一个web服务器。有了替换思路我们就进行下一步,我们首先找到php程序存放的目录。
记得我们在根据zabbix官方文档安装的时候有个地方是调整php时区的,我们打开那个文件 /etc/httpd/conf.d/zabbix.conf,根据路径来看不难 判断这个文件应该就是httpd配置文件,打开文件 根据Directory 可以判断/usr/share/zabbix为程序所在目录。
找到程序所在目录后,我们就着手配置nginx就好了,进入nginx的配置目录 /etc/nginx/conf.d/ 创建一个zabbix.conf 的文件。
编辑zabbix.conf为下面的内容
server { # 监听 8080端口 listen 8080; # 本机 server_name localhost; # 设置程序所在目录 root /usr/share/zabbix; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } # 设置下面几个目录 不允许外部访问 location ^~ /app { deny all; } location ^~ /conf { deny all; } location ^~ /local { deny all; } location ^~ /include { deny all; } error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # 配置nginx和php-fpm通信 # 我们使用端口的形式来进行通讯 location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
上面我们设置了nginx监听一个8080端口,并且设置nginx和php-fpm通过9000端口来进行通讯
首先我们启动php-fpm 和nginx
php-fpm -R nginx
下一步,我们访问服务器的8080端口,http://you_ip:8080 发现能访问但是有错误
Error connecting to database: No such file or directory
这个是我们程序连接数据库的时候连接失败了。我找到了两种解决方式
1、建立软连接
ln -s /var/lib/mysql/mysql.sock /tmp/
2、设置php监听mysql 默认的 socket 地址
# 编辑php的配置文件 vim /usr/local/php/etc/php.ini #设置监听mysql 默认的 socket 地址 mysqli.default_socket = /var/lib/mysql/mysql.sock #重启 php-fpm 使其生效 #因为我的php是源码安装的,没有配置其他,所以我们kill掉php-fpm进程重新启动下 killall php-fpm && php-fpm -R
然后刷新页面发现可以访问了。
到上面为止,我们就替换zabbix默认web服务器httpd为nginx。但是我们还没有结束,是的,还没有结束!!!!
我们登录后跳转到首页,右下角dashboard模块下 Status of Zabbix 有几个红色的异常(因为我的php是源码安装的,所以有问题,如果你没遇到,恭喜你,下面你就可以不看的)
1、date.timezone undefault => 没有设置php的默认时区
2、max_input_time 60
3、max_execution_time 30
4、php gd JPEG image support missing.
前三个是php配置问题,我们只需要编辑php.ini就好了
# 找到下面三个配置项改成下面的值就好了 max_input_time = 300 max_execution_time = 300 date.timezone = Asia/Shanghai
第四个是我们php gd扩展的问题,gd库已经安装了,但是不支持JPEG ,我们需要确认系统中是否有libjpeg
# 不管有没有,我们直接装就好了,已经有点话,不给你再装了 yum install -y libpng libpng-devel freetype-devel libjpeg libjpeg-devel
我们进入 我们安装时的php源码目录 进入/ext/gd 重新编译扩展
phpize ./configure --with-freetype-dir=/usr/local/freetype --with-png-dir=/usr/local/png \ --with-jpeg-dir=/usr/local/jpeg
然后编辑php.ini 添加扩展
extension=gd.so
到此应该基本没有什么问题了。
我php安装的时候用源码安装的,所以缺少很多的扩展,比如gettext (zabbix国际化) sockets 等,导致我编译了好多次,如果有遇到需要源码编译php的我在这里附上安装命令,如果不需要跳过就好
# 源码编译需要这些扩展的,最好全部装上,不然你后面需要的话得一遍遍的再装回来 yum install -y gcc gcc-c++ make autoconf libxml2 libxml2-devel curl curl-devel libpng libpng-devel freetype-devel libjpeg libjpeg-devel gd
编译php
./configure --prefix=/usr/local/php --bindir=/usr/bin --sbindir=/usr/bin/ --enable-fpm --enable-pcntl --enable-mbstring --enable-soap --enable-zip --enable-bcmath --enable-sockets --enable-ctype --with-config-file-path=/usr/local/php/etc --with-curl --with-mysqli --with-pdo-mysql --with-gettext --with-gd --with-libdir=lib64 --with-freetype-dir=/usr/local/freetype --with-png-dir=/usr/local/png --with-jpeg-dir=/usr/local/jpeg
到此就结束了,有点乱,还有点啰嗦,没办法,我只是一个小菜鸡,刚接触不久,今天编译php就编译了5、6遍,编译的头疼!!!