nginx:是一个高性能,轻量级web软件
1、稳定性高(没有Aapache稳定) 2、资源消耗比较低,体现在处理http请求的并发能力很高,单台物理服务器可以处理到3万-5万个请求
稳定:一般在企业中为了保持服务器稳定,并发量的设置在2万个左右,占用内存2M左右
nginx主要功能:1、静态文件服务:nginx可以直接提供静态文件服务,如HTML,CSS,JSP,图片(多种形态的静态文件)
2、反向代理:本身自己可以作为一个反向代理的服务器,将客户端的请求转发给后端多个服务器可以实现负载均衡
正向代理:(了解)
特点:已知后端服务器,请求只会往固定的服务
反向代理:重点
nginx服务器通过轮询算法随机发送给其中一台web服务器
3台web服务器组成的集群形成了负载均衡,其中坏了一台也没事
面试题:什么是反向代理
反向代理的核心:客户端在请求时,沟通代理服务器,会把请求的流量通过轮询算法转发到后台不同的服务器,实现负载均衡。
3、处理动态内容:nginx处理动态内容很差,要转发到后台可以处理动态的应用如PHP,nginx 可以代理请求,发送到后端的动态服务处理,动态服务器处理完之后再通过nginx把动态请求响应给客户端
4、可以实现SSL/TLS加密(HTTPS的加密方式)数字证书认证机制
5、虚拟主机:nginx可以在一台服务器上设置多个主机,同一个服务器可以有多个域名和站点
6、URL重定向,可以实现灵活的URL重写和重定向,例子:想访问百度结果页面跳转到了新浪
7、缓存功能:nginx自带缓存功能
8、日志功能:可以详细的记录请求的信息,包括访问时间,请求路径,ip地址,响应状态
有助于故障排查(系统控制的日志记录在/var/log/messages,业务日志才会保存在自己的日志中)
access.log:记录谁访问了我
error.log:记录谁访问了我,但是记录的是访问失败的
总结:nginx的核心功能 1、静态文件服务 2、反向代理 3、缓存服务
nginx的主要应用场景:1、静态服务 2、反向代理,负载均衡 3、缓存服务 4、动态服务
面试题:nginx是如何实现高并发的?
1、nginx自身代码的问题,大量的底层代理进行了优化,同时自带一个功能模块,epoll模块支持高并发
2、nginx也是一个master进程,控制多个worker进程,master负责收集和分发请求,worker才是实际执行者,每一个请求进来时master就会拉起一个worker进程来处理请求
同时master进程也负责监控worker的状态,worker的数量要和cup一致或是两倍
worker在处理请求的过程中只受内存大小的限制,所以可以处理多个请求,再加上nginx本身就是轻量级的服务,处理请求时占用的内存本身就很少,所以可以起到大并发处理的能力
二者之间相互依赖,相互补充
在/usr/local/nginx路径下查看,有四个文件conf、html、logs、sbin
conf:保存所有nginx的配置文件,最核心的是nginx.conf
html:保存nginx的web文件,这个目录是默认目录可以改
html文件里面还有一个50x.html是nginx默认的错误页面提示
logs:保存日志文件
sbin:nginx二进制的启动脚本,可以结合不同参数进行使用
nginx -t:检测配置文件是否配置正确
-v:查看nginx版本号
-s:向主进程传输信号 停止,开启,重启,重新加载
-c:设置配置文件的默认路径
信号符:信号符结合kill命令
kill-USR1 pid号:日志分割 (pid号为nginx服务的pid号)
kill-s HUP pid号 :只要是kill只能跟pid号,重新加载
killall -s HUP nginx(跟服务名,也可以用pid号)
kill -s QUIT pid号:优雅退出,有人访问时不会结束进程,访问完了才会结束进程
kill -s WINCH pid号:优雅的结束worker,直到请求完成才会结束worker进程
worker_process 工作进程,也就是worker进程的数量,和cpu数量一致或者是两倍
worker_connections 每个进程可以处理的最大连接数
面试题:修改linux服务器文件的最大打开数量
ulimit -n 65535(文件打开的最大数量,linux只支持打开65535个文件) 临时修改
永久配置 vim /etc/security/limit.conf
在最后一行插入
* soft nproc 65535: 最大进程数软限制为 65535,即可以使用 ulimit -u 命令查看和修改的值。
* hard nproc 65535: 最大进程数硬限制为 65535,即最大可分配的进程数。
* soft nofile 65535:最大打开文件数软限制为 65535,即可以使用 ulimit -n 命令查看和修改的值。
* hard nofile 65535:最大打开文件数硬限制为 65535,即最大可分配的文件数。
这里使用的通配符 * 表示对所有用户生效。
最后要重启一下
面试题:
nginx中的conf配置文件:有几个模块,全局模块,event模块,http模块,在http模块中又包含了sever模块,location模块
event模块:配置影响nginx服务器与用户之间的网络连接
http模块:针对http请求的配置,代理,缓存,日志,反向代理,虚拟web主机,server模块
非http请求的方式,不能写在改模块中。反向代理:七层、四层反向代理,不能写在http模块
server模块:配置虚拟主机的相关参数,一个http模块中可以有多个server模块
location模块:匹配的是uri
root和alias的区别:
root 拼接,root指定的目录和location匹配的uri之间做的一个拼接,/opt/ky30/这两个路径都要真实存在,而且都是目录,并且在uri目录里面要有web文件
alias:匹配指定路径下的web文件
root后面有没有/无所谓,加不加都可以 alias加了/,后面也必须要有/,否则匹配不到
/指向/usr/local/nginx/ root指向/usr/local/nginx/html/
root标签可以设置重定向,alias不可以设置重定向
proxy_pass:反向代理配置,也是写在location模块中
总结:全局模块,全局生效,所有模块,用户都生效
event模块:影响nginx和用户的网络连接问题
http模块:主要模块,配置代理,缓存,日志,反向代理,虚拟web主机,server模块
只能是http请求才能写在http模块中
sever模块:包含在http模块中,不能单独设置
location模块:匹配uri包含在server当中也不能单独设置
补充:proxy_pass:反向代理
stream:四层,走的是tcp或udp流量,不能写在http中,要写在全局配置中
upstream:反向代理指定服务器的命令,在http模块中
七层,基于ip和端口,走http协议,只能在http模块中
实验:
安装依赖环境
创建用户组
把数据包拖进opt目录
解压
在源码包中进行编译
./configure --prefix=/usr/local/nginx \ 指定安装路径
--user=nginx \ 指定属主
--group=nginx \ 指定属组
--with-http_ssl_module \ http协议的加密模块
--with-http_v2_module \ 安装http2.0模块
--with-http_realip_module \ 允许nginx获取客户端的真实ip地址
--with-http_stub_status_module \ 可以记录nginx访问状态信息的模块
--with-http_gzip_static_module \ 支持页面压缩功能
--with-pcre \ 支持pcre库
--with-stream \ 支持tcp/udp的加密模块
--with-stream_ssl_module \ 支持tcp/udp的加密模块
--with-stream_realip_module 允许nginx作为代理服务器时可以获取客户端的ip
安装一下
修改权限把属主和属组都改成nginx
nginx有四个文件
1. conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件 .default是默认配置文件,改这些配置文件之前最好先做个备份
2. html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,
另外还有一个50x的web文件是默认的错误页面提示页面。3. logs:用来保存nginx服务器的访问日志错误日志等日志
4. sbin:保存nginx二进制启动脚本
nginx这个二进制文件添加到系统sbin默认路径下,让系统识别nginx的操作命令
nginx -t 检查配置文件是否配置正确
查看nginx版本号
添加Nginx系统服务
因为我们知道了pid号的位置,指定到了/usr/local/nginx/conf/nginx.conf 所以要在nginx下创建一个run的目录
修改配置文件,因为指定了pid号,所以pid的路径要改一下
重启一下nginx服务,这个时候nginx服务安装完成
核心:nginx配置文件 面试会问
我们说的配置文件指的是nginx.conf这个文件
面试题:如何修改linux服务器文件的最大打开数量
临时修改,linux的最大文件打开数为65535
永久修改
修改配置文件,在最后一行添加
要用reboot重启一下才能生效
查看一下修改是否成功
全局模块
http模块
server模块
location模块
修改配置文件
重启一下,发现404报错网页访问不了
实验一:访问状态统计
访问统计的页面
Active connections:1 当前的活动连接数
server accepts handled requests 已经处理的连接信息
1:已经处理的连接数 1:已经成功进行三次握手的连接数 1:已经处理请求的连接数
Reading:0 Writing:1 Waiting:0
正在进行连接保持的数 等待连接
多刷新几次发现变化的是已经处理请求的连接数
实验二:访问状态统计
基于用户名和密码的访问控制
安装httppasswd工具 对http访问基于用户名和密码的控制
创建一个用户,密码设置为123
修改passwd.db属主为nginx,只有root和nginx用户可以读
修改权限只能读
修改配置文件
添加认证配置
重启服务
这个时候就需要输入账户密码
实验三:基于ip地址的访问规则
修改配置文件
禁止192.168.88.10这个ip地址访问
实验四:基于域名的 Nginx 虚拟主机,基于一个服务器,创建多个主页
为虚拟主机提供域名解析
echo "192.168.10.19 www.kgc.com www.benet.com" >> /etc/hosts
为虚拟主机准备网页文档
mkdir -p /var/www/html/benet
mkdir -p /var/www/html/kgc
echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html
echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
修改Nginx的配置文件
server {
listen 80;
server_name www.kgc.com; #设置域名www.kgc.com
charset utf-8;
access_log logs/www.kgc.access.log; #设置日志名
location / {
root /var/www/html/kgc; #设置www.kgc.com 的工作目录
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 80;
server_name www.benet.com; #设置域名www.benet.com
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
重启服务,访问测试
systemctl restart nginx
浏览器访问
http://www.kgc.com
http://www.benet.com
实验五:基于nginx的虚拟ip主机
添加一张虚拟网卡
ifconfig ens33:0 192.168.146.21/24
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 192.168.146.20:80; #设置监听地址192.168.146.20
server_name www.kgc.com;
charset utf-8;
access_log logs/www.kgc.access.log;
location / {
root /var/www/html/kgc;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}1
}
server {
listen 192.168.146.21:80; #设置监听地址192.168.146.21
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
重启服务,并测试访问
systemctl restart nginx
浏览器访问
http://192.168.146.20
http://192.168.146.21
实验六:基于端口的 Nginx 虚拟主机
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 192.168.146.20:666; #设置监听 666 端口
server_name www.kgc.com;
charset utf-8;
access_log logs/www.kgc.access.log;
location / {
root /var/www/html/kgc;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 192.168.146.20:888; #设置监听 888 端口
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
重启服务,并访问测试
systemctl restart nginx
浏览器访问 http://192.168.146.20:666 http://192.168.146.20:888