Day48-Nginx-Web服务入门实践

1. 什么是Nginx

Nginx (“engine x”) 是一个开源的,具备高性能、高并发、高可靠性的WWW服务和代理服务软件。
由俄罗斯人IgorSysoev开发,作者将源代码以类BSD许可证的形式开源出来供全球使用。
2019年,F5将收购 NGINX,总价值约为6.7亿美元。F5负载均衡厂商。

开源,是说可以直接获取Nginx的源代码,并且可以免费使用。
高性能,是说处理速度非常快,且消耗的资源很低。
高并发,支持并发连接1-5万,且消耗的资源很低。
高可靠,体现在服务非常稳定。
并发5万,说的是静态小文件,NGINX(5万并发)+PHP(700个并发)

资料:
F5 以6.7亿美金收购 NGINX
链接: https://mp.weixin.qq.com/s/IE2LpfBhdDAvhm6NQg3LRw

F5 收购 NGINX,一个时代的落幕
链接: https://zhuanlan.zhihu.com/p/61966442

2.为什么选择Nginx

  1. 开源、免费
  2. 功能强大、并且简单易用
  3. 高性能、高并发
  4. 高可靠性、高可扩展性(模块多,开发第三方模块)
  5. 社区活跃(前1万互联网网站),排名no.1,且增长快。
    链接: https://w3techs.com/technologies/overview/web_server

3.nginx周边生态情况

OpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。诞生于 2007 年。

Kong网关是一款基于OpenResty(Nginx+Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Lua是脚本语言,nginx+Lua是脚本语言,对请求过滤、控制。mysql-proxy读写分离软件使用lua开发的。

Tengine是由淘宝网发起的Web服务器项目。
链接: http://tengine.taobao.org/

4.Nginx核心企业应用场景

4.1 作为Web服务软件

Nginx是一个支持高性能、高并发的Web服务软件,它具有很多优越的特性,作为Web服务器,和Apache相比,Nginx能够支持更多的并发连接访问,而占用的资源却更少,效率更高,在功能上也强大了很多,几乎不逊色于Apache,而且Nginx更新频率更快,社区用户更火爆。

  1. Nginx是一个静态Web服务软件,使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似lighttpd软件)。
    apache,lighttpd,IIS,Node.js

  2. 支持动静分离功能
    apache,lighttpd,IIS

  3. 支持动态Web服务扩展
    PHP(fastcgi_pass)
    JAVA(proxy_pass)
    Python(uwsgi_pass)
    memcache(memcache_pass)

    Nginx结合FastCGI运行PHP动态程序(使用fastcgi_pass方式)。
    Nginx结合proxy_pass支持tomcat动态程序(使用proxy_pass)。
    Nginx结合uwsgi_pass支持Python(使用uwsgi_pass)。
    ubuntu搭建网盘LNP(FastCGI),NFS存储客户端挂载的时候LAP(Apache 通过mod_libphp.so)

  4. 支持安全的Web服务(https)
    全站HTTPS是以消耗性能为代价的,其实可以登陆用https,支付使用https。

    (有图)

4.2 作为反向代理或负载均衡服务软件

在反向代理或负载均衡服务方面,Nginx可以作为Web服务、PHP/Tomcat/Python等动态服务及Memcached缓存的代理服务器,它具有类似专业反向代理软件(如Haproxy)的功能,同时也是一个优秀的邮件代理服务软件(最早开发这个产品的目的之一也是作为邮件代理服务),在Nginx的代理功能方面,已经支持TCP和UDP的代理,Nginx的代理功能已经越来越强大了。

  1. 负载均衡同类软件:
    haproxy,lvs,硬件:F5,netscaler
    nginx早期只支持http,现在也支持tcp/udp。
    支持tcp负载:负载mysql、应用服务。

  2. 企业面试题:Nginx、Haproxy、LVS区别与优缺点?
    链接: https://blog.csdn.net/qlj324513/article/details/81541282
    链接: https://blog.csdn.net/artaganan8/article/details/87973645
    作业:表格来回答
    Nginx Haproxy LVS
    功能1:
    特点1:

  3. 反向代理与负载均衡区别强调
    代理:微商海外代购。
    代理:代替别人做事。

    正向代理:由内向外。 代替,效率低
    代替局域网内PC,请求外部应用服务。

    反向代理:由外向内,代替,效率低
    代替外部的用户请求内部的应用服务器。

    负载均衡:转发、效率高(LVS)
    甩手掌柜,后抛请求。

  4. 负载均衡和Web服务的走向
    (有图)
    作业:了解什么是云原生。

4.3 缓存服务器

