Code前端首页关于Code前端联系我们

HTTP服务器Nginx能做什么:正向反向代理、负载均衡

terry 2年前 (2023-09-28) 阅读数 55 #未命名
Nginx HTTP 服务器可以做什么:正向反向代理、负载均衡代理 除此之外,我知道 Nginx 可以在不依赖第三方模块的情况下进行处理。下面详细介绍如何执行各个功能

反向代理

反向代理应该是Nginx最常见的事情了。那么,什么是反向代理?以下是百度百科的说法: 反向代理方式(Reverse Proxy)是指利用代理服务器接收互联网上的连接请求,然后将请求转发给内网的服务器,并得到结果从服务器。返回到请求 Internet 连接的客户端。此时,代理服务器对外界表现为反向代理服务器。简单来说,外网无法直接访问真实服务器,所以需要代理服务器。代理服务器可以被外部网络访问,并且与真实服务器处于同一网络环境。当然,它可以是相同的服务器和端口。只是不同。下面贴上实现反向代理的简单代码

server {  
  listen       80;                                                         
  server_name  localhost;                                               
  client_max_body_size 1024M;

  location / {
    proxy_pass http://localhost:8080;
    proxy_set_header Host $host:$server_port;
  }
}
复制代码

保存配置文件并启动Nginx,这样我们访问localhost时就和访问localhost:8080一样了

负载均衡

负载均衡也是Nginx A.功能使用,负载均衡是指将执行任务分配给多个运行单元,如Web服务器、FTP服务器、企业关键应用服务器等关键任务服务器,以便同时完成工作任务。简单来说,当有两台或两台以上服务器时,请求按照规则随机分发到指定的服务器上进行处理。配置负载均衡一般需要同时配置反向代理,通过反向代理切换到负载均衡。 Nginx 目前支持 3 种内置的负载均衡策略,以及 2 种常用的第三方策略。

RR(默认)

每个请求按时间顺序分配给不同的后端服务器。如果后端服务器出现故障,可以自动删除。配置简单

upstream test {
  server localhost:8080;
  server localhost:8081;
}
server {
  listen       81;                                                         
  server_name  localhost;                                               
  client_max_body_size 1024M;

  location / {
    proxy_pass http://test;
    proxy_set_header Host $host:$server_port;
  }
}
复制代码

负载均衡的核心代码是

upstream test {
  server localhost:8080;
  server localhost:8081;
}
复制代码

这里我配置了2台服务器。当然,实际上是一个,只是端口不同而已。服务器8081不存在,也就是说无法访问。 ,但是当我们访问http://localhost时,就不会出现问题了。默认会跳转到http://localhost:8080。这是特别的,因为 Nginx 会自动确定服务器状态。如果服务器无法访问(服务器宕机),则不会跳转到该服务器,以免出现服务器卡住影响使用的情况。由于Nginx默认采用RR策略,因此我们不需要任何其他设置。

权重

确定轮询的概率。权重与访问比例成正比,当后端服务器性能参差不齐时使用。比如

  upstream test {
    server localhost:8080 weight=9;
    server localhost:8081 weight=1;
  }
复制代码

一般10次只有1次会访问8081,9次会访问8080。

ip_hash

上面两种方法有一个问题,就是下一个请求来了。此时,请求就可以分发到其他服务器了。虽然我们的程序不是无状态的(使用会话来存储数据),但此时就会出现一个大问题。例如,如果登录信息存储在session中,那么跳转到另一台服务器时,就必须重新登录,所以很多时候我们需要一个客户只能访问一台服务器,那么我们就不得不使用iphash。每个iphash请求都会根据访问IP的哈希结果进行分配,这样每个访问者仍然可以访问后端服务器,解决会话问题。

upstream test {
  ip_hash;
  server localhost:8080;
  server localhost:8081;
}
复制代码

fair(第三方)

根据后端服务器的响应时间允许请求,响应时间短的优先。

upstream backend { 
  fair; 
  server localhost:8080;
  server localhost:8081;
}
复制代码

url_hash(第三方)

