当前位置:首页 > 教程 > 正文内容

nginx分发请求(nginx分配策略)

2023-05-06 06:00:06教程1

nginx分发请求

nginx可以学的。

nginx是由俄罗斯的一个程序设计师Igor Sysoev用C语言写的一个开源软件,主要用于互联网网站,负责接受客户端(PC网页、手机网页、手机App)的HTTP协议的请求,然后把请求分发给后端多个各种应用服务器(如Tomcat、php等)去处理,做负载均衡,然后再把后端传回来的结果页面,返回给前端。这种工作方式也被称作“反向代理”。

nginx分配策略

nginx 五种策略

1.轮询(每个请求按照时间顺序分配到不同的服务器,如果后端服务器down掉,就自动剔除了)

2.指定权重(用于性能不均,哪个服务器分配的多些) weight=3

3.ip绑定(每个请求按照ip的hash结果分配,一个访客一个固定后端服务器,解决session缓存的问题)

4.fair (根据服务器响应时间分配请求)

5.url_hash (根据url的hash结果来分配请求,使每个url定向到一个后端服务器,后端服务器为缓存时比较有效)

nginx实现请求转发

tomcat默认端口是8080

nginx默认端口是80

在nginx的配置文件中设置api的请求转发端口为tomcat的8080就可以正常使用了

浏览器访问nginx的80端口,可以正常打卡网页

nginx分发转向多个服务

基本可以替代。

TCP代理:两个都有。

HTTP代理:两个都有。

这两个的差别主要在于:Haproxy会对后端服务器一直做健康检测,NG没有。

后端机器故障发生在请求还没到来的时候:

haproxy:会将这台故障机切掉,但如果后端机器故障发生在请求到达期间,那么前端访问会有异常。也就是说HAProxy会把请求转到后端的这台故障机上,并经过多次探测后才会把这台机器切掉,并把请求发给其他正常的后端机,这势必会造成一小段时间内前端访问失败。

Nginx:在请求过来的时候,分发还是会正常进行分发,只是请求不到数据的时候,它会再转向好的后端机器进行请求,直到请求正常为止。也就是说Nginx请求转到后端一台不成功的机器的话,还会再转向另外一台服务器,这对前端访问没有什么影响。

所以在高并发的情况下,Haproxy会比nginx略差。

nginx请求转发原理

nginx可以转发内网 url东西。有两种方法:

1、去掉匹配路径转发

匹配规则通常为二级路径,转发的时候过滤掉。

# 转发示例: # 请求:http://somedomain.com/system/path/request # 转发:http://otherdomain.com/path/request # location ^~ /system/ { proxy_pass http://otherdomain.com; }

2、完整路径转发

匹配规则二级路径转发的时候也带上。

# 转发示例 # 请求:http://somedomain.com/system/path/request # 转发:http://otherdomain.com/system/path/request # location ^~ /system { proxy_pass http://otherdomain.com; }

nginx 转发请求

第一种:Nginx自己的错误页面

Nginx访问一个静态的html 页面,当这个页面没有的时候,Nginx抛出404,那么如何返回给客户端404呢?

看下面的配置,这种情况下不需要修改任何参数,就能实现这个功能。

server {

listen 80;

server_name www.test.com;

root /var/www/test;

index index.html index.htm;

location / {

}

# 定义错误页面码,如果出现相应的错误页面码,转发到那里。

error_page 404 403 500 502 503 504 /404.html;

# 承接上面的location。

location = /404.html {

# 放错误页面的目录路径。

root /usr/share/nginx/html;

}

}

第二种:反向代理的错误页面

如果后台Tomcat处理报错抛出404,想把这个状态叫Nginx反馈给客户端或者重定向到某个连接,配置如下:

upstream www {

server 192.168.1.201:7777 weight=20 max_fails=2 fail_timeout=30s;

ip_hash;

}

server {

listen 80;

server_name www.test.com;

root /var/www/test;

index index.html index.htm;

location / {

if ($request_uri ~* ‘^/$’) {

rewrite .* http://www.test.com/index.html redirect;

}

# 关键参数:这个变量开启后,我们才能自定义错误页面,当后端返回404,nginx拦截错误定义错误页面

proxy_intercept_errors on;

proxy_pass http://www;

proxy_set_header HOST $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;

}

error_page 404 /404.html;

location = /404.html {

root /usr/share/nginx/html;

}

}

第三种:Nginx解析php代码的错误页面

如果后端是php解析的,需要加一个变量

在http段中加一个变量

fastcgi_intercept_errors on就可以了。

指定一个错误页面:

error_page 404 /404.html;

location = /404.html {

root /usr/share/nginx/html;

}

指定一个url地址:

error_page 404 /404.html;

error_page 404 = http://www.test.com/error.html;

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98818071.html