LNMP 笔记

本贴最后更新于 693 天前,其中的信息可能已经物是人非

一、nginx安装

  1. 安装 pcre,目的是让 nginx 能用 rewrite 模块(uri 重写)。

sudo yum install pcre-devel –y

  1. 安装 openssl-devel。

sudo yum install -y openssl openssl-devel,

Nginx 在 使用 HTTPS 服务 的 时候 要用 到此 模块, 如果不 安装 openssl 相关 包, 安装 Nginx 的 过程 中会 报错。

  1. 下载,wget -q http://nginx.org/download/nginx-1.10.0.tar.gz

  2. sudo useradd nginx -s /sbin/nologin -M

  3. 解压,tar xf nginx-1.10.0.tar.gz。

  4. sudo ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.10.0/ --with-http_stub_status_module --with-http_ssl_module

  5. sudo make

  6. sudo makge install

  7. sudo ln -s /application/nginx-1.10.0 nginx

  8. sudo ./nginx –t(启动前检查语法错误)。

  9. sudo ./nginx

  10. netstat -lnt|grep 80(查看 80 端口是否开启)

  11. curl 192.168.179.128

  12. 宿主主机浏览器地址栏输入 http://192.168.179.128/,nginx 的 HTML 目录既是 nginx 的默认站点,默认是 index.html 页面,如有中文乱码,在之间加入

  13. ./nginx –t 如下说明语法正确。

png

16、./nginx -s reload 平滑重新加载配置文件、不影响用户访问,因为 nginx 启动时已经把配置文件加载到内存中,配置文件改了需要重新加载。

17、ps -ef|grep nginx 检查 nginx 重新加载的情况。

png

18、ps -ef|grep 80 检查 80 端口

png

19、测试域名站点的访问结果,Linux 下

echo "192.168.179.128 ,[www.etiantian.org">>/etc/hosts]

20、在没有正式的 dns 解析下,不要忘了在访问客户端做 hosts 解析,windows 如下

C:\Windows\System32\drivers\etc\hosts 文件加入 192.168.179.128 www.etiantian.org

也可以配一个 ip 对应多个域名,不同域名用空格隔开。

21、配置好后再好再 dos 提示符下检查下解析结果

www.etiantian.org 如下

png

22、查看域名解析过程 dig www.etiantian.org +trace,如下

png

23、nginx.conf 配置文件由 main、events、http 组成,每部分又{}括起来,http 下可以有一个或多个 server,一个 server 下可以有一个或多个 location,一个 server 代表一个域名虚拟主机站点。

24、基于端口的虚拟主机配置,即把上述配置的 server 的默认 80 端口改成别的端口,一半端口取值是 1024—65535,也可以不是这个范围内的端口,比如可改成 81、82 等等,此时端口不是默认的 80,那么在浏览器访问时必须在域名后加端口号。

25、基于 ip 的的虚拟主机,那么每个虚拟主机拥有不同的 ip,可以在同一个网卡上增加多个 ip,如下临时在 eth0 上增加的 ip。

sudo ip addr add 192.168.179.129/24 dev eth0

sudo ip addr add 192.168.179.130/24 dev eth0

26、然后把虚拟机中的 server_name 改成 ip 即可,listen 也加上 ip 即可。

27、配置或改完 nginx 的配置文件后,检查配置文件是否正确。/nginx –t;

curl –I 域名 看看 http 状态是否 ok;wget 域名 看看主机解析 http 发送、接收是否正确完成。

28、sed -n '10,21p' nginx.conf 表示打印配置文件 nginx.conf 的 10 到 21 行。

28、检查编译安装时的编译参数设置

sudo ./nginx –V

29、配置 nginx 的状态信息,单独配置如下 include extra/status.conf

server{

listen 80;

server_name status.etiantian.org;

location / {

stub_status on;

access_log off;

}

}

不过这样要单独配域名,要设置 hosts 解析,个人觉得最好在某个 server 虚拟机里配比较好,如下:

location /nginx_status{

stub_status on;

access_log off;

####allow 192.168.179.0/24;

####deny al;

}

然后浏览器里 http://www.etiantian.org/nginx_status 查看状态信息。

png

注释:Active connections: 2 #<== 表示 Nginx 正 处理 的 活动 连接 数 有 2 个。

30、日志部分

31、location 部分用于匹配用户请求的 URI。

32、location 匹配优先顺序

png

png

33、rewrite

34、nginx 访问认证,首先安装 sudo yum install httpd –y

二、MySQL的安装与配置

35、MySQL 下载地址 http://mirrors.sohu.com/mysql/MySQL-5.5/

创建 MySQL 组和用户

groupadd MySQL

useradd -s /sbin/ nologin -g MySQL -M MySQL

36、MySQL 安装,下载完解压后

/bin/ cp support- files/ my- small. cnf /etc/ my. cnf

./mysql_install_db --basedir=/application/mysql-5.5.48-linux2.6-x86_64 --datadir=/application/mysql-5.5.48-linux2.6-x86_64/data --user=mysql

改启动文件的默认安装路径

sed -i 's#/usr/local/mysql#/application/mysql-5.5.48-linux2.6-x86_64#g' mysql.server

或是 cp support- files/ mysql. server /etc/ init. d/ mysqld

然后 sed -i 's#/usr/local/mysql#/application/mysql-5.5.48-linux2.6-x86_64#g' mysqld

启动 MySQL ./ mysql.server start

检查 MySQL 是否启动 netstat -lntup|grep mysqld

配置开启自起 chkconfig --add mysqld

检查自起配置 chkconfig --list mysqld

也可以把 MySQL 的启动命令放入/etc/rc.local 里进行开机自起。

配置 MySQL 的全局路径

永久性添加

echo ' export PATH=/application/mysql-5.5.48-linux2.6-x86_64/bin:$PATH'>>/etc/profile

临时性添加

export PATH=/application/mysql-5.5.48-linux2.6-x86_64/bin:$PATH

使添加生效

source /etc/profile

这样就可以在任何地方执行 MySQL 来管理 MySQL 数据库。

37、登录 MySQL 直接敲 MySQL 就进入数据库了,而且还是 root 身份。

查看数据库 show databases;(不要忘了分号)

root 用户默认是没有密码的,设置密码如下

mysqladmin -u root password 'ppz2323'

新的登录方式为

MySQL -uroot –p

清理无用的用户

select user,host from mysql.user;

png

drop user "root"@"::1";

drop user ""@"localhost";

drop user ""@"ppzcentos1";

38、fastcgi,cgi 即通用网关接口,fastcgi 是 nginx 与后端服务器通信的工具。

三、PHP环境的安装配置

39、PHP 环境的安装配置,首先检查相关 Lib 包是否已安装

rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel

rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

如果没有就安装

yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel –y

执行完上述命令发现 libiconv-devel 没有安装,因为默认 yum 里没有 libiconv-devel 此包,后面会编译安装。

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz&&tar zxf libiconv-1.14.tar.gz

&&cd libiconv-1.14&&sudo ./configure --prefix=/usr/local/libconv&&make&&make install

40、安装 libmcrypt 库

首先安装第三方 yum 源

sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

用 yum 安装

yum -y install libmcrypt-devel

41、安装 mhash 加密 扩展 库

yum -y install mhash

42、安装 mcrypt 加密 扩展 库

sudo yum -y install mcrypt

44、开始 安装 PHP( FastCGI 方式) 服务

wget http://111.12.107.20/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/am1.php.net/distributions/php-5.6.21.tar.gz

tar -zxvf php-5.6.21.tar.gz

别忘了建安装目录/application/php-5.6.21\,否则会报错。

vi /etc/ld.so.conf

加入 /application/mysql-5.5.48-linux2.6-x86_64/lib 即 libmysqlclient.so 所在的目录

sudo ./configure \

--prefix=/application/php-5.6.21 \

--with-mysql=/application/mysql-5.5.48-linux2.6-x86_64 \

--with-iconv-dir=/usr/local/libconv \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--disable-rpath \

--enable-safe-mode \

--enable-bcmath \

--enable-shmop \

--enable-sysvsem \

--enable-inline-optimization \

--with-curl \

--with-curlwrappers \

--enable-mbregex \

--enable-fpm \

--enable-mbstring \

--with-mcrypt \

--with-gd \

--enable-gd-native-ttf \

--with-openssl \

--with-mhash \

--enable-pcntl \

--enable-sockets \

--with-xmlrpc \

--enable-zip \

--enable-soap \

--enable-short-tags \

--enable-zend-multibyte \

--enable-static \

--with-xsl \

--with-fpm-user=nginx \

--with-fpm-group=nginx \

--enable-ftp

