Nginx -- 1.介绍

Nginx

简介

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善(俄罗斯人对软件破解、渗透之类的很有一套,中国破解多,大多是破解小软件,他们破解大公司的,比如XP),在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。HTTP、IMAP、POP3、SMTP、反向代理服务器;支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展(这些扩展等后面会说到)。

前列公司已经超过apache,大大小小公司一起算还是apache份额大。

特点:
1)热部署:不用重启重载
2)高并发:能被多人连接官方说支持5W并发,实际2-3W,但也很厉害了;
3)低内存消耗:比起apache消耗少
4)处理请求快:处理静态资源的时候很快
5)高可靠

但是nginx的高操作用处并不是用在这里(说白了就是吹它处理高并发的好处),有三大核心功能:
反向代理:让用户准确直达网站哪个地方
负载均衡:把请求分给集群的同类型同内容服务器
动静分离:可以把动态的分给动态资源处理服务器,静态的给静态资源处理服务器;便于做CDN(CDN就比如假如各个省都有服务器的话,就每个省的服务器都放一套系统,然后每个人访问网站的请求就引流给自己省的服务器,这样速度也变快了)和静态文件(如网页,图片)缓存:

目录
nginx
–conf 配置文件的目录
–html 网页文件,默认有两个html文件,一个是50x.html,一个是index.html
–logs 日志文件,一开始是空的
–sbin 启动主要的二进制程序

官网:http://nginx.org/
下最近稳定的,没必要下最新的
https://lnmp.org/nginx.html

网站架构变化

高并发已经成为当前互联网企业面临的巨大挑战

淘宝架构变化

淘宝的核心技术(国内乃至国际的Top,这还是2011年的数据)

  • 拥有全国最大的分布式Hadoop集群(云梯,2000左右节点,24000核CPU,48000GB内存,40PB存储容量)
  • 全国分布80+CDN节点,能够自动找寻最近的节点提供服务,支持流量超过800Gbps
  • 不逊于百度的搜索引擎,对数十亿商品进行搜索,全球最大的电商平台
  • 顶尖的负载均衡系统,顶尖的分布式系统,顶尖的互联网思想,功能多样运行极其稳定
  • 丰富的生态产业以及先进的数据挖掘技术
  • ……很多很多
    淘宝技术演变,摘自《淘宝技术这十年》
  • 马总在2003年4月7日秘密叫来阿里巴巴的十位员工,来到杭州一个隐秘的毛坯房,要求他们在一个月左右的时间内做出一个C2C网站。结果当然还是直接买的快,一个基于LAMP架构的网站,原名是PHPAuction,老美开发的一个拍卖网站。当然必须要做修改才能用。
  • 2003年底,淘宝注册用户23万,PV 31万/day,半年成交额3371万
  • 很显然MySQL无法撑得起如此大的访问量,数据库瓶颈出现了。幸好阿里的DBA队伍足够强大,他们使用Oracle替代了MySQL。Oracle那时就已经有了强大的并发性访问设计——连接池,从连接池取连接的耗费比单独建立连接少很多。但是PHP当时并没有官方提供支持语言连接池特性,于是多隆前辈用Google(不会是Baidu)搜到了一个开源的SQL Relay,于是数据库软件方面的瓶颈暂时解决了。
  • 随之而来的是面临硬件性能瓶颈,阿里买了EMC的SAN存储设备,加上Oracle高性能RAC,硬件容量也暂时没问题了。
  • 因为SQL Relay的问题实在过于严重,2004年于是淘宝终于做出了跨时代的决策——使用Java重写网站。
  • 淘宝请了Sun的高级工程师来帮忙做Java架构。那么他们是如何做到修改编程语言而不改变网站使用呢——模块化替换,今天写好了A模块,另开一个新域名,将连接指向该模块,同时别的模块不变,等到全部模块完成的时候,原域名放弃。Sun公司坚持使用EJB作为控制层,加上使用iBatis作为持久层,一个可扩展且高效的Java EE应用诞生了。
  • 送走Sun的大牛们之后,阿里的数据存储又遇到了瓶颈,于是忍痛买了一台IBM小型机,也就有了IOE(IBM + Oracle + EMC)这样的传说
  • 2004年底,淘宝注册用户400万,PV 4000万/day,全网成交额10个亿。
  • 2005年Spring诞生了,早闻Spring框架在Web应用不可或缺,而在淘宝网,Spring也达到了Rod Johnson设计它的目的——替代EJB。
  • 2005年底,淘宝注册用户1390万,PV 8931万/day,商品数目1663万个。
  • 考虑到未来的发展,这样的设施架构只是勉强可以应付现在的要求。于是,CDN技术派上用场了,一开始使用商用的ChinaCache,后来使用章文嵩博士搭建低耗能CDN网络,淘宝网的性能越来越好了。
  • 2006年底,淘宝注册用户3000万,PV 15000万/day,商品数目5000万,全网成交额169亿元。
  • 淘宝在2007年之前,使用NetApp的商用存储系统,但是仍然不够应付迅速增长的趋势。同年Google公布了GFS的设计思想,参照它的思想,淘宝也开发了自己的文件系统——TFS每个用户在TFS上拥有1GB的图片存储空间,这些都得益于TFS集群的文件存储系统以及大量的图片服务器。淘宝使用实时生成缩率图,全局负载均衡以及一级和二级缓存来保证图片的访问优化与高效访问。
  • 淘宝的服务器软件使用Tengine,一个被优化过的nginx模块。
  • 淘宝分离出了UIC(User Information Center),供所有模块调用。多隆前辈再次为其编写出了TDBM,完全是基于内存的数据缓存(参考了memcached)。再然后,淘宝将TBstore和TDBM合并,写出了Tair,一个基于Key-Value的分布式缓存数据系统。然后升级了自己的iSearch系统。
  • 2007年底,淘宝注册用户5000万,PV 25000万/day,商品数目1个亿,全网成交额433亿元。
  • Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用。

