工具_Nginx
文章目录
- location语法介绍
- 跨域配置
- https配置
- http重定向到https配置
- 反向代理配置
- 负载均衡配置
- upstream配置
- 负载均衡算法
- (1)rr轮询(默认)
- (2)wrr加权轮询(weight)
- (3)ip_hash(会话保持)
- (4)fair(动态调度算法)
- (5)url_hash算法(web缓存节点)
一句话简介:C语言写的an HTTP web server, reverse proxy, content cache, load balancer, TCP/UDP proxy server, and mail proxy server.
2-clause BSD License. 可以商用不开源
官网:https://nginx.org/en/
配置手册:https://nginx.org/en/docs/
nginx是一个主进程外加工作进程,查找nginx特性及配置根据模块进行查找
比如最常见的
- ngx_http_proxy_module
location语法介绍
对于location 匹配规则如下
location = /uri #开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri #开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern #开头表示区分大小写的正则匹配。
location ~* pattern #开头表示不区分大小写的正则匹配。
location /uri #不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location / #通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
多个 location 配置的情况下匹配顺序为
首先精确匹配 = ,如果匹配成功,则停止其他匹配
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配
然后匹配不带任何修饰的前缀匹配。
最后是交给 / 通用匹配
当有匹配成功时候,停止匹配,按当前匹配规则处理请
跨域配置
跨域策略是浏览器的一个保护策略
发起HTTP请求时如果监测到会违反跨域策略,会先发起预检请求(OPTIONS请求),
- 服务器接收到预检请求后,需要决定是否允许跨域请求。如果允许,服务器的响应中应包含:
Access-Control-Allow-Origin
:指定允许访问资源的源,可以是具体的域名,也可以是通配符*
(但不推荐使用,因为它可能会带来安全风险)。Access-Control-Allow-Methods
:列出允许的HTTP方法。Access-Control-Allow-Headers
:如果请求中包含自定义头信息,这里需要列出这些头信息的名称。
- 服务器还可以设置
Access-Control-Max-Age
头,用来指定预检请求的缓存时间,这样在这段时间内,浏览器不会再次发送预检请求。
正常不配置,直接前端:http://localhost:5500 get请求 http://localhost:8080
No ‘Access-Control-Allow-Origin’ header is present on the requested resource
#nginx配置文件中加请求头语法
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Allow-Credentials' 'true';#处理浏览器同源策略的预检请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
https配置
# HTTPS server#server {listen 443 ssl; #https默认是443端口server_name localhost;ssl_certificate cert.pem; # ssl证书文件ssl_certificate_key cert.key; # ssl秘钥文件ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #可选配置,指定ssl加密算法优先级ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #可选配置,指定ssl协议版本ssl_prefer_server_ciphers on;location / {root html;index index.html index.htm;}}
http重定向到https配置
rewrite ^(.*)$ https://$host$1 permanent;# 将这条配置添加到http server中即可或者
return 301 https://$server_name$request_uri; # 两种配置一种即可
反向代理配置
www.zhengqing520.com/api 转发到http://www.zhengqing520.com:9528/api/
www.zhengqing520.com/blog 转发到http://zhengqingya.gitee.io/blog/
server {listen 80;server_name www.zhengqing520.com;# 服务器地址或绑定域名location ^~ /api { # ^~/api 表示匹配前缀为api的请求proxy_pass http://www.zhengqing520.com:9528/api/; # 注:proxy_pass的结尾有/, -> 效果:会在请求时将/api/*后面的路径直接拼接到后面# proxy_set_header作用:设置发送到后端服务器(上面proxy_pass)的请求头值 # 【当Host设置为 $http_host 时,则不改变请求头的值;# 当Host设置为 $proxy_host 时,则会重新设置请求头中的Host信息;# 当为$host变量时,它的值在请求包含Host请求头时为Host字段的值,在请求未携带Host请求头时为虚拟主机的主域名;# 当为$host:$proxy_port时,即携带端口发送 ex: $host:8080 】proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 在web服务器端获得用户的真实ip 需配置条件① 【 $remote_addr值 = 用户ip 】proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 在web服务器端获得用户的真实ip 需配置条件②proxy_set_header REMOTE-HOST $remote_addr;# proxy_set_header X-Forwarded-For $http_x_forwarded_for; # $http_x_forwarded_for变量 = X-Forwarded-For变量}location ^~ /blog/ { # ^~/blog/ 表示匹配前缀为blog/后的请求proxy_pass http://zhengqingya.gitee.io/blog/; proxy_set_header Host $proxy_host; # 改变请求头值 -> 转发到码云才会成功proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-NginX-Proxy true;}
}
负载均衡配置
使用ngx_http_upstream_module模块和ngx_http_proxy_module模块
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream www_server_pools { #这里定义Web服务器池,包含了251,252两个Web节点server 10.43.187.251:80 weight=1;server 10.43.187.252:80 weight=1;}server { #这里定义代理的负载均衡域名虚拟主机listen 80;server_name www.qll.com;location / {proxy_pass http://www_server_pools; #访问www.qll.com,请求发送给www_server_pools里面的节点}}
}
upstream配置
- server
负载后面的RS配置,可以是ip或者域名。
- weight
请求服务器的权重。默认值为1,越大表示接受的请求比例越大。
- max_fails
nginx 尝试连接后端主机失败的次数。
这个数值需配合proxy_net_upstream
,fastcgi_next_upstream
和memcached_next_upstream
这三个参数来使用的。
当nginx接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404,502,503
- fail_timeout
在max_fails
定义的失败次数后,距离下次检查的时间间隔,默认10s
- backup
热备配置,标志这台服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求
- down
表示这个服务器永不可用,可配合ip_hash使用
upstream web_pools {server linux.example.com weight=5;
server 127.0.0.1:8080 max_fail=5 fail_timeout=10s;
# 当5次连续检查失败后,间隔10s后重新检测。
server linux.example.com:8080 backup;
# 指定备份服务器。作用:等上面服务器全部不可访问时就向它转发请求。}
负载均衡算法
(1)rr轮询(默认)
默认调度算法,按照客户端请求逐一分配到不同的后端服务器,宕机的服务器会自动从节点服务器池中剔除。
upstream server_pools {server 192.168.1.251;server 192.168.1.252;}
注意:对于服务器
性能不同
的集群,该算法容易引发资源分配不合理
等问题。
(2)wrr加权轮询(weight)
在rr轮询算法的基础上加上权重,权重和用户访问成正比,权重值越大,被转发的请求也就越多
upstream server_pools {server 192.168.1.251 weight=5;server 192.168.1.252 weight=10;
}
加权轮询应用于服务器性能不等的集群中,使资源分配更加合理化。
(3)ip_hash(会话保持)
每个请求按访问 IP 的hash
结果分配,每个访客固定访问一个后端服务器,可解决session
不共享的问题。
upstream server_pools {ip_hash;server 192.168.1.251;server 192.168.1.252;}
Session 不共享是说,假设用户已经登录过,此时发出的请求被分配到了 A 服务器,但 A 服务器突然宕机,用户的请求则会被转发到 B 服务器。但由于 Session 不共享,B 无法直接读取用户的登录信息来继续执行其他操作。
(4)fair(动态调度算法)
根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pools {server 192.168.1.251;server 192.168.1.252;fair;}
这是更加智能的调度算法,但Nginx
本身不支持
fair调度算法。如果需要使用fair调度,必须下载Nginx相关模块upstream_fair
。
(5)url_hash算法(web缓存节点)
根据访问URL的hash结果来分配请求,让每个URL定向到同一个后端服务器。
upstream server_pools {server qll:9001;
server qll:9002;
hash $request_uri;
hash_method crc32;}
同样,Nginx本身是不支持url_hash,如果需要使用这种调度算法,必须安装Nginx的hash模块软件包。
相关文章:

工具_Nginx
文章目录 location语法介绍跨域配置https配置http重定向到https配置反向代理配置负载均衡配置upstream配置负载均衡算法(1)rr轮询(默认)(2)wrr加权轮询(weight)(3&#x…...

web开发Model1
WEB开发模式–Model 1 Model1是指基于JSPJavaBean的开发模式,JSP负责web的相关部分,包括数据的展示,请求逻辑的控制等,JavaBean负责业务的逻辑部分,包括数据的存取,业务的实现。 这是我写的一个小项目&…...

ImportError: cannot import name ‘Sequential‘ from ‘keras.models‘
报错信息 ImportError: cannot import name Sequential from keras.models错误代码示例 import tensorflow as tf from keras.models import Sequential # 报错行model Sequential()错误分析 这个错误通常发生在 TensorFlow 和 Keras 的版本不兼容时。TensorFlow 2.x 版本…...

python实战(二)——房屋价格回归建模
一、任务背景 本章将使用一个经典的Kaggle数据集——House Prices - Advanced Regression Techniques进行回归建模的讲解。这是一个房价数据集,与我们熟知的波士顿房价数据集类似,但是特征数量要更多,数据也要更为复杂一些。下面,…...

UHF机械高频头的知识和待学习的疑问
电路图如上所示: 实物开盖清晰图如下: 待学习和弄懂的知识: 这是一个四腔的短路线谐振。分别是输入调谐,放大调谐,变频调谐和本振 第一个原理图输入为75欧(应该是面向有同轴线的天线了)如下图…...

深入理解 SQL 中的 WITH AS 语法
在日常数据库操作中,SQL 语句的复杂性往往会影响到查询的可读性和维护性。为了解决这个问题,Oracle 提供了 WITH AS 语法,这一功能可以极大地简化复杂查询,提升代码的清晰度。本文将详细介绍 WITH AS 的基本用法、优势以及一些实际…...

同三维T80005JEHA-4K60 4K60超高清HDMI/AV解码器
1路HDMI1路CVBS1路3.5音频输出,HDMI支持4K60,支持1路4K60解码,1路高清转码 产品简介: T80005JEHA-4K60是一款4K60超高清解码器,支持1路HDMI/CVBS解码输出,HDMI支持4K60,适用于各种音视频解决方…...

深信服秋季新品重磅发布:安全GPT4.0数据安全大模型与分布式存储EDS新版本520,助力数字化更简单、更安全
10月23日,深信服举办2024秋季新品发布会。发布会上,深信服正式推出了最新的创新成果:实现动静态数据分类分级和数据风险自动研判分析的安全GPT4.0、具备卓越可靠性和AI勒索防护能力的分布式存储EDS新版本520。通过这些新品和能力,…...

Flutter图片控件(七)
1、加载图片 import package:flutter/material.dart;void main() {runApp(const MaterialApp(home: MyHomePage(),)); }class MyHomePage extends StatelessWidget {const MyHomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(appBar: AppB…...

JavaEE初阶---文件IO总结
文章目录 1.文件初识2.java针对于文件的操作2.1文件系统的操作---file类2.2文件内容的操作---流对象的分类2.4字符流的操作》文本文件2.4.1异常的说明2.4.2第一种文件内容的读取方式2.4.3第二种读取方式2.4.4close的方法的介绍2.4.5close的使用优化操作2.4.6内容的写入 2.3字节…...

10.28Python_pandas_csv
三、读取CSV文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本); CSV 是一…...

数据处理与可视化:pandas 和 matplotlib 初体验(9/10)
数据处理与可视化:pandas 和 matplotlib 初体验(9/10) 介绍 在如今的数据驱动时代,掌握数据处理与可视化是每个开发者和数据科学家不可或缺的技能。Python 拥有强大的数据处理库 pandas 和数据可视化库 matplotlib,它…...

鸿蒙学习总结
鸿蒙(HarmonyOS),做为国产自主研发设计的第一个操作系统,从开放测试以来一直备受关注。其纯血鸿蒙版(HarmonyOS NEXT)也于进日发布。过去的一段时间里,我站在一个移动开发者的角度对HarmonyOS进…...

如何修改文件创建时间?六个超简单修改方法介绍
怎么修改文件创建时间?在信息安全与隐私保护的领域里,每一个细节都可能成为泄露敏感信息的突破口。文件的创建时间,这个看似微不足道的数据点,实则可能蕴含着重要的时间线索,对于不希望被外界窥探其内容或来源的个人及…...

【MySQL 保姆级教学】内置函数(9)
内置函数 1. 日期函数1.1 日期函数的种类1.2 示例1.3 日期的转换 2. 字符串函数2.1 种类2.2 示例 3. 数学函数3.1 种类3.2 向上取整和向下取整3.3 示例 4. 其他函数4.1 查询当前用户/数据库4.2 ifnull(val1,val2)4.3 md5()函数4.4 password()函数 1. 日期函数 1.1 日期函数的种…...

华为大咖说丨如何通过反馈机制来不断优化大模型应用?
本文分享自时习知 作者:袁泉(华为AI数据工程专家)全文约3015字,阅读约需8分钟 大模型应用正式投入使用后,存在一个较为普遍的情况:在利用“大模型提升业务运营效率”的过程中,业务部门和IT团队…...

上海亚商投顾:沪指缩量震荡 风电、传媒股集体走强
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天缩量震荡,三大指数集体收涨,北证50则跌超7%,超80只北交所个股跌逾…...

三磺酸-Cy3.5-羧酸在水相环境中表现良好,能够提高成像的清晰度和准确性
一、基本信息 中文名称:三磺酸-Cy3.5-羧酸,水溶性Cy3.5 羧基 英文名称:trisulfo-Cy3.5-carboxylic acid,trisulfo-Cy3.5-COOH,trisulfo-Cyanine3.5-COOH 分子式:C41H44N2NaO11S3- 分子量:85…...

国标GB28181视频平台EasyGBS国标GB28181软件实现无需插件的视频监控对讲和网页直播
在当今社会,视频监控已经成为公共安全、企业管理、智能城市建设等领域不可或缺的一部分。然而,由于不同厂家和平台之间的兼容性问题,视频监控系统的联网和整合面临巨大挑战。为了解决这个问题,国家制定了《公共安全视频监控联网系…...

mac nwjs程序签名公证(其他mac程序也一样适用)
为什么需要公证 mac os14.5之后的系统,如果不对应用进行公证,安装,打开,权限使用上都会存在问题,而且有些问题你强制开启(sudo spctl --master-disable)使用后可能会有另外的问题, …...

网络应用技术 实验一:路由器实现不同网络间通信(华为ensp)
目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1:完成网络部署 2、任务 2:设计全网IP 地址 3、任务 3:实现全网主机互通 六、实验步骤 1、在ensp中部署网络 2、配置各主机 IP地址、子网掩…...

使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南
使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南 初识 Qt 和 gRPC 什么是 Qt?什么是 gRPC? 项目结构概述创建 proto 文件定义 API 下载 api.proto 文件解析 proto 文件 1. package 与 option 语句2. 消息类型定义 TrafficSpeedUserUserSt…...

【mysql进阶】5-事务和锁
mysql 事务基础 1 什么是事务 事务是把⼀组SQL语句打包成为⼀个整体,在这组SQL的执⾏过程中,要么全部成功,要么全部失败,这组SQL语句可以是⼀条也可以是多条。再来看⼀下转账的例⼦,如图: 在这个例⼦中&a…...

指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路
定义一些关键字代表的意义 STRUCT: 代表需要输入的格式化的信息IMPORT: 代表需要输入的外部信息, 这些信息通常是客观的SEARCH: 需要从某地比如数据库检索搜集信息SUM: 一种宏观的加和操作, 比如两个股票户ABAB,微观上实际还是有差异GROUP: …...

【论文分享】居住开放空间如何影响老年人的情感:使用可穿戴传感器的现场实验
本研究首次通过跟踪实时、高分辨率的环境暴露和情绪反应来研究和比较不同质量住宅社区中的居住开放空间(ROS)与老年人情绪之间关联;并采用混合方法,包括可穿戴传感器和问卷调查,收集了中国广州老年居民的客观和主观住宅…...

入门 | Prometheus+Grafana 普罗米修斯
#1024程序员节|征文# 一、prometheus介绍 1、监控系统组成 一个完整的监控系统需要包括如下功能:数据产生、数据采集、数据存储、数据处理、数据展示、分析、告警等。 (1)、数据来源 数据来源,也就是需要监控的数据…...

制作Ubuntu根文件系统
制作Ubuntu根文件系统: gunzip ubuntu-base-22.04.5-base-arm64.tar.gz mkdir ubuntu tar xvpf ubuntu-base-22.04.5-base-arm64.tar -C ubuntu 挂载目录、复制dns、执行chroot cd /userdisk/ubuntu cp /etc/resolv.conf ./etc/resolv.conf mount --bind /dev ./d…...

16个最佳测试管理工具(2024)
1、前言 测试管理解决方案能够帮助你捕捉测试需求、设计测试用例、生成测试执行报告、管理资源等。软件质量的疏忽可能导致公司遭受巨大的经济损失、声誉损害或面临诉讼风险。一个优秀的测试管理工具是防止缺陷和故障进入生产环节的关键。 2、PractiTest 功能特点&#x…...

基于知识图谱的猕猴桃种植技术问答系统
猕猴桃怎么种植更高效、病虫害怎么防治、最适宜的气候条件有哪些?作为一名科技研发迷,这些问题是不是听起来很有挑战性?咱们今天就来聊聊一个特别的研发项目——基于知识图谱的猕猴桃种植技术问答系统。这不仅仅是一个农业项目,它…...

Swift雨燕蜂窝无线通信系统介绍
本文博客链接:jdh99-CSDN博客,作者:jdh,转载请注明. 1. 概述 物联网小无线通信技术众多,其中大多是小范围小规模的无线通信技术,而行业难点是如何做到广覆盖、大容量、低功耗。 针对以上难点,宏讯物联研发了Swift雨燕蜂窝无线通信技术&…...