nginx相关知识点

安装参考

# 解决 ./configure: error: C compiler cc is not found
# 或者 make: *** No rule to make target `build', needed by `default'. Stop.
# 或者 新机器安装nginx,在make编译时报错:
# 注意 需要删除原来configure的那个目录
sudo yum install -y gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel autoconf automake make gd gd-devel

安装

# 参考文档:https://blog.csdn.net/biraotian/article/details/117084463
./configure --prefix=/usr/local/nginx \# 配置https--with-http_ssl_module \# 安装gzip--with-http_gzip_static_module \# 开启nginx自带的监控--with-http_stub_status_module \# vts工具监控,下载地址:https://github.com/vozlt/nginx-module-vts,下载解压后放到nginx目录下--add-module=nginx-module-vts

http中添加log_format

log_format log_json '{"time_local": "$time_iso8601", ''"remote_addr": "$remote_addr", ''"remote_user": "$remote_user", ''"http_referer": "$http_referer", ''"request": "$request", ''"status": $status, ''"body_bytes_sent": $body_bytes_sent, ''"http_user_agent": "$http_user_agent", ''"http_x_forwarded_for": "$http_x_forwarded_for", ''"upstream_addr": "$upstream_addr",''"upstream_connect_time": "$upstream_connect_time",''"upstream_response_time": "$upstream_response_time",''"upstream_header_time": "$upstream_header_time",''"upstream_http_host": "$upstream_http_host",''"request_time": "$request_time"'' }';

对应服务映射的模板样例

注意:需要在http中引入该配置 ===> include /usr/local/nginx/conf/openapi.conf;