ln -s /application/mysql-5.5.48-linux2.6-x86_64/lib/libmysqlclient.so.18 /usr/lib64/

touch ext/phar/phar.phar

sudo make

sudo make install

45、配置 PHP 引擎配置文件 php.ini

把解压后的 php.ini-production 文件拷贝到安装目录。

cp /home/ppzCentosLinux/tools/php-5.6.21/php.ini-production /application/php-5.6.21/lib/php.ini

46、配置 PHP 服务(fastcgi 服务方式)的配置文件 php-fpm.conf

cd /home/ppzCentosLinux/php/etc

sudo cp php-fpm.conf.default php-fpm.conf

47、启动 PHP 服务

sudo ./php-fpm

48、卸载 PHP

rpm -qa | grep PHP

.按依赖顺序进行删除

rpm -e php-fpm-5.3.3-22.el6.x86_64

rpm-e php-pdo-5.3.3-22.el6.x86_64

rpm -e php-pear-1.9.4-4.el6.noarch

rpm-e php-cli-5.3.3-22.el6.x86_64

rpm -e php-5.3.3-22.el6.x86_64

rpm-e php-xml-5.3.3-22.el6.x86_64

rpm -e php-gd-5.3.3-22.el6.x86_64

rpm-e php-common-5.3.3-22.el6.x86_64

然后删除--prefix=/application/php-5.6.21 \指定的安装目录。

49、配置 nginx 支持 PHP 程序请求访问。

55 location ~ .*.(php|php5)$ {

56 root html/blog;

57 fastcgi_pass 127.0.0.1:9000;

58 fastcgi_index index.php;

59 include fastcgi.conf;

60 }

注意在 nginx 配置文件修改后必须检查语法,否则重启有错误会导致 nginx 不可用,影响用户体验。

50、在 html/blog 目录创建 index.php 文件

echo "">index.php

51、针对 nginx 访问 php,php 链接 MySQL 的测试

//$link_id=mysql_connect('主机名','用户名','密码');

$link_id=mysql_connect('localhost','root','ppz2323') or mysql_error();

if($link_id){

echo "mysql 链接成功!!!!!!";

}else{

echo mysql_error();

}

//这是 PHP 单行注释

/这是 PHP 多行注释/

?>

浏览器输入 http://blog.etiantian.org/php_mysql.php 进行测试。

四、部署一个blog程序服务

· 开源博客程序 workpress,workpress 是个单用户个人博客。

· workpress 博客程序的搭建准备。

· MySQL 数据库的配置准备、登录 MySQL,操作如下:

png

创建一个数据库名字叫 wordpress, create database wordpress;

png

查看数据库是否创建成功,show databases like 'wordpress';

png

创建一个专用于 blog 的 wordpress 用户 grant all on wordpress.* to wordpress@'localhost' identified by 'ppz2323';

png

刷新权限、使得生成的用户生效。flush privileges;

png

查看用户对应的权限 show grants for wordpress@'localhost';

png

查看数据库里创建的 wordpress 用户 select user,host from mysql.user;

png

意思是指允许本机通过 wordpress 访问数据库。

创建用户并赋予角色的时候要注意:

#grant all on wordpress.* to wordpress@' 10. 0. 0.%' identified by '123456'; 10. 0. 0.% 为 客户 端 地址 段。

退出 quit

· nginx 及 PHP 环境配置准备

打开 nginx.conf 在 blog 虚拟机里补充一个首页文件 index.php

检查语法,重新加载 nginx ,./nginx –t ./nginx -s reload;

下载 cd /application/nginx-1.10.0/html/blog

wget https://cn.wordpress.org/wordpress-4.5.1-zh_CN.tar.gz

解压 tar -zxvf wordpress-4.5.1-zh_CN.tar.gz

删除无用文件 rm -f index.html php_mysql.php

