Nginx四个作⽤
本⽂只针对Nginx在不加载第三⽅模块的情况能处理哪些事情,由于第三⽅模块太多所以也介绍不完。
Nginx能做什么
——反向代理
——负载均衡
——HTTP服务器(动静分离)
——正向代理
以上就是我了解到的Nginx在不依赖第三⽅模块能处理的事情,下⾯详细说明每种功能怎么做。
反向代理
反向代理应该是Nginx做的最多的⼀件事了。反向代理(Reverse Proxy)⽅式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部⽹络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为⼀个反向代理服务器。简单来说就是真实的服
务器不能直接被外部⽹络访问,所以需要⼀台代理服务器,⽽代理服务器能被外部⽹络访问的同时⼜跟真实服务器在同⼀个⽹络环境,当然也可能是同⼀台服务器,端⼝不同⽽已。
下⾯贴上⼀段简单的实现反向代理的代码
server {
listen      80;
server_name  localhost;
client_max_body_size 1024M;
location / {
proxy_pass 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 test;
    proxy_set_header Host $host:$server_port;
  }
}
负载均衡的核⼼代码为
upstream test {
server localhost:8080;
server localhost:8081;
}
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中,那么跳转到另外⼀台服务器的时候就需要重新登录了,所以很多时候我们需要⼀个客户只访问⼀个服务器,那么就需要⽤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;
}
}
动静分离
  动静分离是让动态⽹站⾥的动态⽹页根据⼀定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是⽹站静态化处理的核⼼思路
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  test;
}
error_page  500502503504  /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.1148.8.8.8;
负载均衡服务器有哪些server {
resolver_timeout 5s;
listen 81;
access_log  e:\wwwroot\proxy.access.log;
error_log  e:\log;
location / {
proxy_pass $host$request_uri;
}
}
  resolver是配置正向代理的DNS服务器,listen 是正向代理的端⼝,配置好了就可以在ie上⾯或者其他代理插件上⾯使⽤服务器ip+端⼝号进⾏代理了。
热启动
  Nginx 是⽀持热启动的,也就是说当我们修改配置⽂件后,不⽤关闭 Nginx,就可以实现让配置⽣效,当然我并不知道多少⼈知道这个,反正我⼀开始并不知道,导致经常杀死了 Nginx 线程再来启动……
  Nginx 从新读取配置的命令是:
nginx -s reload
  Windows 下⾯就是:
< -s reload

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。