server {listen 9004;server_name localhost;access_log  /app/nginx/logs/community-view.access.log log_json;location ~* \.(js|css|htm|html|gif|jpg|jpeg|png|bmp|ico|less|otf|eot|svg|ttf|woff|woff2|pdf|txt)$ {root /app/nginx/html/community-view;}location / {proxy_pass http://app_electronic_letter/;proxy_set_header Host $host:$server_port;proxy_set_header user-agent $http_user_agent;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Content-Type $http_content_type;client_max_body_size 100m;client_body_buffer_size 1280k;proxy_connect_timeout 5s;proxy_send_timeout 900s;proxy_read_timeout 900s;proxy_buffering off;proxy_temp_file_write_size 640k;proxy_redirect off;}}upstream app_electronic_letter {server 172.17.9.13:9004 weight=1 max_fails=3 fail_timeout=20s;server 172.17.9.14:9004 weight=1 max_fails=3 fail_timeout=20s;
}

常用命令

# 查看nginx版本
nginx -v# 检测nginx的配置文件
nginx -t# 平滑重启:不会强制结束正在工作的连接,需要等所有连接都结束才会重启
nginx -s reload# 指定配置文件启动,也可以不指定,使用默认的nginx.conf
nginx -c /etc/nginx/nginx.conf

负载均衡

  • 默认:轮询

    upstream myServers {server 192.168.0.1:8080;server 192.168.0.2:8080;
    }
    
  • weight权重,默认为1,当后端服务器性能不均衡时,可调整访问比例

    upstream myServers {server 192.168.0.1:8080 weight=1;server 192.168.0.2:8080 weight=2;server 192.168.0.3:8080 weight=3;
    }
    
  • ip_hash:对ip进行hash,可保证同一用户固定访问某后端服务器。当服务器之间session不能共享的时候,可以通过ip_hash来保证session会话

    upstream myServers {ip_hash;server 192.168.0.1:8080;server 192.168.0.2:8080;
    }
    
  • least_conn:将请求转发给连接数最少的后端服务器

    upstream myServers {least_conn;server 192.168.0.1:8080;server 192.168.0.2:8080;
    }
    
  • fair:按照响应时间来分配请求,优先分配给响应时间短的。第三方策略,需要安装插件

    upstream myServers {fair;server 192.168.0.1:8080;server 192.168.0.2:8080;
    }
    
  • url_hash:对url进行hash,同一请求会固定到同一服务器上,配合缓存使用提高效率

    upstream myServers {hash $request_uri;server 192.168.0.1:8080;server 192.168.0.2:8080;
    }
    

    upstream注释说明:

    # down:表示当前server不参与负载
    # weight:权重,默认为1,值越大权重越大
    # max_fails:最大请求失败次数,默认为1,超过该次数时,返回proxy_next_upstream模块定义的错误
    # fail_timeout:max_fails次失败后,暂停的时间
    # backup:其他非backup服务器down后者忙的时候,会请求backup服务器
    upstream backend {server 192.168.0.1:8080 down;server 192.168.0.2:8080 weight=2 max_fails=3 fail_timeout=20s;server 192.168.0.3:8080;server 192.168.0.4:8080 backup;
    }
    

location匹配

  1. 精确匹配:

    # 例如 http://localhost:8888/abc
    location = /abc {}
    
  2. 截断前缀匹配:

    # 截断前缀匹配:匹配任何以 /abc 开头的地址,匹配到以后,停止往下搜索正则,采用这一条返回。
    location ^~ /abc {}
    
  3. 不区分大小写的正则匹配:

    # 匹配所有以 gif,jpg或jpeg 结尾的请求:location ~* \.(gif|jpg|jpeg)$ {}
    location ~* /abc {}
    
  4. 正则匹配:

    # 正则匹配:匹配任何以 /abc 开头的地址,匹配到以后,还要继续往下匹配。
    # 只有后面的正则表达式没有匹配到且也没有更长的前缀匹配时,才会采用这一条返回。
    location ~ /abc {}
    
  5. 普通路径的前缀匹配:

    # 普通路径前缀匹配:匹配任何以 /abc 开头的地址,匹配到以后,还要继续往下匹配。
    # 只有后面的正则表达式没有匹配到且也没有更长的前缀匹配时,才会采用这一条返回
    location /abc {}
    
  6. 缺省匹配:

    # 优先级最低:因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求,如果所有规则都没匹配到,则匹配到这条规则。
    location / {}
    

优先级:1 > 2 > 3 > 4 > 5 > 6

故障转移

当某结点故障时将请求转发到upstream的另一结点,虽然保证了集群的高可用,但当高频率的请求转发时也会给集群增加压力,严重时会雪崩。

health_check

nginx的upstream模块的health_check指令用于配置健康检查功能,可以检查后端服务器的健康状态,以便nginx能够自动地将请求转发到健康的服务器上。该指令的语法如下:

health_check [parameters];

其中,parameters参数可以包括以下选项:

  • interval:指定健康检查的时间间隔,默认为5秒。
  • timeout:指定健康检查的超时时间,默认为2秒。
  • fails:指定在多少次健康检查失败后将服务器标记为不健康,默认为1次。
  • passes:指定在多少次健康检查成功后将服务器标记为健康,默认为1次。
  • uri:指定健康检查的URI,默认为/。
  • match:指定健康检查的响应内容,如果响应内容与该参数不匹配,则认为服务器不健康。

例如,以下配置将启用健康检查功能,每10秒检查一次服务器的健康状态,如果在3次检查中有2次失败,则认为服务器不健康:

upstream backend {server backend1.example.com;server backend2.example.com;health_check interval=10s fails=2 passes=1;
}

注意:健康检查功能需要在nginx编译时启用ngx_http_upstream_check_module模块才能使用。

proxy_next_upstream

# 在server的location下添加proxy_next_upstream模块
location / {proxy_pass http:127.0.0.1:8080;proxy_send_timeout 60s;proxy_read_timeout 60s;......# 故障转移的条件:如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。 proxy_next_upstream http_502 http_504 error timeout invalid_header;# 重试次数(针对当前超时、不可用节点的重试次数)proxy_next_upstream_tries 3;
}

keepalive_requests

使用keepalive模块的keepalive_requests指令,设置每个连接最大请求次数,当某个后端服务器出现故障时,自动将请求转发到下一个健康的服务器上。

ip_hash

将同一个客户端的请求始终转发到同一个后端服务器上,当某个后端服务器出现故障时,只有该客户端的请求会受到影响,其他客户端的请求仍然可以正常处理。

backup

将某个后端服务器设置为备用服务器,当其他所有服务器都出现故障时,自动将请求转发到备用服务器上。

配置解释

# nginx进程数,建议设置为等于CPU总核心数。
# worker_processes  auto; 自动检测cpu数量
worker_processes  1;# 事件区块开始
events {# 单个进程最大连接数(最大连接数=连接数*进程数)# 根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。worker_connections  1024;
}# 设定http服务器,利用它的反向代理功能提供负载均衡支持
http {#include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中include       mime.types;# 默认文件类型default_type  application/octet-stream;# 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,# 如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。sendfile        on;# 长连接超时时间,单位是秒keepalive_timeout  65;# 第一个Server区块开始,表示一个独立的虚拟主机站点server {# 提供服务的端口,默认80listen       80;# 提供服务的域名主机名server_name  localhost;# 对 "/" 启用反向代理,第一个location区块开始location / {root   html;  #服务默认启动目录index  index.html index.htm; # 默认的首页文件,多个用空格分开}# 错误页面路由error_page   500 502 503 504  /50x.html; # 出现对应的http状态码时,使用50x.html回应客户location = /50x.html { # location区块开始,访问50x.htmlroot   html;  # 指定对应的站点目录为html}}
}

nginx.service

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
Restart=always
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true[Install]
WantedBy=multi-user.target

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

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

相关文章

vue脚手架开发打地鼠游戏

游戏设计: 规划游戏的核心功能,如场景、随机出现的地鼠、计分系统、游戏时间限制等。简单设计游戏流程,包括开始界面、游戏进行中、关卡设置(如不同关卡地鼠出现数量、游戏时间等)、关卡闯关成功|失败、游戏结束闯关成…

Web 后端 请求与响应

一 请求响应 1. 请求(Request) 客户端向服务器发送的HTTP请求,通常包含以下内容: 请求行:HTTP方法(GET/POST等)、请求的URL、协议版本。 请求头(Headers):…

Linux的基础指令和环境部署,项目部署实战(下)

目录 上一篇:Linxu的基础指令和环境部署,项目部署实战(上)-CSDN博客 1. 搭建Java部署环境 1.1 apt apt常用命令 列出所有的软件包 更新软件包数据库 安装软件包 移除软件包 1.2 JDK 1.2.1. 更新 1.2.2. 安装openjdk&am…

DeepSeek在linux下的安装部署与应用测试

结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…

罗德与施瓦茨ZNB20,矢量网络分析仪9KHz-20GHz

罗德与施瓦茨ZNB20矢量网络分析仪9KHz-20GHz R&SZNB20矢量网络分析仪 产品型号: ZNB20 产品品牌:罗德与施瓦茨 R&S 产品名称: 矢量网络分析仪 频率范围:9kHz - 20GHz R&S ZNB 矢量网络分析仪 良好的测量速度、动态范围和操作方便性&am…

axios post请求 接收sse[eventsource]数据的

axios 接收sse数据的 axios 接收sse数据的 EventSource什么 基于 HTTP 协议实现,通过与服务器建立一个持续连接,实现了服务器向客户端推送事件数据的功能。在客户端,EventSource 对象通过一个 URL 发起与服务器的连接。连接成功后&#xff0…

Python----数据结构(双向链表:节点,是否为空,长度,遍历,添加,删除,查找,循环链表)

一、双向链表 1.1、概念 双向链表是一种链表数据结构,每个节点除了包含指向下一个节点的指针外,还包含指向前一个节点的指针。这种特性使得在双向链表中,可以从任意一个节点开始,向前或向后遍历链表。 1.2、特点 • 既可以从…

VScode内接入deepseek包过程(本地部署版包会)

目录 1. 首先得有vscode软件 2. 在我们的电脑本地已经部署了ollama,我将以qwen作为实验例子 3. 在vscode上的扩展商店下载continue 4. 下载完成后,依次点击添加模型 5. 在这里可以添加,各种各样的模型,选择我们的ollama 6. 选…

投资组合风险管理

投资组合风险管理 市场风险 信用风险流动性风险风险指标收益率波动率最大回撤 α \alpha α(詹森指数), β \beta β卡玛比率月胜率上/下行捕获比夏普比率索提诺比率经风险调整的收益率(𝑀2)特雷诺比率信息…

Mongodb数据管理

Mongodb数据管理 1.登录数据库,查看默认的库 [rootdb51~]# mongo> show databases; admin 0.000GB config 0.000GB local 0.000GB> use admin switched to db admin > show tables system.version > admin库:admin 是 MongoDB 的管理…

GTP3 大模型

GTP3 大模型 模型架构训练核心思想 GTP3 : OpenAI 在 2020 年 5 月发布 GPT-3,发表 Language Models are Few-Shot Learner理念:Few-Shot 思想 , 用少量样本微调,让模型更准确 参数 : 最大模型 : 1750 亿参数多头 Transformer : 96 层Head…

神经网络实验——MLP

目录 1 目的 2 方法 3 源代码 4 结果 1 目的 ①熟悉 Python 的输入输出流; ②学会使用 matplotlib进行图像可视化; ③掌握神经网络的基本原理,学会使用 sklearn 库中的 MLPClassifier 函数构建基础的多层感知机神经网络分类器; ④学会使用网格查找进行超参数优…

Cursor 无限续杯

最近DeepSeek官网无法访问,导致DeepSeekCLine绑定的API Key也无法使用了。那么,除了DeepSeek,还有没有其他好用的AI编程工具呢?答案当然是Cursor!不过,由于各种原因一直没有用上Cursor,也不知道…

Windows本地部署DeepSeek

文章目录 一、准备工作1、准备服务器2、准备APP 二、部署deepseek-r11、脚本部署2、脚本部署 三、ChatBox集成 一、准备工作 1、准备服务器 本案例使用Windows电脑 2、准备APP Download Ollama Download Chatbox 二、部署deepseek-r1 1、脚本部署 双击安装完Ollama,默认…

QML 自定义矩形框Rectangle,实现四个边框自定义大小

一、自定义矩形 效果图 边框大小为:左2 上2 右5 下10 简单来说,就是定义两个矩形,一个在外边一个在内部; 再通过设置他们的边距,即可设置相应的边框宽度; 1.编码 新建空的qml文件 MyRectangle.qml im…

筛选相同项

# import os # import pandas as pd# # 文件路径,根据实际情况修改 # file_path_1 rC:\Users\Administrator\Desktop\python\文件1.xlsx # file_path_2 rC:\Users\Administrator\Desktop\python\文件2.xlsximport os import pandas as pd# 获取当前脚本所在的目录…

MVTEC数据集笔记

前言 网上的博客只有从论文里摘出的介绍,没有数据集文件详细的样子,下载数据集之后,对数据集具体的构成做一个补充的笔记。 下载链接:https://ai-studio-online.bj.bcebos.com/v1/7d4a3cf558254bbaaf4778ea336cb14ed8bbb96a7f2a…

Bom详解和Dom详解

Javascript的数据类型 1.BOM(浏览器对象模型)1.1window对象(1)全局作用域:(2)窗口属性:(3)弹窗和对话框:(4)定时器:(5)导航和历史:(6)打开和关闭窗口: 1.2navigator对象(1)浏览器信息属性:(2)浏…

Android 虚拟机与ClassLoader类加载笔记

1 Android虚拟机 在介绍Android的虚拟机之前,我们先来看一下JVM虚拟机之下,我们的class文件的字节码指令的Demo: public class Demo {public static void test() {int a 1;int b 2;int c a b;} } 将Demo.class文件使用命令&#xff1a…

STM32 HAL库USART串口DMA IDLE中断编程:避坑指南

HAL_UART_Receive接收最容易丢数据了,STM32 HAL库UART查询方式实例 可以考虑用中断来实现,但是HAL_UART_Receive_IT还不能直接用,容易数据丢失,实际工作中不会这样用,STM32 HAL库USART串口中断编程:演示数据丢失, 需要在此基础优化一下. STM32F103 HAL库USART串口…