1.nginx的简介:
**概念:**nginx是一款轻量级的HTTP服务器,也是一款邮箱代理服务器,同时具备反向代理、通用TCP/UDP代理的功能
**特点:**1.支持高并发即单机nginx可支持十万级的并发连接,经过优化后最高可支持百万级并发连接
2.内存资源消耗低。在同级web服务器中,nginx占用的内存最少,一万非活跃的http keep-alive连接仅消耗2.5m内存
3.高扩展性。和Apache一样,nginx采用模块化设计,并支持非常丰富的第三方模块
4.高可靠性。nginx采用master-worker模式,如果worker出现故障,master可以快速开启一个新的worker来提供服务
**架构:**主进程master:检查nginx配置是否正常;创建、监控worker进程的数量和状态;接收对nginx的管理指令,并做出对应的操作
工作进程worker:处理客户端的请求;接收master发来的指令,并做出对应的操作

注意:默认情况下,nginx会建立和服务器CPU核心数相等的worker进程,woker进程之间相互独立,若一个进程故障不会影响其它进程
**nginx的关键工作机制:**抢占机制:当客户端发起请求时,会激活accept_mutex互斥锁,哪个worker抢占了该互斥锁,该客户端的请求就由那个worker响应和处理

异步非阻塞模式:在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待,直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就算worker被阻塞,新的客户端请求也会被正常处理

nginx的正向代理功能:

分析:它的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我,从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
结论:正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问google用vpn代理去访问(用户知道要访问真正的服务器)
nginx的反向代理功能:

分析:反向代理正好相反,它也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端
结论:客户端向nginx发送请求,nginx收到客户端发送的请求后,将请求转发给后端服务器,然后后端服务器将客户端请求的资源返回给nginx,最后nginx将资源返回给客户端(nginx反向代理通过位于location中的proxy-pass实现)
此外在反向代理的过程中,客户端向代理请求资源时用的端口可以和服务器提供服务的端口不一样

**nginx的负载均衡功能:**nginx可以提供四层和七层的负载均衡;nginx的负载均衡功能通过位于http中的upstream实现;nginx提供了多种负载均衡的算法,如轮询、权重等;伦询算法下,nginx会轮流将请求发送给不同的服务器,使每一个服务器都均等的提供服务;权重算法下,nginx会按照配置的权重比例,将请求发送给服务器。性能较好的服务器将提供更多的服务,性能交差的服务器会提供较少的服务
在linux系统中可以使用yum install nginx来安装nginx
在nginx中常用的命令有:


nginx的配置文件:

nginx的主配置文件位于/etc/nginx/nginx.conf,分为三个部分:全局配置、性能配置和http模块配置





2.nginx的实操部分:
**快速搭建一个网站:**由于nginx的配置文件中默认网页的存放位在/usr/share/nginx/html/idenx.html中,我们可以修改网页目录到我们想要指定的地方,可以在创建一个www目录来替换创建一个/www/web01的目录在web01中创建一个index.html的文件用于存放网页的前端代码,然后修改/etc/nginx/nginx.conf文件(只需修改42行)

重启nginx服务(systemctl restart nginx),然后打开浏览器访问虚拟机

搭建密码验证功能来访问网站数据:
创建账户

增加密码访问控制(其中htpasswd是生成密码数据的指令;-c:表示第一次生成,会创建存储密码的文件,第二次创建密码时不能增加-c参数,否则会覆盖;/etc/httpd/passwd : 存储访问网站的密码文件,passwd为文件名,名称可以自定;test01需要验证密码访问的账户名称)

设置访问网站是需要验证密码:

重启nginx服务并测试
