阅读 167

白话讲解nginx(附案例)

最初了解nginx是为了解决前后端分离导致访问后台报跨域错误问题,简单的学会了怎么配置,怎么启动。 后面有出现了新的需求,请求的接口,被部署到了不同的服务器上,那么就需要配置多个代理解决。 然而对于正向代理、反向代理、负载均衡是什么都很模糊,于是决定系统的整理下。接下来,上图!

nginx介绍及实战代码

1.     正向代理

解决的问题: 你想访问国外网站,访问不了,怎么办?在国内可访问到外网的服务上部署个nginx,你访问nginx,让nginx帮你访问国外站点。 正向代理在开发中比较少被用到,想深入了解见 《nginx做代理上网》www.nginx.cn/482.html

image.png

2.     反向代理

经典案例:前言中提到的两种,跨域,客户端/浏览器访问不同服务上接口。

image.png

1)解决跨域

其实配置内容很简单,关注以下几个点即可。

  1. listen 监听本地哪个端口的请求;

  2. location /root配置好打包后前端代码的存放路径;

  3. location paroxy_pass告诉nginx转发到的地址。

image.png

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.     负载均衡

比如双十一大促,某宝某一时间段内访问量大增,怎么避免服务器承受不了压力出现网络繁忙呢,可以多准备几台服务器,将压力分摊到多个服务器上。

image.png 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权重

在轮询的基础上添加了权重,权重越高,分配概率越大。据上面案例仅修改httpupstream模块。

upstream  dalaoyang-server {        server    localhost:10001 weight=1;        server    localhost:10002 weight=2;    } 复制代码

3)ip_hash

根据请求的iphash结果分配,相当于ip相同,就会访问同一个后端服务器,有效的解决了session问题。 据上面案例仅在httpupstream中添加ip_hash

upstream  dalaoyang-server {        ip_hash;        server    localhost:10001;        server    localhost:10002;    } 复制代码

4)fair(需要安装upstream-fair第三方模块)

根据后端服务器响应速度效率来分配请求,响应快的优先分配,能者多劳。使用这种调度算法,必须下载Nginxupstr_fair模块。 据上面案例仅在httpupstream中添加fair

upstream  dalaoyang-server {        server    localhost:10001;        server    localhost:10002;        fair;    } 复制代码

4.     动静分离

我们正常部署项目,前端打包的代码放到和nginx同一台服务器上,访问静态资源(html,js,img...)就不需要去远程服务器上找,直接返回就可以了,加快了请求效率,节省了资源。

image.png 简单的实现拦截静态资源

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

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