zabbix3.0安装之PHP+Nginx篇

接上文zabbix安装之环境部署篇

1、加入启动项

网上各种php-fpm和nginx的启动脚本,如果你有兴趣去写,当然也好。其实,官方早已提供了,我就不费那个事了。

php-fpm的启动脚本在“/你的PHP安装目录/sapi/fpm/init.d.php-fpm”,我们只需要复制到init.d下即可;

cp /usr/local/src/php-5.6.22/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm   #php-fpm启动脚本

nginx启动脚本官方也有提供,不过我们要稍加修改,即可变为己用。

nginx wiki官方提供的脚本:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/,鉴于篇幅略长,你也可以直接下载我提供的修改好的,只要将注释的地方替换为你的路径即可:init.d.nginx

vim /etc/init.d/nginx 键入如下内容,:wq保存。  脚本如下:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx-1.8.1/conf/nginx.conf 
# pidfile: /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/local/nginx-1.8.1/sbin/nginx" #替换成自己的路径
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/usr/local/nginx-1.8.1/conf/nginx.conf" #同上
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
start() {
 [ -x $nginx ] || exit 5
 [ -f $NGINX_CONF_FILE ] || exit 6
 echo -n $"Starting $prog: "
 daemon $nginx -c $NGINX_CONF_FILE
 retval=$?
 echo
 [ $retval -eq 0 ] && touch $lockfile
 return $retval
}
 
stop() {
 echo -n $"Stopping $prog: "
 killproc $prog -QUIT
 retval=$?
 echo
 [ $retval -eq 0 ] && rm -f $lockfile
 return $retval
}
 
restart() {
 configtest || return $?
 stop
 sleep 1
 start
}
 
reload() {
 configtest || return $?
 echo -n $"Reloading $prog: "
 killproc $nginx -HUP
 RETVAL=$?
 echo
}
 
force_reload() {
 restart
}
 
configtest() {
 $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
 status $prog
}
 
rh_status_q() {
 rh_status >/dev/null 2>&1
}
 
case "$1" in
 start)
 rh_status_q && exit 0
 $1
 ;;
 stop)
 rh_status_q || exit 0
 $1
 ;;
 restart|configtest)
 $1
 ;;
 reload)
 rh_status_q || exit 7
 $1
 ;;
 force-reload)
 force_reload
 ;;
 status)
 rh_status
 ;;
 condrestart|try-restart)
 rh_status_q || exit 0
 ;;
 *)
 echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
 exit 2
esac

别忘了为脚本添加可执行权限:

chmod a+x /etc/init.d/php-fpm
chmod a+x /etc/init.d/nginx

可用参数:

/etc/init.d/php-fpm {start|stop|force-quit|restart|reload|status}
/etc/init.d/nginx {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}

vim /etc/rc.local 添加如下两行,实现开机自启动。

/etc/init.d/nginx start
/etc/init.d/php-fpm start

也可以直接加入系统服务:

chkconfig --add php-fpm | nginx
chkconfig --level php-fpm | nginx 2345 on

好了,至此,开机启动设置完成。reboot验证一下。
ps

 

2、PHP+Nginx

创建工作目录

mkdir /data/logs/nginx -p
mkdir /data/website/zabbix.opdev.me -p

vim /data/website/zabbix.opdev.me/phpinfo.php  键入:

 <?php
 phpinfo();
 ?>

:wq 保存退出

cp /usr/local/nginx-1.8.1/conf/nginx.conf /usr/local/nginx-1.8.1/conf/nginx.conf.bak
vim /usr/local/nginx-1.8.1/conf/nginx.conf   在http段加入如下内容:

server {
 listen 80;
 server_name zabbix.opdev.me;
 access_log /data/logs/nginx/zabbix.opdev.me.access.log main;
 index index.php index.html index.html;
 root /data/website/zabbix.opdev.me;

location /
 {
 try_files $uri $uri/ /index.php?$args;
 }

location ~ .*\.(php)?$
 {
 expires -1s;
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 include fastcgi_params;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_pass 127.0.0.1:9000;

}
 }

PS: 需要将log_format 段的注释取消掉,否则会有语法错误。

访问http://zabbix.opdev.me/phpinfo.php ,如果出现如下内容,说明nginx连接php成功了。nginx的各种优化,就仁者见仁吧。

phpinfo

zabbix3.0安装之环境部署篇

这两天为公司部署zabbix,用了一台闲置的Dell Power Edge,系统是全新安装的,所以基本环境都要部署,就记录一下过程。

zabbix需要MySQL和Web环境的支持,可选lamp或者lnmp,这里我选择了后者,所以要先部署Nginx、PHP、MySQL,MySQL的编译安装,前面已经单独写过了,我个人也比较不喜欢cmake的编译方式,这里就不再赘述了。好了,下面开工!

准备编译环境

1)更换yum源为阿里云镜像

 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
 yum makecache

2)设置时区和时间同步

 yum -y install ntpdate
 echo "00 4 * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1" >> /var/spool/cron/root

对zabbix来说,正确的时间尤为重要,是保证监控和警报及时的前提!切记!

3)安装各种依赖

yum install -y gcc gcc-c++ make pcre* openssl* cmake ncurses-devel gd-devel libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel

