一、Nginx的简介
Nginx是一个高性能的HTTP和反向代理web服务器,是由伊戈尔·赛索耶夫为俄罗斯访问量第二站点开发的,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名,第一个公开版本0.1.0发布于2004年10月4日。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件代理服务器,其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好,
中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx是由C语言开发,专为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,官方数据测试表明能够支持高达50000个并发连接数的响应。
Nginx是什么?Nginx介绍及Nginx的优点 - LNMP一键安装包
二、Nginx的作用
2.1、正向代理
如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。 正向代理(VPN,玩游戏使用)代理的是客户端。
2.2、反向代理
反向代理代理的是服务器端,比如咱们在客户端浏览器里访问的百度,客户端发出请求后,由一台nginx服务器接收到请求后,从后台调取一台服务器给咱们提供接收请求,进行响应的过程。在这个过程中这个Nginx服务器就是百度众多服务器的代理。
2.3、负载均衡
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器响应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
我们首先想到的可能是升级服务器的配置,比如提高CPU的执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了,最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不可能满足需求的,那么怎么办呢?
12306 官网 阿里
上面的分析我们去掉了增加物理服务器来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为分发到多个服务器上,将负载分发到不同的服务器,这种方式也就是我们所说的负载均衡。
Nginx提供的负载均衡策略有2种,内置策略和扩展策略。内置策略为轮询,加权轮询,IPhash(固定的IP只能访问到固定的服务器,保证session不会丢失的一种方案。)
2.4、动静分离
在我们的软件开发中,有些请求是需要后台处理的,有些请求不需要经过后台处理,比如:css,js,html,jpg等文件,这些不需要后台处理的文件叫做静态文件。让动态网站里的动态网页根据一定的规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,提高资源响应的速度。通过使用Nginx大大提高了我们网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!
三、Windows下安装Nginx
官网:nginx: downloadhttp://nginx.org/en/download.html
下载nginx/Windows-1.20.1 稳定版。
服务启动后,访问80端口就会被nginx拦截。
四、Linux下安装Nginx步骤
1 、下载nginx压缩版
官网:nginx: download
下载nginx-1.20.1.tar.gz 稳定版
2、 上传到linux服务器
上传到了usr目录下
3、 安装gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,则需要安装:
yum install gcc-c++
4、 查看版本
gcc -v
5、安装pcre-devel依赖库
pcre是一个perl库,ngix的http模块使用pcre来解析正则表达式,所以要在linux上安装pcre.。pcre-devel是使用的pcre开发的一个二次开发库,nginx也需要此库,命令:
yum -y install pcre-devel
6、安装openssl依赖库
openssl是一个强大的安全套接字层密码库,囊括主要的密码算法,常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要安装openssl库,命令:
yum -y install openssl openssl-devel
7、解压缩
解压目录是在 /usr/nginx-1.20.1
tar -zxvf nginx-1.20.1.tar.gz
8、进入目录
cd nginx-1.20.1
9、执行自动配置
./configure
10、执行make命令
把文件进行编译
make
11、执行make install
再执行安装
make install
12、查看安装的路径(是否成功)
nginx的默认安装目录: /usr/local/nginx
whereis nginx
13、进入安装目录
cd /usr/local/nginx/bin ll
14、查看nginx的配置文件
cd /usr/local/nginx ll cd conf ll cat nginx.conf
15、执行nginx的启动文件
# 进入安装目录 cd /usr/local/nginx/sbin #启动Nginx服务 ./nginx
16、查看nginx进程
ps -ef | grep nginx
17、输入IP地址进行访问
http://101.200.174.107,如果访问不到Nginx服务,则需要在防火墙中进行端口得开放操作
18、防火墙的设置
需要记忆:
#查看防火墙的启动状态 systemctl status firewalld # 关闭防火墙 systemctl stop firewalld #开启防火墙 systemctl start firewalld #查看开放的端口号 firewall-cmd --list-all #在防火墙中设置开放的端口号 firewall-cmd --zone=public --add-port=80/tcp --permanent #开启端口后,需要重启防火墙才生效 systemctl restart firewalld | firewall-cmd --reload # 如果有不用的端口,则进行移除 firewall-cmd --permanent --remove-port=8081/tcp
Nginx常用命令
# 进入nginx的目录 cd /usr/local/nginx/sbin # 查看Nginx的版本 ./nginx -v # 启动Nginx ./nginx # 停止Nginx ./nginx -s stop # 安全退出Nginx,同时会关闭Nginx服务 ./nginx -s quit # 重新加载配置文件(不重新启动Nginx,也会生效) ./nginx -s reload # 查看Nginx的进程 ps -ef | grep nginx
四、Nginx配置文件的组成
进入Nginx配置文件的位置
cd /usr/local/nginx ll cd conf ll
就可以看到nginx.conf文件,此文件就是Nginx的配置文件,通过 vim nginx.conf
命令,打开配置文件
Nginx配置文件有三部分组成:全局块、events块、http块
第一部分:全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包含配置运行Nginx服务器的用户(组),允许生成的worker、process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的
worker_processes 1;
前面带#号的都是注释部分。
worker_processes这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件,软件等设备的制约
查看CPU个数:
cat /proc/cpuinfo | grep "cores"|uniq
worker_processes,工作进程数
-
1.默认:worker_processes: 1
-
2.调大:worker_processes: CPU核心数,(双核4线程,可以设置为4)
第二部分:events块
比如下面的配置:
events {worker_connections 100000; }
worker_processes与worker_connections 设置好合适大小,可以提升nginx处理性能,非常重要。
events块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker_processes 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动来处理连接请求,每个worker_processes 可以同时支持的最大连接数等
上述例子就表示每个worker_processes 支持的最大连接数为1024
这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置
worker_connections,单个工作进程可以允许同时建立外部连接的数量
数字越大,能同时处理的连接越多
-
1.默认:worker_connections: 1024
-
2.调大:worker_connections: 100000,(调大到10万连接)
第三部分:http块
这算是Nginx服务器配置中最频繁的部分,代理,缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,需要注意的是:http块也可以包括http全局块,server块。
http全局块:
http全局块配置的指令包括文件的引入,MIME-TYPE定义,日志自定义,连接超时时间,单链接请求数上限等。
server块:
这块和虚拟主机有密切关系,虚拟主机从用户角度看和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机
而每个server块也可分为全局server块,以及可以同时包含多个location块。
全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
location块
一个server块可以配置多个location块
这块的主要作用是基于Nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向,数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。