nginx 详解

nginx详解

nginx简介

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

Nginx 也作为一个基于 C 实现的高性能 Web 服务器,可以通过系列算法解决上述的负载均衡问题。并且由于它具有高并发、高可靠性、高扩展性、开源等特点,成为开发人员常用的反向代理工具。

nginx常见的功能

nginx正向代理

  • 正向代理
    正向代理指的是客户端通过访问目标服务端,再由目标服务端来转发流量访问互联网。
    正向代理(Forward Proxy)最大的特点是,客户端非常明确要访问的服务器地址,它代理客户端,替客户端发出请求。比如:VPN(警告⚠️:翻墙操作违反相关法律规定,本文只是为了解释正向代理向读者举个例子,仅供学习参考,切勿盲目翻墙)。
    img

代理服务器配置:只需配置代理服务器即可,无需配置被代理服务器,proxy_pass:为被代理服务器地址

// 此时只支持http
server {
        listen 80;
        resolver 114.114.114.114; #  配置DNS服务器解析IP地址
        resolver_timeout 5s;
        location /{
              proxy_pass $scheme://$host$request_uri; #proxy_pass 用来要代理的网站,
              #$scheme是客户端请求的协议(如http);
              #$host是客户端请求的域名(如baidu.com);
              #$request_uri是客户端访问的url地址(如/baidu?s=12345)。
              #他们拼接成就是http://baidu.com/baidu?s=12345
              
              # 解决如果URL中带"."后Nginx 503错误
              proxy_set_header Host $http_host;

              # 配置缓存大小
              proxy_buffers 256 4k;
              # 关闭磁盘缓存读写减少I/O
              proxy_max_temp_file_size 0;
              # 代理连接超时时间
              proxy_connect_timeout 30;

              # 配置代理服务器HTTP状态缓存时间
              proxy_cache_valid 200 302 10m;
              proxy_cache_valid 301 1h;
              proxy_cache_valid any 1m;
        }
    }

客户端配置:window11在如下位置配置即可,需要填上nginx的ip地址与其打开的端口号:
img
img

默认上述配置无法支持https,可以使用第三方模块来支持NGINX,可以参考:www.cnblogs.com/Dfengshuo/a…

// 支持https
server {
        listen 443;
        resolver 114.114.114.114; 
        proxy_connect;# 表示启用nginx代理CONNECT(也就能使用https)
        proxy_connect_allow            443;# CONNECT可代理的端口(80默认nginx就可以代理,这里配置其它端口)
        proxy_connect_connect_timeout  10s;# 设置与被代理服务器建立超时的时间
     
        access_log  /var/log/nginx/proxy/access.log;
        error_log   /var/log/nginx/proxy/error.log;
        location /{
              proxy_pass $scheme://$host$request_uri;
        }
    }

nginx反向代理

反向代理也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的。

反向代理:随着请求量的爆发式增长,服务器觉得自己一个人始终是应付不过来,需要兄弟服务器们帮忙,于是它喊来了自己的兄弟以及代理服务器朋友。此时,来自不同客户端的所有请求实际上都发到了代理服务器处,再由代理服务器按照一定的规则将请求分发给各个服务器。

用途:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)用于服务器集群分布式部署的情况下,实现负载均衡,,通过反向代理服务器来优化网站的负载
img

img

代理服务器配置:

server {
    listen 4041; #nginx监听的端口
    server_name localhost; # 域名
     
    location / {
        root /usr/share/nginx/html;   #dist文件需要拷贝到此
        index index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
    
    location ^~ /wechat {#匹配所有路径以/wechat开头的请求
        proxy_pass https://qyapi.weixin.qq.com/cgi-bin;  #设置想要转发的真实后端服务
    }

    location ^~ /relip {
        proxy_pass http://10.87.4.95:5051/api/HrResume;  #设置想要转发的真实后端服务
    }
     
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {  #报错指向页面
        root html;
    }
}

负载均衡(其实就是分布式的反向代理)

负载均衡(Load Balance),它在网络现有结构之上可以提供一种廉价、有效、透明的方法来扩展网络设备和服务器的带宽,并可以在一定程度上增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性等。它充当着网络流中“交通指挥官”的角色,“站在”服务器前处理所有服务器端和客户端之间的请求,把客户端的请求按照一定的算法分发到不同的服务器上,以缓解服务器压力,提高服务器负载和访问能力。

  • 特点:具有高并发、高可靠性、高扩展性、开源等特点

负载均衡配置:
在 http 模块中添加以下配置

    upstream server_list {  # server_list同proxy_pass 配置的链接名称一致 
        server 10.0.0.101:80; # 轮询算法,各访问一次
        server 10.0.0.102:80; # 轮询算法
    }

在server模块中配置如下

    server {
        listen       80;
        server_name 10.0.0.103;

        location / {
           root html;
           index index.html index.htm;
           proxy_pass http://server_list; # 这里的server_list 就是 upstream中的名称: server_list
        }
        error_page 404 /404.html; # 错误页面
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html; # 错误页面
        location = /50x.html {
        }
    }

可参考:https://www.bilibili.com/video/BV1Bx411Z7Do/?spm_id_from=333.337.search-card.all.click&vd_source=71a061bbf64957845424ae7b84b9f691
这个视频中讲得很清晰

负载均衡算法

  • 轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB…
upstream mysvr { 
    server 10.0.0.101:80; # A
    server 10.0.0.101:80; # B   
 }
  • 加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB…
upstream mysvr { 
    server 10.0.0.101:80 wight=1; # A
    server 10.0.0.101:80 wight=4; # B   
 }
  • ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr { 
    server 10.0.0.101:80; # A
    server 10.0.0.101:80; # B   
    ip_hash;
 }

当然还有其它算法,这里就不详细赘述,需要的可自行查阅。

h:nginx会让相同的客户端ip请求相同的服务器。

upstream mysvr { 
    server 10.0.0.101:80; # A
    server 10.0.0.101:80; # B   
    ip_hash;
 }

当然还有其它算法,这里就不详细赘述,需要的可自行查阅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值