因为我的Centos是mini安装的,大部分依赖都没有装,如果你不确定,那么也安装一遍吧。

1、Nginx编译安装

我事先准备了程序包,所以直接解压开始。

 cd /usr/local/src/
 tar zxvf nginx-1.8.1.tar.gz
 cd nginx-1.8.1
 ./configure --prefix=/usr/local/nginx-1.8.1 --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre

nginx编译成功

如上图,编译成功,执行安装。

make && make install
 [root@web nginx-1.8.1]# /usr/local/nginx-1.8.1/sbin/nginx
 [root@web nginx-1.8.1]# curl -s http://localhost |grep nginx.com
 <a href="http://nginx.com/">nginx.com</a>.</p>

可以看到,nginx已经成功运行。至此,nginx先告一段落,等待PHP安装好后再配置nginx和php的连接。

/usr/local/nginx-1.8.1/sbin/nginx -s stop  #停止nginx
/usr/local/nginx-1.8.1/sbin/nginx -s reload  #重载nginx

2、PHP编译安装

tar zxvf php-5.6.22.tar.gz
 cd php-5.6.22

./configure --prefix=/usr/local/php-5.6.22 --with-config-file-path=/usr/local/php-5.6.22/etc --with-bz2 --with-curl --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr/local --enable-mbstring --enable-calendar --with-gettext --with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm --with-libdir=lib64 --enable-bcmath

php编辑成功

PS:我用的是64位的Centos,所以带上--with-libdir=lib64,如果是32位系统,忽略即可。如果你不明确该用哪些参数,请参照上面的。

执行安装:

make && make install

配置php.ini和php-fpm:

cp php.ini-production /usr/local/php-5.6.22/etc/php.ini
cp /usr/local/php-5.6.22/etc/php-fpm.conf.default /usr/local/php-5.6.22/etc/php-fpm.conf
 sed -i "s/;date.timezone =/date.timezone = Asia\/Shanghai/g" /usr/local/php/etc/php.ini
 sed -i "s#max_execution_time = 5#max_execution_time = 300#g" /usr/local/php/etc/php.ini
 sed -i "s#post_max_size = 8M#post_max_size = 32M#g" /usr/local/php/etc/php.ini
 sed -i "s#max_input_time = 60#max_input_time = 300#g" /usr/local/php/etc/php.ini
 sed -i "s#memory_limit = 128M#memory_limit = 128M#g" /usr/local/php/etc/php.ini
 sed -i "/;mbstring.func_overload = 0/ambstring.func_overload = 1\n" /usr/local/php/etc/php.ini
 sed -i "/;always_populate_raw_post_data = -1/aalways_populate_raw_post_data = -1\n" /usr/local/php/etc/php.ini
 #将配置写入php.ini,也可以手动编辑

3、MySQL编译安装

参照《编译安装MySQL 5.5》

4、Nginx+PHP

不出意外,做完上面这些,已经花了你大半天时间了,还是休息下吧。下一篇接着写nginx和php的连接,以及zabbix的安装和部署。

另起一篇,请看zabbix安装之PHP+Nginx篇

 

HttpGuard — 基于Web的高性能CC攻击防火墙

HttpGuard是基于openresty,以lua脚本语言开发的防cc攻击软件。而openresty是集成了高性能web服务器Nginx,以及一系列的Nginx模块,这其中最重要的,也是我们主要用到的nginx lua模块。HttpGuard基于nginx lua开发,继承了nginx高并发,高性能的特点,可以以非常小的性能损耗来防范大规模的cc攻击。
下面介绍HttpGuard防cc的一些特性。

  • 限制访客在一定时间内的请求次数
  • 向访客发送302转向响应头来识别是否是恶意用户,并阻止其再次访问
  • 向访客发送带有跳转功能的js代码来识别是否是恶意用户,并阻止其再次访问
  • 支持向访客发送带有验证码的页面,来进一步识别,以免误伤
  • 支持直接断开恶意访客的连接
  • 支持结合iptables来阻止恶意访客再次连接
  • 支持白名单功能
  • 支持根据统计特定端口的连接数来自动开启或关闭防cc模式

github项目地址:https://github.com/centos-bz/HttpGuard
联系作者: admin#centos.bz

下载地址:https://github.com/centos-bz/http-guard

安装方法
代码下载回来后,执行install.sh脚本开始安装。

使用方法
复制conf目录下的lua文件到/usr/local/nginx/conf下,在nginx.conf配置文件中的http代码段加入如下代码:

lua_shared_dict http_guard 10m;
init_by_lua_file 'conf/init.lua';
header_filter_by_lua_file 'conf/send_cookie.lua';
access_by_lua_file 'conf/http_guard.lua';

注:
1、一些初始参数可以在init.lua文件修改
2、修改lua文件后,需要重载配置文件,如/usr/local/nginx/sbin/nginx -s reload
3、此http-guard已经包含nginx,不需要再安装新的nginx
4、nginx会安装在/usr/local/nginx位置
5、如果你使用了CDN,可在config.lua设置realip header为cdn传过来的包含客户ip的请求头,否则拦截的IP会是你的CND地址,导致失效。