在Web缓存服务方面,Nginx可通过自身的proxy_cache模块实现类Squid等专业缓存软件的功能。

  1. 常见缓存软件
    squid,varnish,nginx,ats
    (有图)

4.4 Nginx主要应用场景总结

  1. 静态Web服务器:

    使用Nginx运行HTML、JS、CSS、小图片等静态数据(此功能类似lighttpd软件)。

  2. 配合运行动态Web服务器:

    Nginx结合FastCGI运行PHP等动态程序(例如使用fastcgi_pass方式)。

    Nginx结合proxy_pass支持Java动态程序(tomcat/resin服务)。

    Nginx结合uwsgi_pass支持Python。

  3. 反向代理/负载均衡

    http负载均衡

  4. 做Web缓存服务器(把文件放入内存里)。

  5. 支持安全的Web服务(https)

4.5 Nginx核心特点:静态小文件高并发,占用资源少。软件本身小。

企业面试时需要解答如下Nginx HTTP服务器的特色及优点:

  1. 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)。
  2. 资源消耗少:在3万并发连接下,开启10个Nginx线程消耗不到200MB内存。
  3. 可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的haproxy软件或lvs的功能。
    具备squid等专业缓存软件等的缓存功能。

4.6 Nginx是如何超越对手的?

2008冒头,当时Apache老大70%占有率,Nginx是如何超越对手的?
学习差异化:田忌赛马

  1. 学运维就是差异化。
  2. 分析apache老大缺点(select模型),5000并发。
  3. Web服务,高并发(符合时代的需求:处理高并发),核心采用epoll网络模型,squid,memcache都是用epoll网络模型。功能多,都实用。实用简单。
  4. 京东超越淘宝(杀出一片天空)。
    1.全网正品。
    2.当天即达。
    3.价格全网最低。
  5. 拼多多(杀出一片天空)
    1.便宜,随时退货。
    2.农村市场(农村包围城市)。
  6. 你们如何超越运维对手啊?
    1.思想加持:态度可以超越10年经验的。
    2.技术上:接近(2-3年经验),知识体系系统。

4.7 Nginx epoll模型和Apache select模型区别?

企业必考面试题:Nginx epoll模型和Apache select模型区别?

Nginx使用最新的epoll(Linux2.6内核)和kqueue(freebsd)异步网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached软件都采用的是epoll模型。
在这里插入图片描述

在这里插入图片描述

简单总结:
1)epoll和select网络IO处理模型。
2)epoll异步网络IO模型,支持高并发。
3)select传统的网络IO模型,高并发能力弱。
4)Apache则使用的是传统的select模型,Nginx使用高并发的epoll模型。

异步和同步:
以及异步的静态化的案例

网络IO模型概述
通常来说,网络IO可以抽象成用户态和内核态之间的数据交换。一次网络数据读取操作(read),可以拆分成两个步骤:
1)网卡驱动等待数据准备好(内核态)
2)将数据从内核空间拷贝到进程空间(用户态)。根据这两个步骤处理方式不一样,我们通常把网络IO划分成阻塞IO和非阻塞IO。

1.操作系统需要两种CPU状态
内核态(Kernel Mode):运行操作系统程序、操作硬件。
用户态(User Mode):运行用户程序
网络IO可以抽象成用户态和内核态之间的数据交换。

阻塞IO和非阻塞IO
阻塞IO,同步模型
非阻塞IO,异步模型

系统调用:内核态为用户态程序提供的访问接口。

阻塞IO。用户调用网络IO相关的系统调用时(例如read),如果此时内核网卡还没有读取到网络数据,那么本次系统调用将会一直阻塞,直到对端系统发送的数据到达为止。如果对端一直没有发送数据,则本次调用将永远不会返回。
非阻塞IO。当用户调用网络IO相关的系统调用时(例如read),如果此时内核网络还没有收到网络数据,那么本次系统调用将会立即返回,并返回一个EAGAIN的错误码。

网络IO就是用户态和内核态之间的数据交换。
网络IO事件:用户态和内核态之间的数据交换的【事件】。
检测处理事件机制:网络IO模型,epoll,select,kquene。

宿管大妈版:
select模型:轮询,遍历扫描:伙伴去宿舍找你,一个一个宿舍区找,效率低。
epoll模型: 看队列,伙伴去宿舍找你,先问宿管大妈,看看在哪间宿舍,然后直奔具体宿舍。效率高。

保姆看小孩尿尿版:
小孩:用户态和内核态之间的数据交换过程。
小孩撒尿是一次网络IO事件。
select模型:小孩撒尿(网络IO事件):挨个询问,如果尿尿拉出来,带着尿尿。
epoll模型: 小孩撒尿:事先告诉所有小孩,如果要尿尿,你就站出来。
阿姨就看有没有人站出来(队列)就可以了。