移动 wordpress 下的文件到 blog 根目录 mv wordpress/* .

备份/bin/mv wordpress-4.5.1-zh_CN.tar.gz /home/ppzCentosLinux/tools/

授权 nginx 及 PHP 服务访问 blog 站点目录,此授权不是非常安全,是临时的办法,更规范的做法见后文的 lnmp 优化部分。

  1. 开始安装 blog 博客程序,采用界面安装,浏览器输入 http://blog.etiantian.org/

自动跳到 http://blog.etiantian.org/wp-admin/setup-config.php 安装配置界面。

png

阅读后点击”现在开始“按钮

png

填好后单击提交按钮。

png

填写用户名、密码、邮箱等等

ppz_wf/pw

然后接着登录博客,如下图

png

点击写文章,然后点击右上角的发布按钮即可发布。

png

至此 lnmp 及博客搭建完成,使用细节有待自己挖掘。

  1. 实现 wordpress 博客程序静态化。

在管理后台点击设置-固定链接-自定义里输入/archives/%post_%20id%.html 最后点保存更改,接着在 nginx 配置文件 blog 虚拟机中添加如下代码。

location / {

if (-f $request_filename/index.html){

rewrite (.*) $1/index.html break;

}

if (-f $request_filename/index.php){

rewrite (.*) $1/index.php;

}

if (!-f $request_filename){

            rewrite (.*) /index.php;

}

}

然后检测,重新加载。浏览器里输入 http://blog.etiantian.org/archives/8.html

可以访问了。

  1. 有关使用 php5.5 版本的说明。

配置编译参数有区别,其他运维方面的都一样,之前用低版本的有些警告,不过也顺利安装。最后按下面的参数重新编码安装了一次,关闭 pkill php-fpm,重启 ./php-fpm,访问正常。

./configure \

--prefix=/application/php-5.6.21 \

--with-mysql=/application/mysql-5.5.48-linux2.6-x86_64/ \

--with-config-file-path=/application/php-5.6.21/etc/ \

--with-pdo-mysql=mysqlnd \

--with-iconv-dir=/usr/local/libconv/ \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--disable-rpath \

--enable-bcmath \

--enable-shmop \

--enable-sysvsem \

--enable-inline-optimization \

--with-curl \

--enable-mbregex \

--enable-fpm \

--enable-mbstring \

--with-mcrypt \

--with-gd \

--enable-gd-native-ttf \

--with-openssl \

--with-mhash \

--enable-pcntl \

--enable-sockets \

--with-xmlrpc \

--enable-soap \

--enable-short-tags \

--enable-static \

--with-xsl \

--with-fpm-user=nginx \

--with-fpm-group=nginx \

--enable-ftp \

--enable-opcache=no

注意:grep -n WP_DEBUG /application/nginx-1.8.1/html/blog/wp-config.php

define('WP_DEBUG', true);开发环境建议开启 bug 调试

五、PHP服务器缓存加速优化实践

  1. 就是把 PHP 引擎解析、编译后的产生的操作码文件缓存(放在共享内存里)起来,待在指定时间内有同样文件被访问时,直接从缓存里获取,以提高响应速度。

  2. 客户端的 PHP 程序访问-nginx-nginx 根据扩展名过滤规则传递给-解析 PHP 的 fcgi(php-fpm)进程-php-fpm 进程调用 PHP 解析器读取站点磁盘上的 PHP 文件并加载到内存中-php 解析器将 PHP 程序编译成为 opcode 文件让后缓存起来,下次直接从缓存读取。

  3. PHP 缓存加速器软件种类及选择建议,目前建议选择 XCache,速度快、稳定、社区活跃。

设置环境变量:

echo 'export LC_ALL=C'>>/etc/profile 解决后面 perl 程序编码问题。

安装 perl 相关软件依赖:

yum install perl-devel –y 解决后面安装 ImageMagick 时报错。

  1. 安装 XCache

wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2&&tar%20xf%20xcache-3.2.0.tar.bz2

cd xcache-3.2.0

/application/php-5.6.21/bin/phpize

./configure --enable-xcache --with-php-config=/application/php-5.6.21/bin/php-config

make

make install

  1. 安装数据库缓存及其他 PHP 扩展插件。

Memcached 是临时缓存经常被读取的数据库查询结果在内存中,下次直接从缓存中获取。

png

安装:分为客户端和服务端

先装客户端

wget -q http://pecl.php.net/get/memcache-2.2.7.tgz&&tar%20zxf%20memcache-2.2.7.tgz&&cd%20memcache-2.2.7

/application/php-5.6.21/bin/phpize

./configure --enable-memcache --with-php-config=/application/php-5.6.21/bin/php-config

make

make install

PDO_MYSQL 扩展插件安装,方式有两种,PHP 参数安装--with-pdo-mysql=mysqlnd 和插件安装,发现参数安装没装上,在这采用插件安装

wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

tar -xf PDO_MYSQL-1.0.2.tgz

cd PDO_MYSQL-1.0.2

/application/php-5.6.21/bin/phpize

在编译时需要 MySQL 的头的文件,默认搜索找不到头文件的位置,需要建立个软连接

ln -s /application/mysql-5.5.48-linux2.6-x86_64/include/* /usr/local/include/

./configure --with-php-config=/application/php-5.6.21/bin/php-config --with-pdo-mysql=/application/mysql-5.5.48-linux2.6-x86_64

Make

Make install

ls -l /application/php-5.6.21/lib/php/extensions/no-debug-non-zts-20131226/

有 pdo_mysql.so 说明安装成功。

  1. 安装 ImageMagick 图像软件。

wget http://down1.chinaunix.net/distfiles/ImageMagick-6.7.9-9.tar.xz

tar -xf ImageMagick-6.7.9-9.tar.xz

cd ImageMagick-6.7.9-9

./configure

Make

Make install

  1. 安装 imagick

wget http://pecl.php.net/get/imagick-3.4.2.tgz

cd imagick-3.4.2

/application/php-5.6.21/bin/phpize

./configure --with-php-config=/application/php-5.6.21/bin/php-config

Make

Make install

ls -l /application/php-5.6.21/lib/php/extensions/no-debug-non-zts-20131226/

有 imagick.so 说明安装成功

  1. 配置 Memcache/PDO_MYSQL/imagick 模块生效

修改 php.ini 配置文件

sed -i 's#; extension_dir = "./"#extension_dir = "/application/php-5.6.21/lib/php/extensions/no-debug-non-zts-20131226/"#g' php.ini

VIM php.ini 最后加入

extension = memcache.so

extension = imagick.so

注意,不需要加 pdo,5.3 后自带了。

关闭 PHP

Pkill php-fpm

重启 PHP

./ php-fpm

  1. 检查相关配置模块是否生效

登录 http://blog.etiantian.org/view_info.php

搜索 memcache、imagick、pdo_mysql 是否都有了。

  1. 配置 XCache 模块生效,修改解压目录下的 xcache.ini 文件

png

然后把 xcache.ini 追加到 php.ini 文件末尾,用 md5sum 生成密码,改 php.ini 里的 XCache 后台管理密码,如下

png

重启 php,浏览器框输入 http://blog.etiantian.org/xadmin/cacher/

  1. 可用 压力 测试 软件 webbench、 loadruner。

六、企业级nginx Web优化

  1. 隐藏 nginx 软件版本号,因为漏洞都是针对某一个版本的,查看版本最直接的办法是 curl -I 192.168.179.128,如下

HTTP/1.1 200 OK

Server: nginx/1.10.0

Date: Thu, 05 May 2016 01:04:39 GMT

Content-Type: text/plain

Connection: keep-alive

修改 nginx.conf 在 http 标签下增加 server_tokens off;

检查语法、重新加载、curl -I 192.168.179.128 版本号不再了。

HTTP/1.1 200 OK

Server: nginx

Date: Thu, 05 May 2016 02:18:45 GMT

Content-Type: text/plain

Connection: keep-alive

  1. 更改源码隐藏 nginx 软件名称及版本号,这只能通过改源码来实现

第一个文件

png

修改第二个文件 ngx_http_header_filter_module.c

png

修改第三个文件 ngx_http_special_response.c

png

然后重新编译 nginx、安装、配置、启动服务。

  1. 更改 nginx 服务的默认用户 grep '#user' nginx.conf.default

#user nobody;

更改 nginx 默认用户有两种方式:

直接改配置文件、但此用户必须存在如下

user nginx nginx;

编译时指定组和用户

./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.3 --with-http_stub_status_module --with-http_ssl_module

查看 nginx 服务进程的对应用户 ps -ef|grep nginx|grep -v grep

root 3605 1 0 May04 ? 00:00:00 nginx: master process ./nginx

nginx 5461 5460 0 08:16 ? 00:00:06 php-fpm: pool www

nginx 5462 5460 0 08:16 ? 00:00:04 php-fpm: pool www

nginx 5535 5460 0 08:40 ? 00:00:04 php-fpm: pool www

nginx 6578 3605 0 10:12 ? 00:00:00 nginx: worker process

当然 nginx 的主进程还是由 root 用户运行的,后面会有涉及这方面的优化。

  1. 更具参数优化 nginx 服务性能。

优化 nginx 服务的 worker 进程个数,即配置文件里的 worker_processe 1;

如果起初不知道网站用户数量,可以把 worker_processe 设置为 CPU 核数,高流量高并发的场合可以考虑将进程数设置为 CPU 核数*2,但也要考虑硬盘存储的数据及系统的负载有关。

查看 CPU 核数

grep processor /proc/cpuinfo|wc –l

grep -c processor /proc/cpuinfo|wc –l

查看 CPU 总颗数

grep 'physical id' /proc/cpuinfo|sort|uniq|wc –l

top 命令后按 1,即可显示 CPU 核数。

png

修改成 CPU 核数后,检查语法,重启。

然后查看 nginx 进程数 ps -ef|grep nginx|grep -v grep

不算 master 进程,主进程是负责调度和管理 worker 进程。

优化捆绑不同的 nginx 进程到不同的 CPU 上

worker_cpu_affinity 0001 0010 0100 1000;

后面参数是 CPU 掩码。

不过作用不大,一半不需要绑定。

Nginx 事件处理模型优化(网络 I/O 模型),不同的操作系统是不一样的,要根据系统类型选择不同的事件模型,可供选择的有:

use[ kqueue| rtsig| epoll|/ dev/ poll| select| poll]

CentOS 用 epoll

不过更具官方文档的建议,可不指定事件处理模型,nginx 会自动选择最佳事件处理模型。

调整 nginx 单个进程允许的客户端最大链接数,需要注意的是这个最大链接数受系统的文件最大打开数限制,要设置相应的文件打开数,这个最大链接数才生效,即最大并发连接数,nginx 总的最大并发连接数 =worker 数量*worker_connections,

Nginx 的 http 标签处配置 worker_rlimit_nofile 65535;

查看文件描述符大小 ulimit –n

临时修改,退出终端就会失效 ulimit -SHn 65535

永久性修改文件描述符限制,需要重新登陆 VIM /etc/security/limits.conf

可修改此数据,即每个用户能打开的文件个数 65535

修改内核参数,无效重启系统

echo 'fs.file-max=102400'>>/etc/sysctl.conf 表示所有用户所有进程打开的最大文件数目

使修改生效

sysctl -p


5、域名长度设置相关参数,位置为 http 标签内

server_names_hash_max_size 512; 默认 512kb

server_names_hash_bucket_size 32|64|128; 默认。

6、开启高校文件传输模式 sendfile on;位置可以是 http、server、location、if in location

7、tcp_nopush on;位置 http、server、location

8、nginx 链接超时参数 keepalive_timeout 60;单位秒,默认 75 秒 位置 http、server、location

9、tcp_nodelay on;提高 I/O 性能,位置 http、server、location,不是适用于每次发送很少字节数的场景,因为 Linux 内核要等待组成一个数据包在发送。

10、client_header_timeout 15;单位秒 15 秒时经验值,默认 60 秒,位置 http、server,

读取客户端请求头的超时时间,即在这个时间内客户端没有发送完整个 header 数据,就返回超时 408

11、设置参数: client_body_timeout 15; 用于设置读取客户端请求主体的超时时间,默认值是 60 秒。

  1. 设置参数: send_timeout 25; 用于指定相应客户端的超时时间,默认为 60 秒,指 的是两个链接活动之间的间隔时间,超过这个时间客户端再没有任何收到任何请求数据返回将关闭连接。

  2. 上传文件大小限制,http 请求主体大小限制 client_max_body_size 8m; 默认 1m

位置 http、server、location。

  1. fastcgi 常见参数的 nginx 配置

###fasecgi 配置

fastcgi_connect_timeout 240;

fastcgi_send_timeout 240;

fastcgi_read_timeout 240;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;

fastcgi_cache ngx_fcgi_cache;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

fastcgi_cache_min_uses 1;

fastcgi_cache_use_stale error timeout invalid_header http_500;

fastcgi_cache_key http://hostrequest_uri;

  1. nginx gzip 压缩,占用宽带少,速度快,提升用户体验,纯文本文件压缩比例高,如 HTML、js、CSS、XML、shtml 等格式的文件,但要压缩的文件必须大于 1kb,否则越压缩越大。图片、视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的,如果再压缩很可能不会减小或减小很少,或者有可能增大,反而还以为压缩而浪费 CPU、内存资源。

  2. 压缩参数配置说明

### 开启压缩

gzip on;

gzip_min_length 1k;

gzip_buffers 4 32k;

gzip_http_version 1.1;

gzip_comp_level 5;

gzip_types text/html text/css text/xml application/javascript;

gzip_vary on;

  1. 重要的网站前端调试工具介绍

  2. 配置 nginx expires 缓存实现性能优化,当用户第一次访问时会把网页内容存在用户浏览器本地,等下次访问时就从本地获取,直到本地内容过期或被删除,expires 就是过期时间。

  3. 在网站的开发和运营中,视频、图片、CSS、JS 等网站元素的更改机会较少,特别是图片,这时可以将图片设置在客户浏览器本地缓存 365 天或 3650 天,而将 CSS、JS、HTML 等代码缓存 10~30 天

### 设置图片缓存

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

{ ### 设置过期时间为 10 年

expires 3650d;

}

### 设置 js、CSS 缓存

location ~ .*.(js|css)$

{

expires 30d;

}

  1. 缓存带来的问题,改版升级问题,缩短缓存过期时间、在服务器端将缓存的对象改名(代码里)。

  2. 企业网站不希望缓存的,例如网站统计流量的 js 代码。

  3. Nginx 访问日志切割。

  4. 不记录不需要的日志,图片、js、cs 的访问日志,减少磁盘空间。

  5. Nginx 配置里禁止解析上传目录下的 PHP、shell、perl、python 防止黑客上传可执行 文件,此配置必须在 nginx 处理 PHP 配置前面。

  6. nginx 配置禁止访问指定目录下的所有文件。

png

  1. 禁止访问并返回指定状态吗,如下。

  2. location /admin/ { return 404; }

  3. location /templates/ { return 403; }

  4. 限制网站来源 IP 访问。

png

  1. 配置 nginx,禁止非法域名解析访问企业网站

png

png

  1. nginx 图片及目录防盗链接解决方案。

png

  1. 对 IDC 及 CDN 带宽做监控报警。

  2. 作为高级运维或运维经理,每天上班的重要任务,就是经常查看网站流量图,关注流量变化,关注异常流量。

  3. 对访问日志做分析,迅速定位异常流量,并且和公司推广等保持较好的沟通,以便调度带宽和服务器资源,确保网站正常的访问体验。

  4. 防盗链基本原理,根据 http referer 防盗链。

png

根据 cookie 防盗链,因为有些特殊的业务数据是不向服务器提供 referer header。
png
png
Nginx Web 服务实现防盗链,

location ~* .(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$

{

valid_referers none blocked *.etiantian.org etiantian.org;

if($invalid_referer)

{

rewrite ^/ http://www.etiantian.org/img/nolink.jpg

}

}

也可以用 ngx_ http_ accesskey_ module 模块设置防盗链接。

从业务角度实现防盗链接,如图片上加水印。

http 请求状态码:
httpstatusjpg

  1. nginx 防爬虫优化配置。

  2. 使用 cdn 做网站内容加速。

Mysql****数据库企业级应用实践

  1. 多配置文件、多启动程序的部署方案

  2. 安装 MySQL 依赖包

rpm -qa ncurses-devel libaio-devel

yum install ncurses-devel libaio-devel –y

  1. 安装编译 MySQL 所需要的软件

wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz

tar -xf cmake-3.5.2.tar.gz

cd cmake-3.5.2

./configure

Gmake

gmake install

which cmake 查看可执行文件的位置

  1. 创立 MySQL 用户账户,用 root 身份登陆 Linux

Useradd –s /sbin/nologin –M MySQL 默认会创建与 MySQL 用户同名的组。

id MySQL 查看 MySQL 用户和组。

  1. 安装 MySQL 部分略过

  2. 创建 MySQL 多实例的数据文件目录。

mkdir -p /data/{3307,3308}/data

  1. 创建 MySQL 的多实例配置文件,MySQL 默认为用户提供多个配置模板

ls -l support-files/my*.cnf

-rw-r--r-- 1 7161 wheel 4691 Jan 15 11:58 support-files/my-huge.cnf

-rw-r--r-- 1 7161 wheel 19759 Jan 15 11:58 support-files/my-innodb-heavy-4G.cnf

-rw-r--r-- 1 7161 wheel 4665 Jan 15 11:58 support-files/my-large.cnf

-rw-r--r-- 1 7161 wheel 4676 Jan 15 11:58 support-files/my-medium.cnf

-rw-r--r-- 1 7161 wheel 2840 Jan 15 11:58 support-files/my-small.cnf

NFS****系统

mount 10. 0. 0. 7:/video /video 即把 10. 0. 0. 7 的/video 目录挂载到本地的/video 目录,本地可以通过 df –h 查看基本挂载信息。

需要注意的是 NFS 启动前必须先启动 RPC 服务,RPC 重启也要重启 NFS,修改 NFS 配置文件无需重启,执行/ etc/ init. d/ nfs reload 或 exportfs- rv 即可 使 修改 的/ etc/ exports 生效。

另外 NFS 客户端只需启动 rpc 服务,服务端要启动 rpc 和 nfs 服务。

注意: NFS 的 RPC 服务, 在 CentOS 5. X 下 名称 为 portmap, 在 CentOS 6. X 下 名称 为 rpcbind。

rpm -aq|grep -E "nfs-|rpcbind"

rpm -aq nfs-utils rpcbind

如果出现

nfs-utils-1.2.3-64.el6.x86_64

rpcbind-0.2.0-11.el6_7.x86_64

nfs-utils-lib-1.1.5-11.el6.x86_64

表示已安装。

yum install nfs-utils rpcbind –y

LANG=en 临时调整系统字符集为英文。

/etc/init.d/rpcbind status 检查 rpcbind 的服务状态。

rpcinfo -p localhost 服务未启动检查报错信息。

/etc/init.d/rpcbind start 启动 rpcbind。

lsof -i:111 查看 111 端口,lsof(list open files)是一个列出当前系统打开文件的工具,选项 i 用于显示符合条件的进程。

netstat -lntup|grep rpcbind

rpcinfo -p localhost 查看 NFS 服务想 rpc 服务注册的端口信息。

chkconfig --list rpcbind 检查 rpc 开机是否启动。

rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off

表示随机开机启动。

/etc/init.d/nfs status 查看 nfs 服务

/etc/init.d/nfs start 启动 nfs 服务

rpcinfo -p localhost 查看 NFS 服务想 rpc 服务注册的端口信息,nfs 启动后增加了好多信息。

ps -ef|grep -E "rpc|nfs" 插件 nfs 相关进程

配置 NFS 服务器 端 服务 开机 自 启动

chkconfig rpcbind on

chkconfig nfs on

大型企业里随机启动的命令都放在/etc/rc.local 文件里,方便管理,而不是用 chkconfig 命令来管理。

VIM /etc/rc.local

/etc/init.d/rpcbind start

/etc/init.d/nfs start

实战配置nfs服务端

Nfs 默认配置文件路径是/etc/exports 空的

企业 生产 场景 NFS exports 配置 实例

配置好后可通过 cat /var/lib/nfs/etab 查看配置相关参数。

创建共享目录并授权

mkdir -p /share_dir

chown -R nfsnobody.nfsnobody /share_dir

#<== 在 NFS 服务器 端 把 要 共享 的 NFS 目录 赋予 NFS 默认 用户 nfsnobody 用户 和 用户 组 权限, 如不 设置 这个 权限, 会 导致 NFS 客户 端 访问 时 无法 通过 NFS 本地 共享 目录 权限 写入 数据。 当然 也可以 给 NFS 服务器 端 本地 共享 目录 777 的 权限, 但是 工作中 最好 不用, 因为 777 的 权限 太大 了。

grep nfsnobody /etc/passwd

配置 nfs 服务配置文件

VIM /etc/exports

exportfs –rv 加载配置看配置是否正确,即修改配置文件后需要重新加载,等价于/etc/init.d/nfs reload

showmount -e localhost 在 nfs 服务器本地查看挂载信息。

通过 cat /var/lib/nfs/etab 查看 nfs server 配置文件参数(包括默认加载的参数)

挂载测试,直接在服务器端本地挂载,如下

mount -t nfs 192.168.179.129:/share_dir /mnt

df –h 查看挂载情况

客户端无需启动 nfs

/etc/init.d/rpcbind status

/etc/init.d/rpcbind start

挂载前先检查有权限需要挂载的信息,是否能够挂载

showmount -e 192.168.179.129 如发现如下错误,就关闭防火墙(客户端服务端都要关闭)

clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

/etc/init.d/iptables status

/etc/init.d/iptables stop

mount -t nfs 192.168.179.129:/share_dir /mnt

df –h 检查挂载后的结果

mount 查看挂载状况。

将 rpcbind 和客户端挂载命令写入随机启动

VIM /etc/rc.local

/etc/init.d/rpcbind start

mount -t nfs 192.168.179.129:/share_dir /mnt

到此配置完成。

生产环境高级案例配置实战

  1. 指定固定 uid 用户配置 nfs 共享的实例

  2. 建立 用户 组 zuma 并 指定 GID 888, 所有 客户 端 也要 用 同样 的 命令 建立。

groupadd zuma -g 888

建立 用户 zuma 指定 UID 888 并 加入 zuma 组, 所有 客户 端 也要 用 同样 的 命令 建立。

useradd zuma -u 888 -g zuma

  1. 开始部署 nfs server

mkdir /ppzboy

chown -R zuma.zuma /ppzboy

ls -ld /ppzboy/

echo '#new example'>>/etc/exports

echo '/ppzboy 192.168.179.0/24(rw,sync,all_squash,anonuid=888,anongid=888)'>>/etc/exports

tail -2 /etc/exports 配置后养成查看的习惯。

/etc/init.d/nfs reload

showmount -e localhost

  1. 开始 nfs 客户端操作

groupadd zuma -g 888

useradd zuma -u 888 -g zuma

id zuma

mkdir /video 创建新的挂载点。

/etc/init.d/rpcbind status 检查是否在运行

showmount -e 192.168.179.129

mount -t nfs 192.168.179.129:/ppzboy /video

df –h

touch newfile.txt 测试用户和组都是 zuma 的可以写入。

客户端优化

安全优化

mount -t nfs -o nosuid,noexec,nodev,rw 10. 0. 0. 7:/ data /mnt

安全加优化的挂载方式

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize= 131072,wsize= 131072 10. 0. 0. 7:/ data /mnt

默认挂载,在 centos6.x 中默认挂载性能还是不错的呢

mount -t nfs 10. 0. 0. 7:/ data /mnt

nfs****服务器内核优化建议

cat>>/etc/sysctl.conf<

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

EOF

sysctl –p 使生效

卸载挂载

umount / mnt 如果挂载失败可强行挂载,比如 nfs 服务器宏机

umount -lf /mnt

·大型 网 站 NFS 网络 文件 系统 的 替代 软件 为 分布式 文件 系统 Moosefs( mfs)、 GlusterFS、 FastDFS。

Nginx****反向代理与负载均衡应用实践

互 联网 企业 常用 的 开源 集群 软件 有: Nginx、 LVS、 Haproxy、 Keepalived、 Heartbeat。

互 联网 企业 常用 的 商业 集群 硬件 有: F5、 Netscaler、 Radware、 A10 等, 工作 模式 相当于 Haproxy 的 工作 模式。

Nginx****检测节点健康状况

wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master

unzip master

cd nginx-1.8.1

patch -p1<../nginx_upstream_check_module-master/check_1.7.5+.patch

检查上次安装 nginx 是的编码参数

/application/nginx-1.8.1/sbin/nginx –V

./configure --user=nginx --group=nginx --prefix=/application/nginx-1.10.0/ --with-http_stub_status_module –with-http_ssl_module --with-http_gzip_static_module --add-module=../nginx_upstream_check_module-master/

Make

Nginx 已安装过只是打监控补丁就不需要 make install 了

mv /application/nginx-1.8.1/sbin/nginx{,.bak}

cp ./objs/nginx /application/nginx-1.10.0/sbin/

/application/nginx-1.8.1/sbin/nginx –t

/application/nginx-1.8.1/sbin/nginx –V

upstream static_pools {

server 192.168.179.129:80 weight=1;

check interval=3000 rise=2 fall=5 timeout=1000 type=http;

}

location /status{

stub_status on;

check_status;

access_log off;

####allow 192.168.179.0/24;

####deny al;

/application/nginx-1.8.1/sbin/nginx -s stop

/application/nginx-1.8.1/sbin/nginx

注意必须重启。还有版本问题,我只在 nginx1.8.1 匹配 check_1.7.5+.patch

、nginx1.6.3 匹配 check_1.5.12+.patch 配置成功。

Keepalived****高可用集群时间

1、安装

yum install keepalived –y

2、启动并检查

/etc/init.d/keepalived start

ps -ef|grep keep|grep -v grep

启动后有 3 个 keepalived 进程说明正确。

ip add|grep 192.168 默认情况下启动了三个 vip。

配置单实例主模式

VIM keepalived.conf

/etc/init.d/keepalived start

查看配置的虚拟 ip

ip addr|grep 192.168.179.132

注意 BACKUP 节点没有任何返回

配置 keepalived 日志,默认日志写入/var/log/messages

VIM /etc/sysconfig/keepalived

把 KEEPALIVED_OPTIONS="-D" 修改为 KEEPALIVED_OPTIONS="-D -d -S 0"

echo "local0.* /var/log/keepalived.log">>/etc/rsyslog.conf

在/etc/rsyslog.conf 大概第 42 行第一列末尾加入;local0.none 表示 keepalived 不再往里/var/log/messages 写入日志

/etc/init.d/rsyslog restart

/etc/init.d/keepalived stop

/etc/init.d/keepalived start

双实例主备模式

可查看虚拟机的 keepalived 的配置文件

最后把域名解析为对应的 vip 即可。

另外问题是,如果 nginx 指定了监听 ip,那么如果本机不存在此 ip 会报错,处理方式如下

echo 'net.ipv4.ip_nonlocal_bind = 1'>>/etc/sysctl.conf

sysctl –p 使生效

解决当 nginx 服务停止后自己停止 keepalived

方法一编写脚本启动守护进程/server/scripts/ check_nginx_to_keepalived.sh

方法二在 keepalived 配置文件里通过监控执行 check_nginx_to_keepalived.sh 脚本

解决同一个局域网内不同组的 keepelived 冲突,在全局配置部分增加指定 vrrp 的默认多播地址,默认都是 224.0.0.18,不同组可以改成不同,包括用户密码。

vrrp_mcast_group4 224.0.0.19 #<== 这个 就是 指定 多 播 地址 的 配置

memcached****服务安装

yum install libevent libevent-devel nc –y

rpm -qa libevent libevent-devel nc

yum install Memcached –y

rpm -qa Memcached

which Memcached

启动第一个 Memcached 实例

Memcached -m 16m -p 11211 -d -u root -c 8192

查看启动情况

lsof -i:11211

可以同时启动多个实例,端口号不同就行

ps -ef|grep memcached|grep -v grep

也可以把启动命令放入 VIM /etc/rc.local

下次开机自动启动。

向 Memcached 写入数据并检查

插入

printf "set key1 0 0 7\r\nppzbody\r\n"|nc 127.0.0.1 11211

查看

printf "get key1\r\n"|nc 127.0.0.1 11211

删除

printf "delete key1\r\n"|nc 127.0.0.1 11211

用 telnet 操作:

telnet 127.0.0.1 11211

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

set user01 0 0 7

ppzkkkk

STORED

get user01

VALUE user01 0 7

ppzkkkk

END

delete user01

DELETED

get user01

END

提示:telnet 连接后如果输入字符错了,可以通过 ctrl+Backspace 删除。

单实例关闭 Memcached

Killall Memcached 或 pkill Memcached

启动多实例是最好加上 pid 参数,方便单个停止

Memcached -m 16m -p 11211 -d -u root -c 8192 -P /var/run/11211.pid

Memcached -m 16m -p 11212 -d -u root -c 8192 -P /var/run/11212.pid

kill cat /var/run/11211.pid

也可以这么关闭

ps -ef|grep memcached|grep -v grep|awk '{print $2}'|xargs kill

Java 环境不需要安装客户端(开发用的是第三方 jar),PHP 环境需要安装 Memcached 客户端插件,前面已讲过。

配置 Memcached 客户端使其生效

VIM /application/php-5.6.21/etc/php.ini

末尾加入

extension_dir = "/application/php-5.6.21/lib/php/extensions/no-debug-non-zts-20131226"

extension = memcache.so

重启 PHP 服务

/application/php-5.6.21/sbin/php-fpm –t

pkill php-fpm

/application/php-5.6.21/sbin/php-fpm

测试链接 op_mem.php

/application/php-5.6.21/bin/php op_mem.php

http://blog.etiantian.org/phpinfo.php

png

查看 Memcached 运行状态信息

printf "stats\r\n"|nc 127.0.0.1 11211

Memcached 界面工具 memadmin

查看 MySQL 进程列表

MySQL -uroot -p'ppz2323' -e "show full processlist"|grep -vi sleep

nagios****服务器端的安装

echo 'export LC_ALL=C'>>/etc/profile

tail -1 /etc/profile

source /etc/profile

echo $LC_ALL

/etc/init.d/iptables stop

chkconfig iptables off

/etc/init.d/iptables status

chkconfig --list iptables

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

setenforce 0

---------系统时间

echo '*/5 * * * * /usr/sbin/ntpdate us.pool.ntp.org>/dev/null 2>&1'>>/var/spool/cron/root

