Nginx能做什么

前言 

本文值针对Nginx在不加载第三方模块的情况下能处理的事情

Nginx 能做什么

 反向代理  负载均衡  HTTP服务器(包含动静分离) 正向代理

分别介绍

1 反向代理

反向代理

概念:反向代理(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;

}

}

保存配置文件后启动N滚下,这样当我们访问localhost的时候,就相当于访问localhost:8080了;

2 负载均衡

负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTO服务器企业关键应用服务器和其他关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同事配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带的三种负载均衡策咯,还有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;

}

这里我配置了两台服务器,当然实际上是一台,只是端口不一样而已,而8081的服务器是不存在的,也就是说访问不到,但是我们访问http://localhost:8080具体是因为Nginx会自动判断服务器的状态,如果服务器处于不能访问(服务器挂了),就不会跳转到这台服务器,所以也避免了一条服务器挂了影响使用的情况,由于Nginx默认是RR策略,所以我们不需要其他更多的设置

(2) 权重

指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。例如

upstream test {

 server localhost :8080 weight=9;

 server localhost :8081 weight=1;

}

那么10次一般只会有一次访问到8081 ,而有9次会访问到8080

(3) ip_hash

上面的2中方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的问题了,比如把登录信息保存到session中,那么跳转到另一台服务器的时候就要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要iphash了,iphash的每个请求按访问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;

}

sever{

listen   80 ;

server_name  localhost;

location / {

 root   e:\wwwroot;

index  index.html;

}


#所有静态请求都由nginx处理,存放目录为html

location ~ \.(git|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获取当前请求的动态图文件返回,当然这里的静态文件跟Ngnix是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外location 后面其实是一个正则表达式,所以非常灵活

正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送了一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理,但是目前Nginx不支持HTTPS(不确定是不是配置的不对)

resolver  114.114.114.114 8.8.8.8;

server{

resolver_timeout  5s;

listen  81;

access_log  e:\wwwroot\proxy.access.log;

error_log  e:\wwwroot\proxy.error.log;

location / {

     proxy_pass  http://$host$request_uri;

}

}

resolver是配置正向代理的DNS服务器,listen是正向代理的端口,配置好了就可以在ie上面或者其他代理插件上面使用服务器ip+端口号进行代理了。

最后:

Nginx 是支持热启动的,也就是说当我们修改配置文件后不用关闭Nginx,就可以实现让配置生效。

Nginx重新读取配置的命令是

windows下面就是

nginx.exe  -s  reload 

注:本文来源作者 Raye 途径摘抄 共同学习

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,664评论 24 1,002
  • 前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也...
    Raye阅读 5,219评论 1 34
  • 暑假公司要安排我出差学习一个月,老公又要上班,2岁的儿子只好送往老家婆婆帮忙照料,婆婆照顾的很细心,每次视频孩子都...
    群美育儿阅读 641评论 0 1
  • 落叶呐, 不知何时开始, 你变得不懂归根。 小路呐, 不知何时开始, 你变得毫无足迹。 春风呐, 不知何时开始, ...
    愛讀詩的小貓阅读 255评论 2 9