工具_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服务器池,包含了251252两个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_upstreamfastcgi_next_upstreammemcached_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模块软件包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家庭网络光猫到客厅通过VLAN实现单线复用

大部分家庭装修时没有提前考虑网线分布,一般装修公司都是从各个房间拉一根网线到弱电箱,就结束了,如下图。但是弱电箱在大部分家庭,空间非常小,很难放下一些常见的路由器,花大价钱买了个路由器作为主路由&a…

【C++】继承与模板

继承 1.继承的概念 概念:继承(inheritace)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称之为派生类。继承呈现了面向对象程序设计的…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构,旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段,确保计算机系统在各种攻击和…

Linux: network: ifconfig已经过时,建议使用ip addr相关命令

最近有一个同事在问网络的问题,在debug的过程中还在使用ifconfig命令查看IP的相关信息。 但是这个ifconfig已经不推荐使用了,最好使用ip 相关的命令做操作。 有些信息使用ifconfig显示不出来 ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500ine…

融合DevOps打造企业高效流程体系的实践与探索

一、引言 转眼间&#xff0c;我已毕业十多年&#xff0c;在IT领域深耕不辍&#xff0c;曾涉足全栈研发、大数据研发、架构设计与项目管理等多个岗位&#xff0c;更主导过公司从市场到交付再到运营的全链条流程建设。在这漫长的职业生涯中&#xff0c;一个问题始终萦绕在我心头&…

Linux安装部署数据库:PostgreSQL14

Linux安装部署数据库&#xff1a;PostgreSQL14 一、安装环境1、虚拟机环境2、下载安装包 二、安装步骤1、在线安装 PGSQL2、离线安装 PGSQL3、源码安装 PGSQL 三、基本操作1、初始化配置2、数据库登录3、常用命令项 四、常见问题1、对用户 "postgres" 的对等认证失败…

App测试环境部署

一.JDK安装 参考以下AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 二.SDK安装 安装地址&#xff1a;https://www.androiddevtools.cn/ 解压 环境变量配置 变量名&#xff1a;ANDROID_SDK_HOME 参考步骤&#xff1a; A…

初识jsp

学习本章节前建议先安装Tomcat web服务器&#xff1a;tomcat下载安装及配置教程_tomcat安装-CSDN博客 1、概念 我的第一个JSP程序&#xff1a; 在WEB-INF目录之外创建一个index.jsp文件&#xff0c;然后这个文件中没有任何内容。将上面的项目部署之后&#xff0c;启动服务器…

C++二级 求每个单词的长度的3种解决办法(包括find、substr)

题目&#xff1a;求每个单词的长度 输入一行单词序列&#xff0c;相邻单词之间由1个或多个空格间隔&#xff0c;请对应地计算各个单词的长度。 注意&#xff0c;如果有标点符号(如连字符&#xff0c;逗号)&#xff0c;标点符号算作与之相连的词的一部分。 没有被空格间隔开的符…

3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模

非地面网络 1. Scope4. 非地面网络背景介绍4.1 5G中的非地面网络4.2 非地面网络在5G中的用例4.3 卫星和空中接入网的架构4.4 卫星和空中接入网终端的特点4.5 空气/星载飞行器特性4.6 NTN的覆盖模式4.7 NTN网络架构选项4.8 频谱 5. 非地面网络应用场景5.1 应用场景概览5.2 属性介…

CHAPTER 14 Nonlinearity and Mismatc

CHAPTER 14 Nonlinearity and Mismatch 第6,7章我们介绍了两种非理想: 频率响应和噪声. 这一章我们介绍另外两种非理想现象: 非线性和失配. 我们首先定量化nonlinearity, 学习差分电路和反馈系统的非线性, 以及线性化技术. 然后学习差分电路中的失配和dc offset. 最后学习一些…

51单片机之蜂鸣器驱动

1.简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、 复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。   压电式蜂鸣器主要…

【C++】vector<string>-动态数组存储多个string

#1024程序员节 | 征文# //demo #include <iostream> #include <vector> #include <string>using namespace std; int main() {// 创建一个存储字符串的向量vector<string> Record;// 向向量中添加字符串Record.push_back("example");Record…

css-画一个三角形

<span class"triangle"></span>.triangle {display: inline-block; /* 使 span 能够接受宽高 */width: 0; /* 宽度为 0 */height: 0; /* 高度为 0 */border-left: 50px solid transparent; /* 左边边框 */border-right: 50px solid transparent; /* 右边…

**深入浅出:TOGAF中的应用架构**

摘要&#xff1a; 在企业架构&#xff08;EA&#xff09;领域&#xff0c;TOGAF&#xff08;The Open Group Architecture Framework&#xff09;是一个广泛应用的框架。本文将带你深入了解TOGAF中的应用架构&#xff0c;帮助你理解其核心概念和实际应用。无论你是初学者还是有…

Node-RED的面板的认识及操作

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 文章引言 &#x1f4df; 面板…

深入探索:深度学习在时间序列预测中的强大应用与实现

引言&#xff1a; 时间序列分析是数据科学和机器学习中一个重要的研究领域&#xff0c;广泛应用于金融市场、天气预报、能源管理、交通预测、健康监控等多个领域。时间序列数据具有顺序相关性&#xff0c;通常展示出时间上较强的依赖性&#xff0c;因此简单的传统回归模型往往…

tornado,flaskd这两个框架主要是干什么的

Tornado是一个Python的Web框架&#xff0c;主要用于构建高性能的异步Web应用程序。它基于非阻塞的网络I/O模型&#xff0c;可以处理大量并发连接&#xff0c;适用于需要处理实时性要求较高的应用场景&#xff0c;如实时聊天、实时数据推送等。 Flask是另一个Python的Web框架&a…

论文略读:Less is More: on the Over-Globalizing Problem in Graph Transformers

2024 ICML 主要观点&#xff1a;Graph Transformer 中的过全局化问题 (Over-Globalizing Problem) 当前 Graph Transformer 的注意力机制过度关注那些远端节点&#xff0c;而实际上包含了大部分有用信息的近端节点则被相对忽视了——>提出了一种新的采用协同训练的两级全局…

【人工智能原理】合肥工业大学 宣城校区 实验三 神经网络之网络基础

第1关&#xff1a;神经网络概述 下列说法错误的是 D A、 激活函数可以使神经元搭建输入到输出之间的映射关系。 B、 反馈网络模型在不同 的时刻有属于当前不同的状态&#xff0c;具有一定的记忆功能。 C、 所有神经网络一定都包含输入层、隐藏层、输出层三部分。 D、 …