Nginx简介
1、nginx概述
充当http服务器、反向代理服务器、虚拟主机。
Nginx特点:
1、跨平台,支持linux和window
2、内存消耗小、成本低廉
3、稳定性高:用于反向代理,宕机的概率微乎其微
使用nginx大大提高了我们网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼,
2、反向代理
(1)正向代理
客户端知道服务器端,通过代理端连接服务器端。代理端代理的是服务器端。
(2)反向代理:我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的IP地址。
所谓反向,是对正向而言的。服务器端知道客户端,客户端不知道服务器端,通过代理端连接服务器端。代理端代理的是客户端。代理对象刚好相反,所以叫反向代理。
3、负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同服务器,也就是负载均衡。
4、动静分离
为了加快网站的解析速度,可以把动态页面和静态页面有不同的服务器来解析,加快解析速度,降低原来单个服务器的压力
Nginx安装
1、linux环境
pcre、openss、zlib、nginx
如果连接不上,需要检查下是否开放端口,或者服务器防火墙是否开放端口!
开启
service firewalld start
重启
service firewalld restart
关闭
service firewalld stop
查看开放的端口号
firewall-cmd --list-all
查询端口是否开放
firewall-cmd --query-port=8080/tcp
设置开放的端口号
firewall-cmd --add-service=http -permanent
sudo firewall-cmd --add-port=80/tcp --permanent
移除端口
firewall-cmd --permanent --remove-port=8080/tcp
重启防火墙
firewall-cmd -reload
2、window环境
1、将nginx下载压缩
2、启动nginx
(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可
3、检查
(1)直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功
(2)也可以在cmd命令窗口输入命令 tasklist /fi "imagename eq nginx.exe" ,出现如下结果说明启动成功
nginx默认的端口是80,如果80端口被占用,可以在其conf路径下的nginx.conf配置文件中进行修改
检查80端口是否被占用的命令是: netstat -ano | findstr 0.0.0.0:80 或 netstat -ano | findstr "80"
当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效
Nginx操作的常用和配置文件
nginx常用命令
1、查询nginx版本号
linux:./nginx -v
win:nginx -v
2、启动nginx
linux:./nginx
win:start nginx
3、关闭nginx
linux:./nginx -s stop
win:nginx -s stop
4、重新加载nginx配置
linux:./nginx -s reload
win:nginx -s reload
5、安全退出
./nginx -s quit
6、查看nginx进程
ps aux|grep nginx
nginx配置文件
打开nginx.conf我们可以很明显的将nginx.conf配置文件分为三部分
第一部分:全局块
主要是设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径,日志存放路径和类型以及配置文件的引入等。
worker_processes 1;
这个是nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
第二部分:events块
events块主要影响nginx服务器与用户的网络链接,常用的设置包括是否开启对多个work process下的网络链接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process 可以同时支持的最大连接数等。
这部分的配置对nginx的性能影响大,在实际中应该灵活配置
events {
worker_connections 1024;
}
表示每个work process 支持的最大连接数为1024
第三部分:http块
这算是nginx服务器配置中最频繁的部分,代理、缓存和日志定义等多数功能和第三方模块的配置都在这里,需要注意的是http块包含了http全局块和server块。
1、http全局块:
http全局配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
2、service块:
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
而server块也分为全局server块,以及可以同时包含多个location块。
1、全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置
2、location块
一个server可以配置多个location块
这块主要作用是基于nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
Niginx之反向代理
1、首先准备一个项目,分别运行在两个不一样的端口号(打包成jar 运行)
1、反向代理实例一
使用nginx反向代码,代理这个端口
nginx监听端口为9001
访问http://localhost:9001/ 直接跳转到127.0.0.1:8081
配置nginx.conf文件
server {
listen 9001;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8081/;
}
}
2、反向代理实例二
使用nginx反向代理,根据访问的路径跳转到不同端口的服务中
nginx监听端口为9002
访问http://127.0.0.1:9002/edu/ 直接跳转到127.0.0.1:8081
访问http://127.0.0.1:9002/vod/ 直接跳转到127.0.0.1:8082
server {
listen 9002;
server_name localhost;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8081;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8082;
}
}
location指令说明:
该指令用于匹配URL
- =:用于不含正则表达式的url,要求请求字符串与url严格匹配,如果匹配成功就继续向下搜索并立即处理该请求。
- ~:用于表示url包含正则表达式,并且区分大小写
- ~*:用于表示url包含正则表达式,并且不区分大小写
- ^~:用于不含正则表达式的url前,要求nginx服务器找到标识url和请求字符串匹配度高的location后,立即使用此location处理请求,而不再使用location块中的正则url和请求字符串做匹配。
注意:如果url包含正则表达式,则必须要有或者*标识。
Nginx负载均衡
niginx将原先请求集中到单个服务器上改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
实例
监听端口为8052
访问http://localhost:8052 可以随机访问到127.0.0.1:8081或127.0.0.1:8082
对nginx.conf进行配置:
#负载均衡配置的规则
upstream ch{
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
}
server {
listen 8052;
server_name localhost;
location / {
root html;
proxy_pass http://ch; #这边的ch要与上面的配置规则的ch一致才行
index index.html index.htm;
}
}
#重启配置之后,返回http://localhost:8052/可以看到 分别调用了一次8081和8082,跟后面weight权重有关,权重越大,访问的频率越高
nginx分配策略
负载均衡就是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。在linux下有nginx、LVS、Haproxy等等服务可以提供负载均衡服务,而且nginx提供了几种分配方式(策略):
1、轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
weight代表权重默认为1,权重越高被分配的客户端越多
(指定轮询的机率,weight和访问比率成正比,用于后端服务器性能不均的情况)
3、ip_hash
每个请求访问的ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题,如:
upstream server_pool{
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream server_pool{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
fair;
}
Nginx动态分离
nginx动静分离简单来说就是把动态和静态请求分开,不能单理解成动态页面和静态页面分开。动静分离可以理解成nginx处理静态页面,tomcat处理动态页面,动静分离分为两种:
1、把静态文件独立成单独的域名,放在独立的服务器上,主流的方案
2、把静态和动态文件混合一起发布,通过nginx来分开(使用location指定不同的后缀名实现不同的请求转发)
Expires参数:给一个资源设定一个过期的时间,就是无需去服务端验证,直接通过浏览器自身确认是否过期即可,不会产生额外的流量,此种适合不经常变动的资源(如果经常更新的文件,不建议使用expires缓存)