A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 孤尽 中级黑马   /  2018-8-15 11:41  /  1599 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Nginx入门介绍1.什么是Nginx



NIO:not-blocking-io 非阻塞IO
BIO:blocking-IO 阻塞IO
nginx可以作为web服务器,但更多的时候,我们把它作为网关,因为它具备网关必备的功能:
反向代理
负载均衡
动态路由
请求过滤
2.nginx作为web服务器

Web服务器分2类:
  • web应用服务器,如:
    • tomcat
    • resin
    • jetty

  • web服务器,如:
    • Apache 服务器
    • Nginx
    • IIS


区分:web服务器不能解析jsp等页面,只能处理js、css、html等静态资源。并发:web服务器的并发能力远高于web应用服务器。
Nginx + tomcat
3.nginx作为反向代理

什么是反向代理?
  • 代理:通过客户机的配置,实现让一台服务器代理客户机,客户的所有请求都交给代理服务器处理。
  • 反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器。

nginx可以当做反向代理服务器来使用:
  • 我们需要提前在nginx中配置好反向代理的规则,不同的请求,交给不同的真实服务器处理
  • 当请求到达nginx,nginx会根据已经定义的规则进行请求的转发,从而实现路由功能

利用反向代理,就可以解决我们前面所说的端口问题,如图
4.负载均衡

当网站访问量非常大,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将相同的应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
Nginx可以通过反向代理来实现负载均衡。


配置:

upstream myapp {
        server 192.168.0.111:8080; # 应用服务器1
        server 192.168.0.112:8080; # 应用服务器2
}
server {
        listen 80;
        location / {
                proxy_pass http://myweb;
        }
}


5.限流

电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单、信誉分析,进而根据用户ip信誉权重做相应的流量拦截、限制流量。Nginx自身有的请求限制模块ngx_http_limit_req_module、流量限制模块ngx_stream_limit_conn_module基于令牌桶算法,可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制。
如何Nginx限制同一个ip的连接数,限制并发数目:
1.添加limit_zone和limit_req_zone
这个变量只能在http使用 :
vi /export/servers/nginx/conf/nginx.conf
limit_zone one $binary_remote_addr 20m;
limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;
(2) 添加limit_conn 和limit_req
这个变量可以在http, server, location使用 我是限制nginx上的所有服务,所以添加到http里面 (如果你需要限制部分服务,可在nginx/conf/domains里面选择相应的server或者location添加上便可)
vi /export/servers/nginx/conf/nginx.conf
limit_zone one $binary_remote_addr 20m;
limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;
limit_conn one 10;
limit_req zone=req_one burst=120;

参数详解(数值按具体需要和服务器承载能力设置,):
limit_zone:是针对每个变量(这里指IP,即$binary_remote_addr)定义一个存储session状态的容器。这个示例中定义了一个20m的容器,按照32bytes/session,可以处理640000个session。
limit_req_zone 与limit_zone类似,rate是请求频率. 每秒允许12个请求。
limit_conn one 10 : 表示一个IP能发起10个并发连接数
limit_req: 与limit_req_zone对应,burst表示缓存住的请求数。
6.安装和使用

安装
安装非常简单,把nginx直接解压即可,绿色免安装,舒服!


我们在本地安装一台nginx:



目录结构:


使用
nginx可以通过命令行来启动,操作命令:
  • 启动:start nginx.exe
  • 停止:nginx.exe -s stop
  • 重新加载:nginx.exe -s reload



反向代理配置

示例:

nginx中的每个server就是一个反向代理配置,可以有多个server
完整配置:
user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
keepalive_timeout  65;
gzip  on;
server {
    listen       80;
    server_name  manage.leyou.com;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    location / {
                proxy_pass http://127.0.0.1:9001;
                proxy_connect_timeout 600;
                proxy_read_timeout 600;
    }
}
server {
    listen       80;
    server_name  api.leyou.com;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    location / {
                proxy_pass http://127.0.0.1:10010;
                proxy_connect_timeout 600;
                proxy_read_timeout 600;
    }
}
}

7.流程分析




  • 浏览器准备发起请求,访问http://mamage.leyou.com,但需要进行域名解析
  • 优先进行本地域名解析,因为我们修改了hosts,所以解析成功,得到地址:127.0.0.1
  • 请求被发往解析得到的ip,并且默认使用80端口:http://127.0.0.1:80
    本机的nginx一直监听80端口,因此捕获这个请求
  • nginx中配置了反向代理规则,将manage.leyou.com代理到127.0.0.1:9001,因此请求被转发
  • 后台系统的webpack server监听的端口是9001,得到请求并处理,完成后将响应返回到nginx
  • nginx将得到的结果返回到浏览器






















1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马