yum install glibc glibc-common –y

yum install gd gd-devel –y

yum install mysql-server –y

yum install httpd PHP php-gd –y

/usr/sbin/useradd nagios

/usr/sbin/useradd apache -M -s /sbin/nologin

/usr/sbin/groupadd nagcmd

/usr/sbin/usermod -a -G nagcmd nagios

/usr/sbin/usermod -a -G nagcmd apache

wget http://nbtelecom.dl.sourceforge.net/project/nagios/nagios-3.x/nagios-3.5.1/nagios-3.5.1.tar.gz

wget https://www.nagios-plugins.org/download/nagios-plugins-1.4.16.tar.gz

echo '192.168.179.128 ppzCentos1'>>/etc/hosts

sed -i 's/#ServerName 127.0.0.1:81/g' /etc/httpd/conf/httpd.conf

/etc/init.d/httpd start

/etc/init.d/httpd restart

如果 80 端口被占用了改下

sed -i 's#Listen 80#Listen 81#g' /etc/httpd/conf/httpd.conf

lsof -i:81

tar xf nagios-3.5.1.tar.gz

cd nagios

./configure --with-command-group=nagcmd

make all

make install

make install-init

make install-commandmode

make install-config

make install-webconf

make install-exfoliation

make install-classicui

创建登录用户

