共计 3987 个字符,预计需要花费 10 分钟才能阅读完成。
前言
本文只针对 Nginx 在不加载第三方模块的状况能解决哪些事件,因为第三方模块太多所以也介绍不完,当然本文自身也可能介绍的不残缺,毕竟只是我集体应用过和理解到过得。所以还请见谅,同时欢送留言交换
Nginx 能做什么
1、反向代理 2、[负载平衡] 3、HTTP 服务器(蕴含动静拆散)4、正向代理
以上就是我理解到的 Nginx 在不依赖第三方模块能解决的事件,上面具体阐明每种性能怎么做
【文章福利】小编举荐本人的 linuxC/C++ 语言交换群:832218493!整顿了一些集体感觉比拟好的学习书籍、视频材料共享在群文件外面,有须要的能够自行添加哦!~
反向代理
反向代理应该是 Nginx 做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)形式是指以代理服务器来承受 internet 上的连贯申请,而后将申请转发给外部网络上的服务器,并将从服务器上失去的后果返回给 internet 上申请连贯的客户端,此时代理服务器对外就体现为一个反向代理服务器。简略来说就是实在的服务器不能间接被内部网络拜访,所以须要一台代理服务器,而代理服务器能被内部网络拜访的同时又跟实在服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
上面贴上一段简略的实现反向代理的代码
server {
listen 80;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port;
}
}
保留配置文件后启动 Nginx,这样当咱们拜访 localhost 的时候,就相当于拜访 localhost:8080 了
负载平衡
负载平衡也是 Nginx 罕用的一个性能,负载平衡其意思就是摊派到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业要害应用服务器和其它要害工作服务器等,从而共同完成工作工作。简略而言就是当有 2 台或以上服务器时,依据规定随机的将申请散发到指定的服务器上解决,负载平衡配置个别都须要同时配置反向代理,通过反向代理跳转到负载平衡。而 Nginx 目前反对自带 3 种负载平衡策略,还有 2 种罕用的第三方策略。
1、RR(默认)
每个申请按工夫程序逐个调配到不同的后端服务器,如果后端服务器 down 掉,能主动剔除。
简略配置
upstream test {
server localhost:8080;
server localhost:8081;
}
server {
listen 81;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://test;
proxy_set_header Host $host:$server_port;
}
}
负载平衡的外围代码为
upstream test {
server localhost:8080;
server localhost:8081;
}
这里我配置了 2 台服务器,当然实际上是一台,只是端口不一样而已,而 8081 的服务器是不存在的, 也就是说拜访不到,然而咱们拜访 http://localhost 的时候, 也不会有问题,会默认跳转到 http://localhost:8080 具体是因为 Nginx 会主动判断服务器的状态,如果服务器处于不能拜访(服务器挂了),就不会跳转到这台服务器,所以也防止了一台服务器挂了影响应用的状况,因为 Nginx 默认是 RR 策略,所以咱们不须要其余更多的设置。
2、权重
指定轮询几率,weight 和拜访比率成正比,用于后端服务器性能不均的状况。
例如
upstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
那么 10 次个别只会有 1 次会拜访到 8081,而有 9 次会拜访到 8080
3、ip_hash
下面的 2 种形式都有一个问题,那就是下一个申请来的时候申请可能散发到另外一个服务器,当咱们的程序不是无状态的时候(采纳了 session 保留数据),这时候就有一个很大的很问题了,比方把登录信息保留到了 session 中,那么跳转到另外一台服务器的时候就须要从新登录了,所以很多时候咱们须要一个客户只拜访一个服务器,那么就须要用 ip_hash 了,ip_hash 的每个申请按拜访 ip 的 hash 后果调配,这样每个访客固定拜访一个后端服务器,能够解决 session 的问题。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
4、fair(第三方)
按后端服务器的响应工夫来调配申请,响应工夫短的优先调配。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
5、url_hash(第三方)
按拜访 url 的 hash 后果来调配申请,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比拟无效。在 upstream 中退出 hash 语句,server 语句中不能写入 weight 等其余的参数,hash_method 是应用的 hash 算法
upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
以上 5 种负载平衡各自实用不同状况下应用,所以能够依据理论状况抉择应用哪种策略模式, 不过 fair 和 url_hash 须要装置第三方模块能力应用,因为本文次要介绍 Nginx 能做的事件,所以 Nginx 装置第三方模块不会再本文介绍
HTTP 服务器
Nginx 自身也是一个动态资源的服务器,当只有动态资源的时候,就能够应用 Nginx 来做服务器,同时当初也很风行动静拆散,就能够通过 Nginx 来实现,首先看看 Nginx 做动态资源服务器
server {
listen 80;
server_name localhost;
client_max_body_size 1024M;
location / {
root e:wwwroot;
index index.html;
}
}
这样如果拜访 http://localhost 就会默认拜访到 E 盘 wwwroot 目录上面的 index.html,如果一个网站只是动态页面的话,那么就能够通过这种形式来实现部署。
动静拆散
动静拆散是让动静网站里的动静网页依据肯定规定把不变的资源和常常变的资源辨别开来,动静资源做好了拆分当前,咱们就能够依据动态资源的特点将其做缓存操作,这就是网站动态化解决的外围思路
upstream test{
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name localhost;
location / {
root e:wwwroot;
index index.html;
}
# 所有动态申请都由 nginx 解决,寄存目录为 html
location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {root e:wwwroot;}
# 所有动静申请都转发给 tomcat 解决
location ~ .(jsp|do)$ {proxy_pass http://test;}
error_page 500 502 503 504 /50x.html;
location = /50x.html {root e:wwwroot;}
}
这样咱们就能够吧 HTML 以及图片和 css 以及 js 放到 wwwroot 目录下,而 tomcat 只负责解决 jsp 和申请,例如当咱们后缀为 gif 的时候,Nginx 默认会从 wwwroot 获取到以后申请的动态图文件返回,当然这里的动态文件跟 Nginx 是同一台服务器,咱们也能够在另外一台服务器,而后通过反向代理和负载平衡配置过来就好了,只有搞清楚了最根本的流程,很多配置就很简略了,另外 localtion 前面其实是一个正则表达式,所以非常灵活
正向代理
正向代理,意思是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个申请并指定指标(原始服务器),而后代理向原始服务器转交申请并将取得的内容返回给客户端。客户端能力应用正向代理。当你须要把你的服务器作为代理服务器的时候,能够用 Nginx 来实现正向代理,然而目前 Nginx 有一个问题,那么就是不反对 HTTPS,尽管我百度到过配置 HTTPS 的正向代理,然而到最初发现还是代理不了,当然可能是我配置的不对,所以也心愿有晓得正确办法的同志们留言阐明一下。
resolver 114.114.114.114 8.8.8.8;
server {
resolver_timeout 5s;
listen 81;
access_log e:wwwrootproxy.access.log;
error_log e:wwwrootproxy.error.log;
location / {proxy_pass http://$host$request_uri;}
}
resolver 是配置正向代理的 DNS 服务器,listen 是正向代理的端口,配置好了就能够在 ie 下面或者其余代理插件下面应用服务器 ip+ 端口号进行代理了。
最初说两句
Nginx 是反对热启动的,也就是说当咱们批改配置文件后,不必敞开 Nginx,就能够实现让配置失效,当然我并不知道多少人晓得这个,反正我一开始并不知道,导致常常杀死了 Nginx 线程再来启动。。。Nginx 从新读取配置的命令是
nginx -s reload
windows 上面就是
nginx.exe -s reload