一个保姆照看一群孩子,如果把孩子是否需要尿尿比作网络IO事件,select的作用就好比这个保姆挨个询问每个孩子:你要尿尿吗?如果孩子回答是,保姆则把孩子拎出来放到另外一个地方。当所有孩子询问完之后,保姆领着这些要尿尿的孩子去上厕所(处理网络IO事件)

在这里插入图片描述

在这里插入图片描述

企业面试题:Apache select和Nginx epoll模型区别
链接: https://blog.51cto.com/oldboy/1855201
链接: https://blog.csdn.net/u012167045/article/details/78388458
链接: https://blog.csdn.net/wma664620/article/details/54234132

Linux用户态和内核态?
链接: https://zhuanlan.zhihu.com/p/69554144

4.8 Nginx软件核心组成

1.Nginx可执行命令:
它是Nginx本身框架以及相关模块等构建的一个二进制文件,这个文件就相当于汽车本身,所有的功能都由它提供。
2.nginx.conf配置文件:
它相当于驾驶人员,虽然二进制可执行文件已经提供了许多的功能,但是这些功能究竟有没有开启,或者开启后定义怎 样的行为去处理请求,都是由nginx.conf这个文件决定的,所以他就相当于这个汽车的驾驶员,控制这个汽车的行为。

3.访问日志access.log:
它相当于这辆汽车经过所有地方形成的GPS轨迹,access.log会记录Nginx处理过的每一条HTTP的请求信息、响应信息。

4.错误日志error.log:
它相当于飞机的黑匣子,当出现了一些不可预期的问题时,可以通过error.log将问题定位出来。
在这里插入图片描述

4.9 Nginx软件安装方式选择说明

4.9.1 Linux下安装软件方法

1、rpm安装
依赖多,解决依赖困难繁琐。

2、yum安装 *****
简单快,自动解决依赖。不能选择软件版本或软件存放路径。
(补救:去官方找最新yum源提供的最新rpm包)

3、编译安装(源码编译)*****
慢、复杂、需要GCC编译器,可以自定义安装(版本、软件路径)

4、将源码制作成rpm,然后放到yum仓库,实现yum自动安装。
一次性慢 复杂,安装快,可以自定义安装(版本、软件路径)

5、二进制安装
制作RPM YUM仓库搭建
链接: https://blog.oldboyedu.com/autodeploy-rpm/

安装方式优缺点
rpm 安装优点:简单、较快
缺点:需要找rpm 包,解决依赖很困难,无法定制化
yum 安装优点:简单、易用、高效。自动解决依赖关系
缺点:不能选择软件版本或软件存放路径(无法定制化)
编译安装优点:可以自定义安装(选择版本、软件路径、针对性优化)
缺点:很慢、安装复杂,需要 GCC 编译器等环境
综合安装将源码制作成rpm,然后放到本地yum仓库,实现 yum 自动安装。
优点:综合了 yum 和编译安装的所有优点。
缺点:需要提前制作,复杂,对技术人员能力要求高。
制作 RPM 、YUM 仓库搭建
https://blog.oldboyedu.com/autodeploy-rpm/
二进制安装MySOL软件一般会提供这种二进制安装方式,其它软件很少用。

4.9.2 Nginx 软件安装选择

1.源码编译:书里
优:1.版本随意。2.功能随意。缺:1.安装较复杂。2、安装时间长。

2.通过epel仓库yum(yum install nginx -y)
优:1.安装简单。缺:1.版本较低。2.不能定制版本。3.不能定制功能。
注:默认base仓库里有httpd。

3.通过官方仓库yum(yum install nginx -y)
优:1.安装简单。2.版本较新 3.配置更易读,老男孩推荐)
缺:1.不能定制版本。2.不能定制功能。
注:大多数情况下,使用的功能都已经放进去了。

补:
编译安装步骤(c语言代码编译3部曲)

./configure    #配置
make           #编译
make install   #安装

4.利用源码制作符合企业需求的rpm软件包,放到yum仓库里,最后yum安装。
优:1)安装简单。2)可以随意定制。3)高度满足需求。4)安装速度快。
缺:1)编译和配置yum仓库较复杂。
rpm包定制
链接: http://blog.oldboyedu.com/autodeploy-rpm/

yum仓库搭建
链接: http://blog.oldboyedu.com/autodeploy-yum/

4.10 Nginx软件安装及部署

同时使用编译和yum安装方法
学习编译方式原因:
1)不少企业还在编译安装。2)企业有编译第三方模块需求。
学习yum方式原因
1)十分简单。2)默认编译的模块可满足大多数企业应用。