htpasswd -bc /usr/local/nagios/etc/htpasswd.users ppz 123456

cat /usr/local/nagios/etc/htpasswd.users

grep AuthUserFile /etc/httpd/conf.d/nagios.conf

/etc/init.d/httpd reload

sed -i 's#nagios@localhost#201692488@qq.com#g' /usr/local/nagios/etc/objects/contacts.cfg

开启本地邮箱服务

/etc/init.d/postfix start

chkconfig postfix on

chkconfig --list postfix

测试邮件

mail -s "test" 201692488@qq.com

mailq

使用第三方邮箱服务

echo 'set from=201692488@qq.com'>>/etc/mail.rc

echo 'smtp=smtp.qq.comset smtp-auth-user=201692488 smtp-auth-password=ppz23@wf' smtp-auto=login>>/etc/mail.rc

注意,如果使用了 postfix 就不要配第三方的,否则会报 Unknown command: "smtp=smtp"错误

/etc/init.d/httpd start

/etc/init.d/httpd restart

chkconfig --list httpd

netstat -lntup|grep httpd

http://192.168.179.129:81/nagios/

安装 nagios 插件软件包

yum install perl-devel openssl-devel –y

tar -xf nagios-plugins-1.4.16.tar.gz

cd nagios-plugins-1.4.16