图解架构变化

单节点
Nginx -- 1.介绍
集群
Nginx -- 1.介绍
集群+分布式
Nginx -- 1.介绍
Nginx -- 1.介绍

安装

二进制包编译安装

先依赖包,yum方式安装(这里直接安装一整套,管你有没有安装过;gcc到make是gcc的相关软件)

yum -y install zlib zlib-devel libtool openssl openssl-devel pcre pcre-devel openssh-clients gcc gcc-c++ autoconf automake make

【其实主要安装pcre-8.37.tar.gz、openssl-1.0.1t.tar.gz、zlib-1.2.8. tar.gz;pcre是nginx的http模块用来解析正则表达式的;openssl是nginx支持https加密的库;zlib是nginx使用它对http包的内容进行gzip
wget https://sourceforge.net/projects/pcre/files/pcre/8.37/pcre-8.37.tar.gz
下载完,解压进入目录,./configure,再执行make && make install】

安装nginx
//一般我在这下面下载安装

cd /usr/local/src/

//下载,没有wget命令的yum install wget

wget http://nginx.org/download/nginx-1.18.0.tar.gz

//解压

tar zxvf nginx-1.18.0.tar.gz

//进入目录

cd nginx-1.18.0

//安装在/usr/local/nginx下;新版本直接.configure就行了,旧版本要加参数>./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf;旧版本如果不指定prefix,则可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc;版本越老,安装需要的参数越多

./configure

//编译安装

make && make install

//可以看到多了个nginx

cd /usr/local/
ls
//启动
cd nginx/
//这步出错一般80端口被占用
./sbin/nginx

访问http://:80或者http://,要是还访问不了一般是防火墙把端口关了,可以开启80防护或者直接关闭防火墙
查看有哪些端口开放了

firewall-cmd --list-all
开放指定端口
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd -reload

Docker方式安装

https://hub.docker.com,输入nginx

docker pull nginx
docker images
docker run -id -p 80:80 nginx
docker ps (这个是查看启动容器;>docker ps -a会查看所有容器)

现在访问http://:/就行了

Yum方式安装

默认情况Centos7中没有Nginx的源,Nginx官方提供了源,所以执行如下命令添加源

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装Nginx

yum install -y nginx

启动Nginx并设置开机自动运行

systemctl start nginx.service
systemctl enable nginx.service

Nginx关闭命令

systemctl stop nginx.service
Nginx重启命令
systemctl restart nginx.service

控制nginx与信号量

信号量

nginx的关闭,重启靠叫信号量的操控的

信号:控制车的路口红绿灯,也就信号灯,信号量也是这个道理

TERM、INT 快杀
QUIT 优雅地关闭进程(要是有的进程还在运行,那先关闭其他没工作的,有工作的等做完了再关闭
KILL 停止一个顽固的进程
HUP 新进程用新配置文件,旧进程等工作完了再杀(就比如,默认nginx的主页是index.html,你要是改了配置文件成ac.html为主页,你再次访问时没有效果的,你得重启服务器ac.html才成主页文件;你也可以用这个杀死进程,效果就相当于优雅关闭和开启合起来的两个作用;作用:重读新配置文件用)
USR1 重读日志文件,日志切割(运维常用到日志;想换个日志文件并把旧日志文件打包(换个名,比如后面加.bak),那用mv不就行了吗?其实是这样的,在linux中,一个文件对应一个节点inode,inode是文件在磁盘的位置,名字只是个表象,也就是说,就算你mv改名了甚至删除了,指向的还是它,还是往那块写,得把日志改名保存,新建个新的,这步没错,但是你得告诉nginx改名了;
USR2 动态升级可执行文件, 平滑的升级
WINCH 优雅关闭旧工作进程,配合USR2升级(要是nginx升级,得下载安装,把sbin的nginx换过来并启动,这时候可以)
QUIT

./sbin/nginx -s stop
这样会直接关闭nginx,也相当于查出pid然后kill掉进程
./sbin/nginx -s quit
这个会待nginx进程处理任务完毕进行停止(执行后,nginx不再接收客户端请求,有任务的worker做完任务就全停了)

USER1

ls logs/
Nginx -- 1.介绍

持续按访问http://,可以看到日志在增长
Nginx -- 1.介绍

现在改名,然后再次访问几次,发现还在增长,这就是linux文件系统的特殊之处
#mv logs/access.log logs/access.log.123
Nginx -- 1.介绍

这时候要是新建个日志文件再次访问,发现还在增长,新建那个没用
#touch logs/access.log
Nginx -- 1.介绍

这时候,可以看到可以了
#kill -USR1 26552
Nginx -- 1.介绍Nginx -- 1.介绍

场景比如上司要看今天的日志时候用这个

控制命令

查看命令

./sbin/nginx -h
不重启,重新加载配置文件
./sbin/nginx -s reload
指定配置文件重启
./sbin/nginx -c conf/nginx.conf
一台机器可以启动多台nginx,注意server{}的listen的端口得不一样
./sbin/nginx -c conf/nginx1.conf
./sbin/nginx -c conf/nginx2.conf
//关闭
./sbin/nginx -s stop
//启动
./sbin/nginx
//重读日志,相当于-USR1
./sbin/nginx -s reopen
//看配置文件有没有错
./sbin/nginx -t
查看版本
./sbin/nginx -v

上一篇:Linux下nginx安装教程


下一篇:sed工具(编辑脚本神器!)