Nginx入门介绍1.什么是Nginx
NIO:not-blocking-io 非阻塞IO BIO:blocking-IO 阻塞IO nginx可以作为web服务器,但更多的时候,我们把它作为网关,因为它具备网关必备的功能: 反向代理 负载均衡 动态路由 请求过滤
2.nginx作为web服务器
Web服务器分2类: 区分:web服务器不能解析jsp等页面,只能处理js、css、html等静态资源。并发:web服务器的并发能力远高于web应用服务器。 Nginx + tomcat
3.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.限流
如何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.流程分析
优先进行本地域名解析,因为我们修改了hosts,所以解析成功,得到地址:127.0.0.1 本机的nginx一直监听80端口,因此捕获这个请求 nginx中配置了反向代理规则,将manage.leyou.com代理到127.0.0.1:9001,因此请求被转发 后台系统的webpack server监听的端口是9001,得到请求并处理,完成后将响应返回到nginx nginx将得到的结果返回到浏览器
|