./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-perl-modules --with-mysql

Make

make install

检查插件个数

ls /usr/local/nagios/libexec/|wc –l

安装 nrpe

wget https://sourceforge.net/projects/nagios/files/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz

tar -xf nrpe-2.15.tar.gz

cd nrpe-2.15

./configure

make all

make install-plugin

make install-daemon

make install-daemon-config

检查 nrep 插件

ls /usr/local/nagios/libexec/check_nrpe

nrep 的配置文件

/usr/local/nagios/etc/nrpe.cfg

配置并启动 nagios

chkconfig nagios on

chkconfig --list nagios

最好这样配随机启动

echo "/etc/init.d/nagios start">>/etc/rc.local

tail -1 /etc/rc.local

检查 nagios 配置文件语法,只检查对错,不输出信息

/etc/init.d/nagios checkconfig

检查错误并输出信息

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

/etc/init.d/nagios start

检查 nagios 进程及端口

ps -ef|grep nagios|grep -v grep

nagios****客户端安装

yum install gcc glibc glibc-common –y

yum install MySQL –y

useradd nagios -M -s /sbin/nologin

id nagios

yum install perl-devel perl-CPAN openssl-devel –y

tar -xf nagios-plugins-1.4.16.tar.gz

cd nagios-plugins-1.4.16

./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-perl-modules --with-mysql

Make

Make install

ls /usr/local/nagios/libexec/|wc –l

tar -xf nrpe-2.15.tar.gz

cd nrpe-2.15

./configure

make all

make install-plugin

make install-daemon

make install-daemon-config

其他插件安装

wget http://down1.chinaunix.net/distfiles/Params-Validate-0.91.tar.gz

tar -zxf Params-Validate-0.91.tar.gz

cd Params-Validate-0.91

perl Makefile.PL

make

make install

wget http://www.cpan.org/authors/id/K/KA/KASEI/Class-Accessor-0.34.tar.gz

tar -zxf Class-Accessor-0.34.tar.gz

cd Class-Accessor-0.34

perl Makefile.PL

make

make install

wget http://www.cpan.org/authors/id/R/RS/RSAVAGE/Config-Tiny-2.23.tgz

tar zxf Config-Tiny-2.23.tgz

cd Config-Tiny-2.23

perl Makefile.PL

make&&make install

wget http://www.cpan.org/authors/id/S/SF/SFINK/Math-Calc-Units-1.07.tar.gz

tar zxf Math-Calc-Units-1.07.tar.gz

cd Math-Calc-Units-1.07

perl Makefile.PL&&make&&make install

wget http://www.cpan.org/authors/id/A/AB/ABIGAIL/Regexp-Common-2016020301.tar.gz

tar zxf Regexp-Common-2016020301.tar.gz&&cd Regexp-Common-2016020301&&perl Makefile.PL&&make&&make install&&cd ..

yum install sysstat –y

wget http://search.cpan.org/CPAN/authors/id/T/TO/TONVOON/Nagios-Plugin-0.34.tar.gz

tar -zxf Nagios-Plugin-0.34.tar.gz

cd Nagios-Plugin-0.34

perl Makefile.PL&&make&&make install&&cd ..

配置监控内存 磁盘 I/O 脚本插件

yum install dos2NUIX –y

单独下载 check_memory.pl

/bin/cp check_memory.pl /usr/local/nagios/libexec/

wget http://www.ofn.dk/files/software/check_iostat

/bin/cp check_iostat /usr/local/nagios/libexec/

chmod 755 /usr/local/nagios/libexec/check_memory.pl

chmod 755 /usr/local/nagios/libexec/check_iostat

wget ftp://ftp.pbone.net/mirror/ftp.sourceforge.net/pub/sourceforge/r/ro/roblinux/64-32_pkg/base/x86_64/popt-1.14-2rt.x86_64.rpm

rpm -ivh popt-1.14-2rt.x86_64.rpm

wget http://terminus.sk/~hany/_data/hd2u/hd2u-1.0.0.tgz

tar -zxf hd2u-1.0.0.tgz&&cd hd2u-1.0.0

./configure&&make&&make install

whereis dos2unix

dos2unix /usr/local/nagios/libexec/check_memory.pl

dos2unix /usr/local/nagios/libexec/check_iostat

配置 Nagios 客户 端 nrpe 服务

cd /usr/local/nagios/etc/

sed -n '81p' nrpe.cfg

sed -i 's#allowed_hosts=127.0.0.1#allowed_hosts=127.0.0.1,192.168.179.128#g' nrpe.cfg

VIM nrpe.cfg

### 注释掉

#command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10

#command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20

#command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1

#command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z

#command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

### 添加新的监控内容

command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20

command[check_mem]=/usr/local/nagios/libexec/check_memory.pl -u -w 90% -c 95%

command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

command[check_iostat]=/usr/local/nagios/libexec/check_iostat -w 5 -c 10

启动客户端 nrpe

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d

检查 nrpe 启动结果

netstat -lntup|grep nrpe

重启

pkill nrpe

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d

加入开机自起

echo '/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d'>>/etc/rc.local

tail -2 /etc/rc.local

nagios****服务器端监控

nagios 安装后的目录结构 ls -lt /usr/local/nagios/

VIM /usr/local/nagios/etc/nagios.cfg +34

## 增加如下配置文件

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg

cfg_file=/usr/local/nagios/etc/objects/services.cfg

cfg_dir=/usr/local/nagios/etc/objects/services

## 注释

#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

cd /usr/local/nagios/etc/objects/

head -51 localhost.cfg >hosts.cfg

chown nagios.nagios /usr/local/nagios/etc/objects/hosts.cfg

touch services.cfg

chown -R nagios.nagios services.cfg

mkdir services

chown -R nagios.nagios services

配置nagios服务端监控项

