一款高性能、轻量级Web服务软件
稳定性高
系统资源消耗低
对HTTP并发连接的处理能力高
单台物理服务器可支持30000~50000个并发请求
NG并发连接能力由2个因素的影响:1.CPU的个数 2.本地物理服务器系统的最大文件打开数
1、Nginx简介
Nginx (“engine x”)
是一个高性能的HTTP和反向代理服务器。Nginx是由IgorSysoev为伊
罗斯访问点开量第二的Ramb1er.ru站发的,第一个公开版本0.1.0发布于2004年10
月4日其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,Nginx1.0.4发布。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/PoP3)代理服务器,单台物理服务器可支持30000~50000个并发请求。并在一个BsD-like协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:PaM6nep)使用。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Ngx网站用户有:百度BWS、新浪、网易、腾讯、等。
Tengine:
Tengine是由淘宝网发起的Neb服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好的检验。(可以这样理解:淘宝网拿到了Nginx源代码之后,进行了功能的填充、优化等等,然后提交给Nginx官方,但是由于Nginx官方相应慢甚至不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循GPL的原则上进行二次开发,于是就出了现在的Tengine这个版本)
Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
Nginx,所有请求都由一个线程处理,Apache单个线程处理单个请求;
Nginx避免子进程的概念,Apache是基于子进程的;
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于cPU和内存等硬件;
Nginx.支持热部署,Apache不支持热部署:
Nginx对于静态文件处理具有更高效率,Apache相对一般;
Nginx在反向代理场景具有明显优势,Apache相对一般。
Nginx应用场景 1.静态服务器(图片、视频服务、文本)
1.关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
nginx-1.12.0.tar.gz
2.安装依赖包
#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提
供相应的库和头文件。
yum -y install pcre-devel zlib-devel gcc gcc-c++make
3.创建运行用户、组(Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
4.编译安装Nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1ZDqwfC-1658288766881)(C:\Users\LIU\Desktop\iP7nZXd3RywczQF.png)]
6.添加Nginx系统服务
方法一:
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig:35 99 20
这是固定格式,2345表示运行级别,之后为开机执行顺序和关机执行顺序
#description:Nginx Service Control Script//这也是必须的
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "s1"in
start)
$COM
;;
stop)
kil1 -s QUIT $(cat SPID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage:$0 {startlstoplrestart|reload)"
exit 1
esac
exit 0
方法二:
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Q
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
Execstart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP SMAINPID
Execstop=/bin/kill -s QUIT SMAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[服务的说明]
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务
[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定
PIDFile以便systemd能够跟踪服务的主进程。
Execstart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
如提高每个进程的连接数还需执行"ulimit-n
55535"命令临时修改本地每个进程可以同时打开的最大文件数。
在工iux平台上,在进行高并发TcP连接处理时,最高的并发数量都要受到系统对用户单一进程时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit-a命令查看系统允许当前用户进程打开的文件数限制。
etc/security/limits.conf
epo1l是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用Io接口select./poll的
增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CU利用率。
若工作进程数为8,每个进程处理4096个连接,则允许Ngix正常提供服务的连接数
已超过3万个(4096×8=32768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。
1.我准备了1.23.0版本的压缩包,原版本是1.12.2的版本
tar -zxvf nginx-1.20.2.tar.gz
解压,后进行编译
./configure --prefix=/opt/software/nginx
cd nginx-1.12.2/
mv /opt/nginx-1.2 /opt/nginx.old
./nginx -s stop(停止旧版本)
./nginx(启动)
成功:
Apache是同步多进程模型,一个连接对应一个进程,而Nginx是异步的,多个连接(万级别)可以对应一个进程。
Nginx轻量级,抗并发,处理静态文件好。
Apache超稳定,对PHP支持比较简单,Nginx需要配合其他后端用,处理动态请求有优势,建议使用前端Nginx抗并发,后端apache集群,配合起来会更好。
vim /usr/local/nginx/conf/nginx.conf
1.全局配置
user nobody;
#运行用户,若编译时未指定则默认为nobody
worker processes 4;
#工作进程数量,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了
#error log logs/error.log;
#错误日志文件的位置
#pid logs/nginx.pid;
#PID文件的位置
2.I/0事件配置
events
use epoll;
#使用epo11模型,2.6及以上版本的系统内核,建议使用epo11模型以提高性能
worker connections 4096;
#每个进程处理4096个连接
#如提高每个进程的连接数还需执行"u1imit-n65535”命令临时修改本地每个进程可以同时打开的最大文件数。
在L1ux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统
为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit-a命令查看系统允许当前用户进程打开的文件数限制。
/etc/security/limits.conf
epol1是Linux内核为处理大批句柄而作改进的pol1,是Linux下多路复用Io接口se1ect/po11的增强版本,它能显著的减少程序在大量并发
连接中只有少量活跃的情况下的系统CPU利用率。
若工作进程数为8,每个进程处理4096个连接,则允许Ng1x正常提供服务的连接数
已超过3万个(4096×8=32768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
##日志格式设定
#log_ format main
'Sremote_addr $remote user [Stime local]“Srequest”
故
‘sstatus sbody bytes sent “shttp referer”’
‘“Shttp_user_agent”“Shttp_x forwarded for”’;
#访问日志位置
#access log logs/access.log main;
#支持文件发送(下载)
sendfile on;
##此选项允许或禁止使用socket的TCP CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#tcp nopush
on;
#连接保持超时时间,单位是秒
#keepalive timeout 0;
#keepalive timeout 65;
##gz1p模块设置,设置是否开启gzip压缩输出
#gzip on;
##Web服务的监听配置
server
##监听地址及端口
listen 80;
##站点域名,可以有多个,用空格隔开
server name www.kgc.com;
舞网页的默认字符集
charset utf-8;
##根目录配置
location /
##K网站根目录的位置/usr/1ocal/nginx./htm1
root html;
##默认首页文件名
index index.html
index.php:
$remote addr与http x forwarded for用以记录客户端的ip地址:
$remote user:用来记录客户端用户名称:
$time local:用来记录访问时间与时区:
$request:用来记录请求的url与http协议
$status:用来记录请求状态:成功是200,
$body bytes sent:记录发送给客户端文件主体内容大小:
$http referer:用来记录从哪个页面链接访问过来的:
h t t p u s e r a g e n t : 记录客户浏览器的相关信息:通常 w e b 服务器放在反向代理的后面,这样就不能获取到客户的 I P 地址了,通过 http user agent:记录客户浏览器的相关信息: 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过 httpuseragent:记录客户浏览器的相关信息:通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过remote add拿到的Ip地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加k forwarded for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
location常见配置指令,root、alias、proxy pass
root(根路径配置):root/var/ww/html
请求www.kgc.com/test/1.html,会返▣文件/var/www/html/test/1.html
alias(别名配置):alias/var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
systemctl restart nginx
浏览器访问http:L/192,168,1019 /stat13
Active connections:表示当前的活动连接数:
server accepts handled requests:表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的Tcp握手次数、
已处理的请求数。
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
systemctl restart nginx
浏览器访问http:L/192,168,1019 /stat13
Active connections:表示当前的活动连接数:
server accepts handled requests:表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的Tcp握手次数、
已处理的请求数。
可cur1-s http:/192,.168.10.19/status结合awk与1f语句进行性能监控。