4.11 编译安装实践

  1. 下载源码包
mkdir -p /server/tools
cd /server/tools
wget http://nginx.org/download/nginx-1.20.1.tar.gz

############
[root@web02 tools]# ls -lh
总用量 1.1M
-rw-r--r-- 1 root root 1.1M 525 23:34 nginx-1.20.1.tar.gz
  1. 安装依赖
yum install pcre pcre-devel -y        #rewrite正则相关pcre:URL重写软件,实现伪静态\URL跳转等、SEO优化。
yum install openssl openssl-devel -y  #https加密访问用它。
rpm -qa pcre pcre-devel openssl openssl-devel
  1. 编译安装步骤
userdel -r www
useradd -u 1111 -s /sbin/nologin www -M 
id www
tar xf nginx-1.20.1.tar.gz 
cd  nginx-1.20.1/
./configure  --user=www --group=www --prefix=/application/nginx-1.20.1/ --with-http_stub_status_module  --with-http_ssl_module --with-pcre
make 
make install
ln -s /application/nginx-1.20.1/ /application/nginx

lsof -i :80
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx 
netstat -lntup|grep nginx

注意:
1)每一步结尾直接echo $?验证是否正确。返回0代表步骤正确
4. 验证最终的安装是否正确。

wget 10.0.0.8
curl 10.0.0.8

或浏览器访问
5. configure参数作用

nginx -V     查看安装的参数及模块
参数作用:
--prefix=PATH  路径
--user=USER    用户
--group=GROUP  组
--with-pcre    伪静态
--with-http_stub_status_module 状态
--with-http_ssl_module      加密 443

配置环境变量PATH,加入nginx命令路径

vim /etc/profile     #增加:
export PATH="/application/nginx/sbin/:$PATH"

增加后执行下面,使之生效

. /etc/profile

检查测试:

[root@web02 nginx-1.20.1]# echo $PATH
/application/nginx/sbin/:/application/nginx/sbin/:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@web02 nginx-1.20.1]# nginx -t
[root@web02 nginx-1.20.1]# nginx -s reload

改成systemctl启动方式

[root@web02 nginx-1.20.1]# cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/application/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /application/nginx/logs/nginx.pid
ExecStartPre=/application/nginx/sbin/nginx -t
ExecStart=/application/nginx/sbin/nginx
ExecReload=/application/nginx/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
[root@web02 nginx-1.20.1]# chmod +x  /usr/lib/systemd/system/nginx.service
[root@web02 nginx-1.20.1]# systemctl enable nginx
[root@web02 nginx-1.20.1]# pkill nginx
[root@web02 nginx-1.20.1]# systemctl start nginx
[root@web02 nginx-1.20.1]# lsof -i :80
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   5504 root    6u  IPv4  51393      0t0  TCP *:http (LISTEN)
---------------------------------------------------------------------

一个企业运维哥们的东西:
1、测试配置文件是否有异常:

	 /usr/local/nginx/sbin/nginx -t

2、启动:

	 /usr/local/nginx/sbin/nginx

3、指定配置文件启动(多实例):

	 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/config/nginx.conf

4、重新打开日志:

	kill -USR1 `cat /usr/local/nginx/nginx.pid `

5、发送平滑升级信号:

	kill -USR2 `cat /usr/local/nginx/nginx.pid`

6、平缓停止worker process

	kill  -WINCH `cat /usr/local/nginx/nginx.pid.oldbin

7、停止老的进程

	kill -QUIT `cat /usr/local/nginx/nginx.pid.oldbin`

(编译安装完成)

4.12 配置官方源使用yum安装(web01 10.0.0.7)*****

  1. 配置nginx源
[root@web ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

非交互操作注意转义字符

cat > /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
  1. 安装并启动
yum install nginx -y
rpm -qa nginx

#搭建了网盘测试集群NFS存储
[root@web01 ~]# lsof -i :80
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1149 root    4u  IPv6  22941      0t0  TCP *:http (LISTEN)
[root@web01 ~]# systemctl stop httpd
[root@web01 ~]# systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

systemctl start nginx
systemctl enable nginx
systemctl status nginx
netstat -lntup|grep nginx
  1. 验证最终的安装是否正确。
wget 10.0.0.7
curl 10.0.0.7

或浏览器访问
只要将结果的处理:shell编程判断

[root@web01 ~]# wget -q 10.0.0.7 &>/dev/null && echo $?
0
[root@web01 ~]# curl -s 10.0.0.7 &>/dev/null && echo $?
0
[root@web01 ~]# nginx -v
nginx version: nginx/1.20.1

(yum安装完成)

  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值