cd /usr/local/nagios/etc/objects

主机

VIM hosts.cfg

define host{

use linux-server

host_name ppzCentos1

alias ppzCentos1

address 192.168.179.128

}

define host{

use linux-server

host_name ppzCentos2

alias ppzCentos2

address 192.168.179.129

}

define host{

use linux-server

host_name ppzCentos3

alias ppzCentos3

address 192.168.179.130

}

define host{

use linux-server

host_name ppzCentos4

alias ppzCentos4

address 192.168.179.131

}

define hostgroup{

hostgroup_name linux-servers

alias Linux Servers

members ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

}

监控项

VIM services.cfg

define service{

use generic-service

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description 磁盘监控

 check_command check_nrpe! check_disk

}

define service{

use generic-service

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description swap 监控

check_command check_nrpe! check_swap

}

define service{

use generic-service

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description 内存监控

check_command check_nrpe! check_mem

}

define service{

use generic-service

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description 系统负载监控

check_command check_nrpe! check_load

}

define service{

use generic-service

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description 磁盘 I/O 监控

check_command check_nrpe! check_iostat! 5! 10

}

define service{

use generic-service

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description ping 监控

check_command check_ping! 100.0,20%! 500.0,60%

}

VIM commands.cfg

### 增加如下内容

define command{

command_name check_nrpe

command_line USER1/check_nrpe -H HOSTADDRESS -c ARG1

}

检查语法

/etc/init.d/nagios checkconfig

重新加载 nagios

/etc/init.d/nagios reload

cd /usr/local/nagios/etc/

grep ^"authorized_for" cgi.cfg

把 nagiosadmin 改成 nagios Web 用户

sed -i 's#nagiosadmin#ppz#g' cgi.cfg

yum install openssl openssl-devel

最后被监控端和服务端都能/usr/local/nagios/libexec/check_nrpe -H 192.168.179.129

/usr/local/nagios/libexec/check_nrpe -H 192.168.179.128

痛才行

直接测试某项监控

/usr/local/nagios/libexec/check_nrpe -H 192.168.179.131 -c check_iostat

添加http服务的URL地址及端口监控

Nagios 服务器端

cd /usr/local/nagios/etc/objects

VIM services.cfg

### 对域名 URL 地址 http://blog.etiantian.org 进行监控配置

define service {

use generic-service

host_name ppzCentos1

service_description blog_url

check_command check_weburl! -H blog.etiantian.org

}

VIM commands.cfg

## 增加域名 URL 监控

define command{

command_name check_weburl

###5s 报警,10 秒告危急

command_line $USER1$/check_http $ARG1$ -w 5 -c 10

}

使配置文件生效

/etc/init.d/nagios reload

也可配置针对某个具体的 uri 或带参数的 uri 进行控制。

监控任意tcp端口

cd /usr/local/nagios/etc/objects

VIM services.cfg

### 监控 tcp 端口

define service {

use generic-service

host_name ppzCentos2,ppzCentos3,ppzCentos4

service_description ssh_22

check_command check_tcp!22

}

define service {

use generic-service

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description http_80

check_command check_tcp!80

}

由于 check_tcp 为 nagios plugin 默认插件,commands.cfg 会自动添加进去,无需手动添加

/etc/init.d/nagios checkconfig

/etc/init.d/nagios reload

Memcached****进行监控

cd /usr/local/nagios/etc/objects

VIM commands.cfg

## 对 Memcached 进行监控配置

define command{

command_name check_memcached_11211

command_line USER1/check_tcp -H HOSTADDRESS -p 11211 -t 5 -E -s 'stats\r\n' -e 'uptime' -M crit

}

VIM services.cfg

### 监控 Memcached

define service {

use generic-service

host_name ppzCentos1

service_description Memcache_11211

check_command check_memcached_11211

}

Nagios****调试

vi /etc/init.d/nagios +178

修改如下

###NagiosBin -v NagiosCfgFile > /dev/null 2>&1;

NagiosBin -v NagiosCfgFile

Nagios****服务器端图形监控与管理

nagios 监控是一种常用的监控软件,同时,有个很大的缺点,就是没法展现旧的历史数据,服务状态趋势,言简意赅的说,就是缺少绘图。

nagios 相关资料参见本博客上的内容:http://www.ttlsa.com/?s=nagios

原理:

使用 service_perfdata_file_processing_command 指令,将 nagios 监控到的每个服务数据,传递给 /usr/local/nagiosgraph/bin/insert.pl 脚本处理,生产 rrd 文件。

下面来说说 Nagiosgraph 的配置:

  1. 获取组件

png

wget http://downloads.sourceforge.net/project/nagiosgraph/nagiosgraph/1.4.4/nagiosgraph-1.4.4.tar.gz

tar -xzf nagiosgraph-1.4.4.tar.gz

cd nagiosgraph-1.4.4

  1. 检测环境要求

png

./install.pl --check-prereq

checking required PERL modules

Carp...1.04

CGI...3.15

Data::Dumper...2.121_08

MIME::Base64...3.07

POSIX...1.09

RRDs...1.2027

Time::HiRes...1.9717

checking optional PERL modules

GD...2.35

checking nagios installation

found nagios at /usr/local/nagios/bin/nagios

checking Web server installation

found apache at /usr/sbin/httpd

缺少哪些 perl 模块,就安装那些模块,同时还要注意版本的要求。

  1. 安装

png

一路按回车键。

  1. 编辑 nagios.cfg 文件

在 nagios.conf 文件下,添加以下内容

png

process nagios performance data using nagiosgraph

process_performance_data=1

service_perfdata_file=/tmp/perfdata.log

service_perfdata_file_template=LASTSERVICECHECK||HOSTNAME||SERVICEDESC||SERVICEOUTPUT||SERVICEPERFDATA

service_perfdata_file_mode=a

service_perfdata_file_processing_interval=30

service_perfdata_file_processing_command=process-service-perfdata-for-nagiosgraph

|

  1. 编辑 commands.cfg 文件

添加以下内容

png

#########################################

nagiosgraph

command to process nagios performance data for nagiosgraph

define command {

    command_name    process-service-perfdata-for-nagiosgraph

    command_line    /usr/local/nagiosgraph/bin/insert.pl

}

|

  1. 修改 httpd.conf 文件

添加以下内容

png

Include /usr/local/nagiosgraph/etc/nagiosgraph-apache.conf

  1. 重新启动服务

png

/etc/init.d/httpd restart

/etc/init.d/nagios restart

  1. 查看 nagiosgraph 配置信息

在浏览器输入:http://10.0.100.125/nagiosgraph/cgi-bin/showconfig.cgi 网址查看。

png

  1. 定义动作 URL

修改 templates.cfg 文件,添加以下内容:

png

define service {

    name nagiosgraph

    action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME>

    register 0

}

|

  1. 添加你需要的绘图

默认情况下,启用 Performance Data 的服务都会绘图。

png

实例如下:

png

define service {

use                 MongoDB,nagiosgraph

hostgroup_name          MongoDB_Servers

service_description     Mongo Memory Usage

check_command           check_mongodb!12345!''!''!memory!130!260

  servicegroups           Mongodbservices

}

|

添加完,会有个下面的图标

png

  1. 效果如下

png

  1. 每个服务项都会有个 rrd 文件

在/usr/local/nagiosgraph/var/rrd 目录下的各自主机子目录下

png

对于无法生成 Performance Data 数据,将无法绘图,出现 nagiosgraph no data available 信息,查看 nagiosgraph.log 出现下面信息:

322207-Tue Apr 8 17:18:36 2014 insert.pl warn output/perfdata not recognized:

322279:hostname:X.X.X.X

322299-servicedesc:Mongo Free Connections

322334-output:OK - 6 percent (52 of 819 connections) used

322385-perfdata:

perfdata 为空,这就需要我们自己去对 output 信息进行解析了。通过/usr/local/nagiosgraph/etc/map 这个文件,来定义正则表达式来处理,该文件是个 perl 脚本,来将 output 信息映射到 perfdata。

map 如何自定义正则表达式下节再说,请关注。

实现将nagios故障通知管理人员

cd /usr/local/nagios/libexec

touch sms_send.sh

chmod 755 sms_send.sh

VIM sms_send.sh

#!/bin/sh

PROGNAME=basename $0

PROGPATH=dirname $0

print_usage () {

echo "Usage: /bin/sh $PROGNAME title contact"

## 表示调用该函数后的返回值

exit 1

}

