手记

zabbix 替换默认web服务器httpd为nginx

        最近在学习《中小型企业通用自动化运维架构》这门课程在安装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遍,编译的头疼!!!

3人推荐
随时随地看视频
慕课网APP