根据访问的URL的哈希结果分发请求,使每个URL都定向到同一个后端服务器。当后端服务器有缓存时更有效。在上游添加哈希语句。服务器语句中不能写入体重等其他参数。 hash_method是使用的哈希算法。

upstream backend { 
  hash $request_uri; 
  hash_method crc32; 
  server localhost:8080;
  server localhost:8081;
}
复制代码

以上5种负载均衡适合不同的情况使用,大家可以根据实际情况选择使用的策略。模式,但fair和url_hash必须安装第三方模块才可以使用。由于本文主要介绍Nginx能做什么,因此本文不会介绍Nginx第三方模块的安装,Nginx是服务器。同时现在非常流行将静态资源与静态资源分离,这可以通过Nginx来实现。首先我们来看看Nginx作为一个静态资源服务器

server {
  listen       80;                                                         
  server_name  localhost;                                               
  client_max_body_size 1024M;

  location / {
    root   e:\wwwroot;
    index  index.html;
  }
}
复制代码

这样当你访问http://localhost时就会默认访问E盘wwwroot目录下的index.html。如果网站只是静态页面,可以这样部署。动静分离。划分完动静态资源后,我们就可以根据静态资源来划分了。这就是静态网站处理的核心思想

upstream test{  
  server localhost:8080;  
  server localhost:8081;  
}   

server {  
  listen       80;  
  server_name  localhost;  

  location / {  
    root   e:\wwwroot;  
    index  index.html;  
  }  

  # 所有静态请求都由nginx处理,存放目录为html  
  location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
    root    e:\wwwroot;  
  }  

  # 所有动态请求都转发给tomcat处理  
  location ~ \.(jsp|do)$ {  
    proxy_pass  http://test;  
  }  

  error_page   500 502 503 504  /50x.html;  
  location = /50x.html {  
    root   e:\wwwroot;  
  }  
}
复制代码

这样我们就可以把HTML、图片、css和js放在wwwroot目录下,而Tomcat只负责处理jsp和请求。例如,当我们的后缀为gif时,Nginx会默认生成当前从wwwroot请求的动态图片文件。当然,这里的静态文件是和Nginx在同一台服务器上的。我们也可以在其他服务器上使用,然后使用反向代理和负载均衡。只要管理就好。只要了解了最基本的流程,很多配置就非常简单了。另外,本地化其实后面是正则表达式,所以非常灵活

正向代理

正向代理,意思是客户端和源服务器之间的Server。要从源服务器获取内容,客户端向代理发送请求并指定目标(源服务器)。然后,代理将请求转发到源服务器并检索内容。回到客户端。只有客户端才能使用高级代理。如果需要使用服务器作为代理服务器,可以使用Nginx来实现高级代理。不过Nginx目前有一个问题,那就是不支持HTTPS。虽然我去百度配置了HTTPS的高级代理,但最后发现代理还是不行。当然,也有可能我的配置是错误的,所以也希望知道正确方式的朋友可以留言说明。

resolver 114.114.114.114 8.8.8.8;
  server {
    resolver_timeout 5s;

    listen 81;

    access_log  e:\wwwroot\proxy.access.log;
    error_log   e:\wwwroot\proxy.error.log;

    location / {
      proxy_pass http://$host$request_uri;
    }
  }
复制代码

resolver是配置了正向代理的DNS服务器,listening是正向代理端口。配置完成后,您可以使用服务器IP+端口号在IE或其他代理插件中进行代理。

最后的话

启动、停止和配置文件位置的命令:

/etc/init.d/nginx start/restart # 启动/重启Nginx服务

/etc/init.d/nginx stop # 停止Nginx服务

/etc/nginx/nginx.conf # Nginx配置文件位置
复制代码

Nginx支持热启动,也就是说修改配置文件后,我们可以在不关闭Nginx的情况下使配置生效。当然,我不知道有多少人知道这一点。反正我一开始也不太明白,所以经常杀掉Nginx线程然后重启。 。 。 Nginx 读回配置的命令是

nginx -s reload
复制代码

windows。下面

nginx.exe -s reload

作者:KoK
链接:https://juejin.im/post/5b8f963ce51d450e425e81b1
来源:掘金
版权所有。商业转载请联系作者获取授权。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门