if [ $# -ne 2 ];then

print_usage

fi

alert_date=$(date +%y-%m-%d" "%H:%M)

TITLE=$1

CONTACT=$2

FORMAT "Host HOSTSTATE alert for $HOSTNAME"

curl -d cdkey=3RTY-EMY-0980-MTUQ2 -d password=189162 -d phone=CONTACT -d message="TITLE[{alert_date} oldboysa]" sdkhttp.eucp.b2m.cn/sdkproxy/sendsms.action

cd /usr/local/nagios/etc/objects

VIM commands.cfg

}

### 定义报警脚本

define command{

command_name notify-host-by-pager

command_line USER1/sms_send.sh "Host HOSTSTATE alert for HOSTNAME" CONTACTPAGER

}

define command{

command_name notify-service-by-pager

command_line USER1/sms_send.sh "HOSTALIAS/SERVICEDESC is SERVICESTATE" CONTACTPAGER

}

VIM templates.cfg

define contact{

name generic-contact

service_notification_period 24x7

host_notification_period 24x7

service_notification_options w,u,c,r,f,s

host_notification_options d,u,r,f,s

service_notification_commands notify-service-by-email,notify-service-by-pager

host_notification_commands notify-host-by-email,notify-service-by-pager

register 0

}

VIM contacts.cfg

define contact{

contact_name ppz-pager

use generic-contact

alias Nagios users

pager 18776905879

}

define contactgroup{

contactgroup_name admins

alias Nagios Administrators

members nagiosadmin,ppz-pager

}

开发nagios插件

cd /usr/local/nagios/libexec

VIM check_url.sh

#!/bin/sh

###wget 检查 http://blog.etiantian.org/wp-admin/edit.php 是否可访问

wget -T 10 --spider http://blog.etiantian.org/wp-admin/edit.php>/dev/null 2>&1

###$?表示输出上次脚本的退出码,判断上述 wgeg 命令指令的返回值,0 为成功,非 0 失败

if [ $? -eq 0 ]

then

echo "URL http://blog.etiantian.org/wp-admin/edit.php OK"

exit 0

else

echo "URL http://blog.etiantian.org/wp-admin/edit.php CRITICAL"

exit 2

fi

通用规范脚本

#!/bin/sh

PROGNAME=basename $0 #<== 取脚本名

PROGPATH=dirname $0 #<== 取脚本路径

usage () { #<== 打印帮助

echo "Usage: /bin/sh $PROGNAME url"

exit 1

}

[ S# -ne 1 ]&&usage #<== 参数个数不为 1,打印帮助

wget -T 10 --spider $1>/deb/null 2>&1

if [ $? -eq 0 ]

then

echo "URL $1 OK"

exit 0

else

echo "URL $1 CRITICAL"

exit 2

fi

VIM commands.cfg

define command{

command_name check_url

### 加载 check_url.sh 脚本并传参 http://blog.etiantian.org/wp-admin/edit.php

command_line USER1/check_url.sh http://blog.etiantian.org/wp-admin/edit.php

}

cd services

之前在 nagios.cfg 里定义的配置文件目录 services 里所有以 cfg 结尾的都会生效

VIM check_url.cfg

define service{

use generic-service

host_name ppzCentos1

service_description http_zhudong_url

check_command check_url

}

被动方式监控****passwd

如下都在客户端操作

md5sum /etc/passwd>/opt/ps.md5

cat /opt/ps.md5

83adf9e49175b289b35535e3889f46c3 /etc/passwd

VIM check_passwd

#!/bin/sh

oldmd5="83adf9e49175b289b35535e3889f46c3"

currmd5=md5sum /etc/passwd|cut -c 1-32

if [ "oldmd5" == "currmd5" ]

then

  echo "/etc/passwd:OK"

exit 0

else

echo "/etc/passwd:FAILED"

exit 2

fi

chmod +x check_passwd

cd /usr/local/nagios/etc/

VIM nrpe.cfg

添加

command[check_passwd]=/usr/local/nagios/libexec/check_passwd

重启 nrpe

pkill nrpe

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d

Nagios 服务端

cd /usr/local/nagios/etc/objects/services

cat check_passwd.cfg

define service{

use generic-service,nagiosgraph

host_name ppzCentos1,ppzCentos2,ppzCentos3,ppzCentos4

service_description check_passwd

check_command check_nrpe! check_passwd

}

检查 nagios 语法重启

/etc/init.d/nagios checkconfig

/etc/init.d/nagios restart

邮件告警配置

**一、****Postfix,Cyrus-IMAP,Cyrus-sasl **安装

1、CentOS 上执行命令:

yum install postfix

yum install cyrus*

2、删除系统自带的 Sendmail。

rpm -e sendmail

或者

yum remove sendmail

3、修改 MTA(默认邮件传输 d)

alternatives --config mta

4、按下回车键保存当前选择,或者输入数字设置默认。

png

5、也可以直接输入命令:

/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix

6、检查一下是不是已经设置成功了。

alternatives --display mta

png

二、Postfix配置

1、Postfix 的配置文件是 main.cf,路径是:/etc/postfix/main.cf。

png

2、用文本编辑器打开它进行相应的修改,建议将这个文件下载到本地使用 Notepad++ 等常用的代码编辑器修改。

png

3、主要是将下面的代码前的 # 号去掉,如果没有则直接手动添加(用 hostname 可以查看本机主机名)。

注意注释要取消

myhostname = ppzCentos4 //76 行,改成本机名称

mydomain = ppzCentos4.com //82 行,设置域名

myorigin = $mydomain //97 行,去掉注释

inet_interfaces = all //112 行,去掉注释

inet_protocols = ipv4

mydestination = myhostname, localhost.mydomain, localhost,$mydomain //163 行,去掉注释

mynetworks = 192.168.179.0/24, 127.0.0.0/8 //263 行,设置内网和本地 IP

local_recipient_maps = //209 行,去掉注释

smtpd_banner = myhostname ESMTP unknow //568行,去掉注释,然后把mail_name ($mail_version)改成 unknow

//在 main.cf 文件的底部加上以下内容

smtpd_sasl_auth_enable = yes //使用 SMTP 认证

broken_sasl_auth_clients = yes //让不支持 RFC2554 的 smtpclient 也可以跟 postfix 做交互。

smtpd_sasl_local_domain = $myhostname // 指定 SMTP 认证的本地域名

smtpd_sasl_security_options = noanonymous //取消匿名登陆方式

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination //设定邮件中有关收件人部分的限制

smtpd_sasl_security_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination //设置允许范围

message_size_limit = 15728640 //邮件大小

mailbox_transport=lmtp:unix:/var/lib/imap/socket/lmtp //设置连接 cyrus-imapd 的路径

**三、****Cyrus-IMAP,Cyrus-sasl **配置

1、Cyrus-sasl 配置,编辑:VIM /etc/sasl2/smtpd.conf (注意:如果是 32 位的 CentOS,应该是:VIM /usr/lib/sasl2/smtpd.conf ),加入以下代码,主要是设置记录 Log 模式,设置 smtp 寻找 cyrus-sasl 的路径。

log_level: 3

saslauthd_path:/var/run/saslauthd/mux

png

2、cyrus-imapd 的主要配置文件有:/etc/sysconfig/cyrus-imapd,/etc/cyrus.conf,/etc/imapd.conf。imapd.conf 还包含非常多的参数,例如邮件存储目录、管理员账号、连接认证方式等等,具体的需要参考官网。

四、启动****Postfix,Cyrus-IMAP,Cyrus-sasl

1、 执行以下命令启动 Postfix,Cyrus-IMAP,Cyrus-sasl :

/etc/init.d/postfix start

/etc/init.d/saslauthd start

/etc/init.d/cyrus-imapd start

png

2、执行命令:netstat -tpnl |grep 25 ,可以查看端口是否正常打开 。执行命令:service postfix status 可以查看 Postfix 状态。以下命令可以设置开机启动:

chkconfig postfix on

chkconfig saslauthd on

chkconfig cyrus-imapd on

3、检测 Cyrus-sasl 。先设置一下 cyrus 密码,命令:passwd cyrus ,然后使用命令:testsaslauthd -u cyrus -p '123456' 来测试 SMTP 是否正常。

png

4、检测 cyrus-imapd,并创建新的邮件账号。命令:id cyrus 是用来查看 cyrus 管理员账号的,默认的就是 cyrus。创建邮件账号命令:

cyradm -u cyrus localhost (32 位)

cyradm -u cyrus localhost --auth plain (64 位)

cm freehao123 (新建)

lm (显示)

quit (退出)

png

5、 生成的邮件目录是放在/var/spool/imap 中,以目录形式存放。查看:ls /var/spool/imap/ ,目录名是用户名的首字母。

echo "Mail Content" | mail -s "Mail Subject" 201692488@QQ.com

赞助商 我要投放

回帖
请输入回帖内容 ...