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(警告⚠️:FQ操作违反相关法律规定,本文只是为了解释正向代理向读者举个例子,仅供学习参考,切勿盲目FQ)。
代理服务器配置:只需配置代理服务器即可,无需配置被代理服务器,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地址与其打开的端口号:
默认上述配置无法支持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)用于服务器集群分布式部署的情况下,实现负载均衡,,通过反向代理服务器来优化网站的负载
代理服务器配置:
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;
}
当然还有其它算法,这里就不详细赘述,需要的可自行查阅。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人