一、nginx安装
- 安装 pcre,目的是让 nginx 能用 rewrite 模块(uri 重写)。
sudo yum install pcre-devel –y
- 安装 openssl-devel。
sudo yum install -y openssl openssl-devel,
Nginx 在 使用 HTTPS 服务 的 时候 要用 到此 模块, 如果不 安装 openssl 相关 包, 安装 Nginx 的 过程 中会 报错。
-
下载,wget -q http://nginx.org/download/nginx-1.10.0.tar.gz。
-
sudo useradd nginx -s /sbin/nologin -M
-
解压,tar xf nginx-1.10.0.tar.gz。
-
sudo ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.10.0/ --with-http_stub_status_module --with-http_ssl_module
-
sudo make
-
sudo makge install
-
sudo ln -s /application/nginx-1.10.0 nginx
-
sudo ./nginx –t(启动前检查语法错误)。
-
sudo ./nginx
-
netstat -lnt|grep 80(查看 80 端口是否开启)
-
curl 192.168.179.128
-
宿主主机浏览器地址栏输入 http://192.168.179.128/,nginx 的 html 目录既是 nginx 的默认站点,默认是 index.html 页面,如有中文乱码,在之间加入
-
./nginx –t 如下说明语法正确。
16、./nginx -s reload 平滑重新加载配置文件、不影响用户访问,因为 nginx 启动时已经把配置文件加载到内存中,配置文件改了需要重新加载。
17、ps -ef|grep nginx 检查 nginx 重新加载的情况。
18、ps -ef|grep 80 检查 80 端口
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 提示符下检查下解析结果
22、查看域名解析过程 dig www.etiantian.org +trace,如下
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 查看状态信息。
注释:Active connections: 2 #<==表示 Nginx 正 处理 的 活动 连接 数 有 2 个。
30、日志部分
31、location 部分用于匹配用户请求的 URI。
32、location 匹配优先顺序
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;
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,操作如下:
创建一个数据库名字叫 wordpress, create database wordpress;
查看数据库是否创建成功,show databases like 'wordpress';
创建一个专用于 blog 的 wordpress 用户 grant all on wordpress.* to wordpress@'localhost' identified by 'ppz2323';
刷新权限、使得生成的用户生效。flush privileges;
查看用户对应的权限 show grants for wordpress@'localhost';
查看数据库里创建的 wordpress 用户 select user,host from mysql.user;
意思是指允许本机通过 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 优化部分。
- 开始安装 blog 博客程序,采用界面安装,浏览器输入 http://blog.etiantian.org/
自动跳到 http://blog.etiantian.org/wp-admin/setup-config.php 安装配置界面。
阅读后点击”现在开始“按钮
填好后单击提交按钮。
填写用户名、密码、邮箱等等
ppz_wf/pw
然后接着登录博客,如下图
点击写文章,然后点击右上角的发布按钮即可发布。
至此 lnmp 及博客搭建完成,使用细节有待自己挖掘。
- 实现 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
可以访问了。
- 有关使用 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服务器缓存加速优化实践
-
就是把 php 引擎解析、编译后的产生的操作码文件缓存(放在共享内存里)起来,待在指定时间内有同样文件被访问时,直接从缓存里获取,以提高响应速度。
-
客户端的 php 程序访问-nginx-nginx 根据扩展名过滤规则传递给-解析 php 的 fcgi(php-fpm)进程-php-fpm 进程调用 php 解析器读取站点磁盘上的 php 文件并加载到内存中-php 解析器将 php 程序编译成为 opcode 文件让后缓存起来,下次直接从缓存读取。
-
Php 缓存加速器软件种类及选择建议,目前建议选择 XCache,速度快、稳定、社区活跃。
设置环境变量:
echo 'export LC_ALL=C'>>/etc/profile 解决后面 perl 程序编码问题。
安装 perl 相关软件依赖:
yum install perl-devel –y 解决后面安装 ImageMagick 时报错。
- 安装 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
- 安装数据库缓存及其他 php 扩展插件。
Memcached 是临时缓存经常被读取的数据库查询结果在内存中,下次直接从缓存中获取。
安装:分为客户端和服务端
先装客户端
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 说明安装成功。
- 安装 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
- 安装 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 说明安装成功
- 配置 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
- 检查相关配置模块是否生效
登录 http://blog.etiantian.org/view_info.php
搜索 memcache、imagick、pdo_mysql 是否都有了。
- 配置 XCache 模块生效,修改解压目录下的 xcache.ini 文件
然后把 xcache.ini 追加到 php.ini 文件末尾,用 md5sum 生成密码,改 php.ini 里的 XCache 后台管理密码,如下
重启 php,浏览器框输入 http://blog.etiantian.org/xadmin/cacher/
- 可用 压力 测试 软件 webbench、 loadruner。
六、企业级nginx web优化
- 隐藏 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
- 更改源码隐藏 nginx 软件名称及版本号,这只能通过改源码来实现
第一个文件
修改第二个文件 ngx_http_header_filter_module.c
修改第三个文件 ngx_http_special_response.c
然后重新编译 nginx、安装、配置、启动服务。
- 更改 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 用户运行的,后面会有涉及这方面的优化。
- 更具参数优化 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 核数。
修改成 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
-
- nofile 65535
可修改此数据,即每个用户能打开的文件个数 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 秒。
-
设置参数: send_timeout 25; 用于指定相应客户端的超时时间,默认为 60 秒,指 的是两个链接活动之间的间隔时间,超过这个时间客户端再没有任何收到任何请求数据返回将关闭连接。
-
上传文件大小限制,http 请求主体大小限制 client_max_body_size 8m; 默认 1m
位置 http、server、location。
- 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;
-
nginx gzip 压缩,占用宽带少,速度快,提升用户体验,纯文本文件压缩比例高,如 html、js、css、xml、shtml 等格式的文件,但要压缩的文件必须大于 1kb,否则越压缩越大。图片、视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的,如果再压缩很可能不会减小或减小很少,或者有可能增大,反而还以为压缩而浪费 cpu、内存资源。
-
压缩参数配置说明
###开启压缩
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;
-
重要的网站前端调试工具介绍
-
配置 nginx expires 缓存实现性能优化,当用户第一次访问时会把网页内容存在用户浏览器本地,等下次访问时就从本地获取,直到本地内容过期或被删除,expires 就是过期时间。
-
在网站的开发和运营中,视频、图片、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;
}
-
缓存带来的问题,改版升级问题,缩短缓存过期时间、在服务器端将缓存的对象改名(代码里)。
-
企业网站不希望缓存的,例如网站统计流量的 js 代码。
-
Nginx 访问日志切割。
-
不记录不需要的日志,图片、js、cs 的访问日志,减少磁盘空间。
-
Nginx 配置里禁止解析上传目录下的 php、shell、perl、python 防止黑客上传可执行 文件,此配置必须在 nginx 处理 php 配置前面。
-
nginx 配置禁止访问指定目录下的所有文件。
-
禁止访问并返回指定状态吗,如下。
-
location /admin/ { return 404; }
-
location /templates/ { return 403; }
-
限制网站来源 IP 访问。
- 配置 nginx,禁止非法域名解析访问企业网站
- nginx 图片及目录防盗链接解决方案。
-
对 IDC 及 CDN 带宽做监控报警。
-
作为高级运维或运维经理,每天上班的重要任务,就是经常查看网站流量图,关注流量变化,关注异常流量。
-
对访问日志做分析,迅速定位异常流量,并且和公司推广等保持较好的沟通,以便调度带宽和服务器资源,确保网站正常的访问体验。
-
防盗链基本原理,根据 http referer 防盗链。
根据 cookie 防盗链,因为有些特殊的业务数据是不向服务器提供 referer header。
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 请求状态码:
-
nginx 防爬虫优化配置。
-
使用 cdn 做网站内容加速。
Mysql****数据库企业级应用实践
-
多配置文件、多启动程序的部署方案
-
安装 mysql 依赖包
rpm -qa ncurses-devel libaio-devel
yum install ncurses-devel libaio-devel –y
- 安装编译 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 查看可执行文件的位置
- 创立 mysql 用户账户,用 root 身份登陆 linux
Useradd –s /sbin/nologin –M mysql 默认会创建与 mysql 用户同名的组。
id mysql 查看 mysql 用户和组。
-
安装 mysql 部分略过
-
创建 mysql 多实例的数据文件目录。
mkdir -p /data/{3307,3308}/data
- 创建 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
到此配置完成。
生产环境高级案例配置实战
-
指定固定 uid 用户配置 nfs 共享的实例
-
建立 用户 组 zuma 并 指定 GID 888, 所有 客户 端 也要 用 同样 的 命令 建立。
groupadd zuma -g 888
建立 用户 zuma 指定 UID 888 并 加入 zuma 组, 所有 客户 端 也要 用 同样 的 命令 建立。
useradd zuma -u 888 -g zuma
- 开始部署 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
- 开始 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
查看 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
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 的配置:
- 获取组件
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
- 检测环境要求
./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 模块,就安装那些模块,同时还要注意版本的要求。
- 安装
一路按回车键。
- 编辑 nagios.cfg 文件
在 nagios.conf 文件下,添加以下内容
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
|
- 编辑 commands.cfg 文件
添加以下内容
#########################################
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
}
|
- 修改 httpd.conf 文件
添加以下内容
Include /usr/local/nagiosgraph/etc/nagiosgraph-apache.conf
- 重新启动服务
/etc/init.d/httpd restart
/etc/init.d/nagios restart
- 查看 nagiosgraph 配置信息
在浏览器输入:http://10.0.100.125/nagiosgraph/cgi-bin/showconfig.cgi 网址查看。
- 定义动作 URL
修改 templates.cfg 文件,添加以下内容:
define service {
name nagiosgraph
action_url /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME>
register 0
}
|
- 添加你需要的绘图
默认情况下,启用 Performance Data 的服务都会绘图。
实例如下:
define service {
use MongoDB,nagiosgraph
hostgroup_name MongoDB_Servers
service_description Mongo Memory Usage
check_command check_mongodb!12345!''!''!memory!130!260
servicegroups Mongodbservices
}
|
添加完,会有个下面的图标
- 效果如下
- 每个服务项都会有个 rrd 文件
在/usr/local/nagiosgraph/var/rrd 目录下的各自主机子目录下
对于无法生成 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、按下回车键保存当前选择,或者输入数字设置默认。
5、也可以直接输入命令:
/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix
6、检查一下是不是已经设置成功了。
alternatives --display mta
二、Postfix配置
1、Postfix 的配置文件是 main.cf,路径是:/etc/postfix/main.cf。
2、用文本编辑器打开它进行相应的修改,建议将这个文件下载到本地使用 Notepad++ 等常用的代码编辑器修改。
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
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
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 是否正常。
4、检测 cyrus-imapd,并创建新的邮件账号。命令:id cyrus 是用来查看 cyrus 管理员账号的,默认的就是 cyrus。创建邮件账号命令:
cyradm -u cyrus localhost (32 位)
cyradm -u cyrus localhost --auth plain (64 位)
cm freehao123 (新建)
lm (显示)
quit (退出)
5、 生成的邮件目录是放在/var/spool/imap 中,以目录形式存放。查看:ls /var/spool/imap/ ,目录名是用户名的首字母。
echo "Mail Content" | mail -s "Mail Subject" 201692488@qq.com
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于