nginx与apache的对比
nginx优点
nginx中INPUT OUTPUT模型
零拷贝技术
原理:减少内核空间和用户空间的拷贝次数,增加INPUT OUTPUT的效率
网络I/O 模型
同步,异步 : 消息反馈机制
阻塞和非阻塞
阻塞型I/O模型:不利于处理高并发
非阻塞型I/O 虽然可以在等待的时间内,去接待其他的应用程序,但是不会告诉nginx什么时候结束没有反馈机制,需要nginx不停的去访问,反而一直消耗资源。
多路复用I/O模型,是nginx使用的模型,多出来select应用进程,nginx不直接与内核交流,而由select程序交流
select poll epoll区别
select性能最差,epoll性能最好 在nginx中如果是linux平台则默认为epoll,而windows不支持,所以nginx默认采用哪种连接模型,视情况而定!
nginx工作逻辑
nginx模块
nginx使用场景
编译安装nginx过程
第一步
第二步 新建nginx用户便于管理
第三步切换到/opt下,下载软件包wget http://nginx.org/download/nginx-1.18.0.tar.gz
第四步解压
./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
第五步 make make install
第六步 做软连接,为了让系统识别nginx 能使用起来
第七步 修改权限,因为新建立的nginx用户
这边其实可以直接启动nginx了,但是如果想停止的话,只能杀死nginx这个进程
第八步,所以要自启动nginx
配置文件的内容
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000[Install]
WantedBy=multi-user.target
最后启动nginx即可 systemctl start nginx
注意因为是新版的安装包,必须安装openssl-devel
表明nginx交给systemctl这个进程来管理,如果停止则 systemctl stop nginx
解释说明:
做一个软连接 为了让系统识别nginx
没做软连接之前,系统识别不了nginx
补充说明:如果正确使用sbin 或bin
查看第三方程序在哪个里面 pwd可以查看,如果在sbin就用sbin 如果在bin,就用bin
解析为什么软连接的的路径 make install生成安装目录 才会有nginx
有两种方法可以识别nginx
1.echo $PATH,将nginx的路径加入到此文件中
2.做软连接
指定配置,不以配置文件中的为准
nginx -g
修改一下 nginx -g 进程数
在改之前,停止nginx运行 然后在配置文件中,将文件中的配置文件工作进程数注释掉,随后再nginx -g 指定配置即可成功
查看语法是否有误
开启nginx进程 并且查看
master process:是nginx的主进程,用来管理worker process进程,并且可以读取配置文件
worker process:工作进程,用来处理客户的连接请求
停止nginx
1.先查看nginx的pid号 pid号在logs目录里面
pid号与主进程号是一样的
杀除进程号
killall -3 nginx中killall是根据进程名杀除,但是会出现误杀。
重载
或者使用nginx的-s选项 可以通过--help查看
如果要停止nginx,可以使用nginx -s quit 随后使用lsof -i :80 去检验
如果想使用重载,则使用nginx -s reload
平滑升级:就是在不关闭nginx的情况下,升级nginx
举例说明,先在官网下载一个最新版本的nginx,1.25
随后,查看自己的nginx版本号,nginx -v ./nginx -v 可以看见25版本
将最新版本的nginx挪到xshell中
然后使用./configuer 跟make 即可 不需要使用make install (怕会被覆盖)
./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
随后查看一下,会生成objs的文件夹,此文件夹中,就存在25版本的文件
接下来要做替换,先找到24版本的nginx,改个名字
改完名字之后,再切换到25版本中的objs(因为里面有25版本的nginx的二进制文件)
接着,去24版本的路径中去查看
接着,继续切换到25版本的路径中
最后证实一下
或者通过客户端去访问服务端
回滚
日志分割
kill -USR1 <pid号> = nginx -s reopen
举例说明,日志分割,每天都要生成新的日志 怎么才能让nginx知道新日志的产生,并且将日志内容写入新的日志里面
打开第二个终端去curl第一个终端,然后再次访问logs 再次查看
访问之后,再进入第一个终端里面,可以查看到此时日志是有记录的
模拟日志分割 将原来的文件改名,然后再建立一个新日志文件
再次利用第二个终端去访问curl一下,然后观察ll logs的日志情况
可以观察到日志文件的内容还是在旧文件里面,并没有在新文件里面产生日志
所以要nginx知道,要把内容加载到新日志文件里面
然后第二终端再curl 在观察ll,此时nginx已经知道并且把内容传到新日志里面
这边还可以使用kill - USR1 <pid号> ,这边必须要找到主进程pid号
查看更多的信号
认识nginx里的主配置文件
修改版本 或者关闭版本
在没关闭版本之前,使用另外一个curl -I 查看头部信息 查看一下
在nginx主配置文件中修改,并且要在http配置中修改,因为版本跟网页相关 所以在http配置中修改
随后在另外一台终端再curl -I 因此看不见版本号了
自定义版本号
第一步,去修改源码包里面的文件 core为核心代码
改完之后为
第二步 去改头部信息
第三步 再从头编译安装nginx
然后 make make install
然后重启nginx
最后,在另外一个终端再curl
这边为什么是lucky,因为在主配置文件中 server_tokens 0ff了
如果想看nihao/9527,则在主配置文件中修改即可 改成on
随后重载
在另外一个终端curl
全局配置
在全局配置中的文件数要跟event配置中的进程处理连接数要相同!!
补充:如果要向提高每个工作进程的连接数,上面文件数跟连接数只是在程序上面设置,系统也要设置。
临时修改 ulimit -n 数字
缺点:服务器重启之后,就会还原变成默认值1024
永久修改: 进入、etc/security/ (进入重要的配置文件中)
验证:
重启服务器
验证一下,成功
问题展示:
如果想要服务器添加5万并发,该如何设置(服务器有2个cpu) 系统设置(设置最大能打开的文件数)+程序设置
第一步:先查看cpu数量 (有两个,所以五万除以2,所以每个进程的文件数跟连接数改为25000,五万的一半)
第二步 在nginx主配置文件中修改 主进程数、文件数、连接数、use epoll
以上步骤为在程序中设置最大的进程数,同时系统也要设置
第三步 在/etc/security/中配置最大打开的文件数
要重启
第四步保存后退出,并且重启nginx服务
验证一下:
打开第二终端(相同)查看进程号
查看max open files 为25000成功
正常的并发数量:文件数*连接数 此时nginx为网站服务器
反向代理=文件数*连接数 /2 此时nginx为代理服务器
nginx要处理 客户端过来的连接 还有 给客户端服务器发来的连接
http配置
例如,当在网页中访问自己的主页,
这个里面的格式就是因为http中main决定的。
web服务监听设置
访问前缀为ky33时,就是从/var/www/html中去找到abc.html文件
访问前缀为ky35时,就是从/var/www/root中去找到abc.html文件
root是路径
解析 :先把ky33当做文件去看,会优先访问这个目录有没有ky33这个文件,如果有直接返回,如果没有,则把ky33当做目录,去目录里面找index.html文件,如果还是没有则出现404报错
举例说明
在nginx.conf配置文件中修改内容
在conf配置文件中建立var文件夹,再分别在www web里面建立ky33 ky35的目录,并且写入文件内容
最后重启一下nginx服务
进入网页中输入网址
成功
alias别名
举例说明,在ky35中,将root改为alias,然后去访问网页,会显示错误,在nginx.logs里面看一下错误日志
因此,只需要在web文件夹中在建立一个abc.html的文件即可
然后再访问网页,成功
root与alias
nginx访问状态统计设置 (nginx是一个网站,要看当前并发量、处理多少连接、多少人访问)
第一步查看模块是否下载
nginx -V
模块设置
如果想关闭模块前面加without 想开启 加 with
第二步 开启模块
进入到nginx.conf的配置文件中修改