白话讲解nginx(附案例)
最初了解nginx
是为了解决前后端分离导致访问后台报跨域错误问题,简单的学会了怎么配置,怎么启动。 后面有出现了新的需求,请求的接口,被部署到了不同的服务器上,那么就需要配置多个代理解决。 然而对于正向代理、反向代理、负载均衡是什么都很模糊,于是决定系统的整理下。接下来,上图!
nginx介绍及实战代码
1. 正向代理
解决的问题: 你想访问国外网站,访问不了,怎么办?在国内可访问到外网的服务上部署个nginx
,你访问nginx
,让nginx
帮你访问国外站点。 正向代理在开发中比较少被用到,想深入了解见 《nginx做代理上网》www.nginx.cn/482.html
2. 反向代理
经典案例:前言中提到的两种,跨域,客户端/浏览器访问不同服务上接口。
1)解决跨域
其实配置内容很简单,关注以下几个点即可。
listen
监听本地哪个端口的请求;location /
下root
配置好打包后前端代码的存放路径;location
paroxy_pass
告诉nginx
转发到的地址。
2)根据代理到匹配多个服务器
实例1中只转发了api
开头的请求,如果需要配置多个,写多个即可,如下同时转发/datasource
/auth
开头的请求。
server { listen 80; server_name localhost; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { root /usr/html; index index.html index.htm; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://134.100.100.1:8080/; } location /datasource/ { proxy_pass http://134.100.100.2:8080/; } location /auth/ { proxy_pass http://134.100.100.3:8081/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } 复制代码
3. 负载均衡
比如双十一大促,某宝某一时间段内访问量大增,怎么避免服务器承受不了压力出现网络繁忙呢,可以多准备几台服务器,将压力分摊到多个服务器上。
nginx实现负载均衡的策略有以下几种:
1)轮询(默认)
按照请求时间顺序,轮流代理到不同后端服务器上,如果某个后台服务挂了,就自动剔除。
worker_processes 1; #工作进程数,默认1,可以调大为CPU核心数 events { worker_connections 1024;#单个工作进程可以允许同时建立外部连接的数量 } http { upstream dalaoyang-server { server localhost:10001; server localhost:10002; } server { listen 10000; server_name localhost; #nginx接受到端口10000的所有请求并将其传递给上游upstream 。 #upstream名称和proxy_pass需要匹配!!! location / { proxy_pass http://dalaoyang-server; proxy_redirect default; } } } 复制代码
2)weight权重
在轮询的基础上添加了权重,权重越高,分配概率越大。据上面案例仅修改http
中upstream
模块。
upstream dalaoyang-server { server localhost:10001 weight=1; server localhost:10002 weight=2; } 复制代码
3)ip_hash
根据请求的ip
的hash
结果分配,相当于ip
相同,就会访问同一个后端服务器,有效的解决了session
问题。 据上面案例仅在http
中upstream
中添加ip_hash
。
upstream dalaoyang-server { ip_hash; server localhost:10001; server localhost:10002; } 复制代码
4)fair(需要安装upstream-fair第三方模块)
根据后端服务器响应速度效率来分配请求,响应快的优先分配,能者多劳。使用这种调度算法,必须下载Nginx
的upstr_fair
模块。 据上面案例仅在http
中upstream
中添加fair
。
upstream dalaoyang-server { server localhost:10001; server localhost:10002; fair; } 复制代码
4. 动静分离
我们正常部署项目,前端打包的代码放到和nginx
同一台服务器上,访问静态资源(html,js,img...
)就不需要去远程服务器上找,直接返回就可以了,加快了请求效率,节省了资源。
简单的实现拦截静态资源
location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ { root /Users/html/static; } 复制代码
5. 高可用
没有人能够保证服务器不会出现意外宕机的状况,若要减小这种风险怎么办呢?就可以备用几台服务器,如A,B两台虚拟机都装好了nginx
并启动,如果A意外宕机,B立即启用,这样就大大降低了服务器不可访问发生的概率。 高可用的实现需要Keepalived
的加持,keepalived
除了可以实现nginx的高可用,还有很多功能。
我没有用到过该场景,就不细说了,等用过再加续集。
作者:PILIPALAPENG
链接:https://juejin.cn/post/7031060406915301384