nginx:
apache:
apache是以进程为基础的结构,进程比线程消耗更多的系统开支,不太适应于多处理器环境,因此,在一个apache web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。
1.nginx相对于apache缺点
存在的理由:一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache
相比apache,nginx使用更少的资源,支持更多的并发连接,体现更高的效率
nginx配置简洁,apache较复杂
i/o在计算机中指input/output,iops即每秒的输入输出量是衡量磁盘性能的主要指标之一。iops是指单位时间内系统能处理的i/o请求数量,一般以每秒处理的io请求数量为单位,i/o请求通常为读或写数据操作请求
一次万主任的i/o是用户空间的进程数据域内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据copy到用户空间的j进程内存当中,所以简单说i/o就是把数据从内核空间中的内存数据复制到用户空间中进程的内存中
1.获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3)
2.构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4)
3.返回数据,服务器将已构建好的响应再通过内核空间的网络I/0发还给客户端(5-7)
同步/异步:关注的是消息通信机制,即调者用在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。
阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态
//解释
--prefix=/usr/local/nginx \
#安装路径
--user=nginx \
#指定用户名
--group=nginx \
#指定用户组
--with-http_stub_status_module
#启用此模块支持状态统计
//
注意:nginx有主进程和工作进程,一定要杀死主进程(即父进程)
三种方式升级nginx服务
#平滑升级:
kill -USR2 <PID号>
#新版本升级:
tar zxvf nginx-XX.XX.tar.gz #XX代表新版本号
cd nginx-XX.XX
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
#重新编译:
make #重新编译
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old #备份旧文件,方便回滚
cp objs/nginx /usr/local/nginx/sbin/nginx #将新的运行文件放入安装的运行目录
make upgrade #编译升级
#或者先 killall -3 nginx ,再 /usr/local/nginx/sbin/nginx
方法一:
[root@yuji ~]# vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: 35 99 20
#description:This is nginx control script
RUN="/usr/local/nginx/sbin/nginx"
PID=`cat /usr/local/nginx/logs/nginx.pid`
case "$1" in
start)
$RUN
;;
stop)
kill -3 $PID
;;
restart)
kill -3 $PID
$RUN
;;
reload)
kill -1 $PID
;;
*)
echo "正确用法为:$0 {start|stop|restart|reload}"
esac
[root@yuji ~]# chomod +x nginx //给nginx赋予权限
[root@yuji ~]# chkconfig --add nginx //将nginx加入chkconfig
[root@yuji ~]# chkconfig --list //查看chkconfig列表
[root@yuji ~]# service nginx start //开启服务,或 systemctl start nginx
[root@yuji ~]# ss -natp | grep nginx //查看服务
方法二:
将nginx命令加入服,编写/lib/systemd/system/nginx.service文件。
[root@yuji ~]# cd /lib/systemd/system/
[root@yuji system]# vim nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@yuji system]# systemctl daemon-reload //重载配置
[root@yuji system]# systemctl start nginx //启动服务
[root@yuji system]# netstat -natp | grep nginx //查看服务
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2154/nginx: master
#之后可以使用systemctl start|stop|restart|enable nginx 来管理服务
/lib/systemd/system/nginx.service文件注释:
[Unit] #服务的说明
Description #描述服务
After #依赖,当依赖的服务启动之后再启动自定义的服务
[Service] #服务运行参数的设置
Type=forking #是后台运行的形式,使用此启动类型应同时指定
PIDFile= #以便systemd能够跟踪服务的主进程
Execstart #为服务的具体运行命令
ExecReload #为重启命令
ExecStop #为停止命令
PrivateTmp=true #表示给服务分配独立的临时空间
#注意:启动、重启、停止命令全部要求使用绝对路径
[Install] #服务安装的相关设置,指定运行级别,可设置为多用户(即字符界面)
使用浏览器输入本机IP地址,访问验证
默认首页文件位置在/usr/local/nginx/html/目录下
/usr/local/nginx/conf/目录下
主配置文件中有六个主要模块:
1.核心模块:是nginx服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析,事件驱动机制,进程管理等核心功能
2.标准HTTP模块:提供HTTP协议解析相关的功能,比如:端口配置、网页编码设置、HTTP响应头设置,等等
3.可选HTTP模块:主要用于扩展标准的HTTP功能,让nginx能处理一些特殊的服务,比如:flash多媒体传输,解析geolp请求,网络传输压缩,安全协议ssl支持等
4.s邮件服务模块:主要用于支持nginx的邮件服务,包括对pop3协议,imap协议和smtp协议支持
5.stream服务模块:实现反向代理功能,包括tcp协议代理
6.第三方模块:是为了扩展nginx服务器应用,完成开发者自定义功能,比如:json支持,lua支持等
#user nobody; ##运行用户
worker_processes 1; ##工作进程数,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了
#error_log logs/error.log; ####错误日志文件的位置
#pid logs/nginx.pid; ####PID文件的位置
events {
use epoll; #使用 epoll 模型以提高性能,2.6 以上版本建议使用
worker_connections 4096; #每个进程处理4096个连接
}
epoll(socket描述符)是Linux内核]为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数 已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性 能表现。
1.如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
2.在Linux平台.上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
3.可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
epoll(socket描述符)是Linux内核]为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数 已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性 能表现。
如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
在Linux平台.上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
nginx 内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前的 Web 访问情况, 配置编译参数时可添加–with-http_stub_status_module 来启用此模块支持,可以使用命令
可以使用命令/usr/local/nginx/sbin/nginx –v 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块。
操作步骤:
1.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置(修改之前进行备份)
#先拷贝一份配置文件
[root@localhost conf]#cp /usr/local/nginx/conf/nginx.conf nginx.conf.bak
# 修改 nginx.conf 配置文件
[root@localhost conf]#vim /usr/local/nginx/conf/nginx.conf
events {
use epoll;
worker_connections 1024;
}
server {
listen 80;
server_name www.yxp.com;
charset utf-8;
location / {
root html;
index index.html index.htm;
}
location /status { ##访问位置为/status
stub_status on; ##打开状态统计功能
access_log off; ##关闭此位置的日志记录
}
2.在网页中输入 192.168.11.11/status 测试2.在网页中输入192.168.11.12/status 测试
Active connections: 2
server accepts handled requests
2 2 4
Reading: 0 Writing: 1 Waiting: 1
Active connections: 2
server accepts handled requests
2 2 4
Reading: 0 Writing: 1 Waiting: 1
3.结合awk来写shell脚本,如果链接数过高报警
#/bin/bash
a=$(curl 192.168.59.108/status)
b=$(echo $a|awk '{print $3}')
if [ $b -ge 1000 ]
then
echo "连接数过高"|mail -s test 1943466298@qq.com
else
echo "运行良好"
fi
1.生成用户密码认证文件
#安装工具
[root@localhost conf]#yum install -y httpd-tools.x86_64
#如果没有密码则设置
[root@localhost conf]#htpasswd -c /usr/local/nginx/passwd.db zhangsan
#第二次不用加-c
[root@localhost conf]#htpasswd /usr/local/nginx/passwd.db lisi
[root@localhost conf]#chown nginx /usr/local/nginx/passwd.db
[root@localhost conf]#chmod 400 /usr/local/nginx/passwd.db
2.修改主配置文件相应的目录
location /status {
#添加密码认证
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
# stub_status on;
# access_log off;
root html;
index index.html index.htm;
}
3.重启服务
[root@localhost conf]#nginx -t
[root@localhost conf]#systemctl restart nginx.service
4.在网页测试
http://192.168.11.111需要输入账号和设置的密码才能登录