从0到1学会nginx分布式框架

news2024/11/14 13:29:14

nginx

项目地址
晓智科技晓智科技
晓智文档晓智文档
源码地址源码地址
文档源码文档源码

yum 安装 nginx

  1. 安装 yum-utils
sudo yum  install -y yum-utils
  1. 添加 yum 源文件
# 新建文件
vim /etc/yum.repos.d/nginx.repo
# 添加文件源
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  1. 使用 yum 进行安装
yum install -y nginx
  1. 查看是否安装成功
yum list | grep nginx
  1. 查看 nginx 的安装位置
whereis nginx
  1. 启动 nginx
systemctl start nginx
  1. 查看 nginx 是否启动成功
ps -ef | grep nginx

nginx 常用系统命令

  1. 启动 nginx
systemctl start nginx
  1. 停止 nginx
systemctl stop nginx
  1. 重启 nginx
systemctl restart nginx
  1. 重新加载配置文件
systemctl reload nginx
  1. 查看 nginx 状态
systemctl status nginx
  1. 开机启动
systemctl enable nginx

目录结构

  1. nginx 常用目录

alt text

核心配置文件

  1. nginx.conf 配置文件
user www-data;
#master_process on| off #指定是否开启工作进程
worker_processes auto; #设置工作进程个数
daemon off; #是否以守护进程运行
pid /run/nginx.pid; #用来配置nginx进程id存放位置
include /etc/nginx/modules-enabled/\*.conf;

events {
    worker_connections 768; #单个worker进程最大连接数
    multi_accept on; #设置是否允许周时接收多个网络链接
}

http {
    sendfile on; #是否使用sendfile()传输文件,可以大大提高nginx文件传输
    tcp_nopush on; #
    types_hash_max_size 2048;
    # server_tokens off;
    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    keepalive_timeout 75s #用来设置长链接的超时时间
    keepalive_requests 100; #用来设置一个keep-alive连接使用的次数

    include /etc/nginx/mime.types;
    default_type application/octet-stream; #响应浏览器请求默认MIME类型

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log; #配置错误日志

    gzip on;
}
  1. 配置返回不同 MIME 类型
server
{
    listen 80;
    server_name 47.107.101.79;
    index index.html index.htm default.htm default.html;

    location /get_text {
        default_type text/html; #返回html类型
        return 200 "<h1>this is a text</h1>";
    }

    location /get_json {
        default_type application/json; #返回json类型
        return 200 "{'name':'hello'}";
    }
}

nginx 配置到系统变量

  1. 修改/etc/profile 文件
vim /etc/profile
export PATH=$PATH:/usr/sbin;
  1. 使之立即生效
source /etc/profile
  1. 验证是否生效
nginx -v

server_name 匹配规则

  1. 匹配优先级
  • 精确区配 > 前通配符匹配 > 后通配符匹配 > 正则表过式匹配 > 默认匹配
  1. 精确匹配
server
{
    listen 80;
    server_name www.xiaozhi.shop m.xiaozhi.shop doc.xiaozhi.shop;
    ...
}
  1. 通配符匹配
server
{
    listen 80;
    server_name *.xiaozhi.shop;
    ...
}
  1. 正则表达式匹配
server
{
    listen 80;
    server_name ~^www\.(\w+)\.shop;
    ....
}

location 匹配规则

  1. 不带任何符号,以指定模式开始
location /abc {
    default_type text/plain;
    return 200 "success";

}
  1. 精确模式匹配(=)
location =/abc {
    default_type text/plain;
    return 200 "success";

}
  1. 区分大小写正则表达式匹配(~)
location ~/abc\w$ {
    default_type text/plain;
    return 200 "success";
}
  1. 不区分大小写正则表达式匹配(~*)
location ~*^/abc\w$ {
    default_type text/plain;
    return 200 "success";
}
  1. 停止向后搜索模式(^~)
location ^~/abcd {
    default_type text/plain;
    return 200 "abcd success";
}

请求资源目录 root/alias

  • root 的处理结果是: root 路径+location 路径
  • alias 的处理结果:使用 alias 路径替换 location 路径
  • alias 目一个目录别名的定义,root 则是最上层目录的含义
  • 如果 location 路径以’/‘结尾,则 alias 也必须以’/'结尾,root 没有要求
  1. root 为 root 路径+location 路径
location /images {
    root /mnt/html;
}
  1. alias 为 alias 路径替换 location 路径
location /images {
    alias /mnt/html/images;
}

index 加载静态资源

  1. 可以跟多个请求资源,依次查找,找到第一个为止
location /images {
    root /mnt/html;
    index index.html 1.png;
}

error_page 错误访问页面

  1. 可以指定具体跳转的地址
server{
    error_page 404 https://xiaozhi.shop;
}
  1. 可以指定重定向地址
server{
        error_page 404 500 502 503 504 /50x.html;
    location /50x.html{
        root /mnt/html;
    }
}

静态资源优化

  • 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求,请求处理完成以后,操作系统还需要将处理得到的结果通过网络适配器传递回去。
sendfile on;
tcp_nopush on;

gip 压缩配置

http {
    gzip on; # 是否开启压缩
    gzip_vary on; # gip压缩时是否携带头信息
    gzip_proxied any; # 对服务端返回结时进行gip压缩
    gzip_comp_level 6; # 压缩级别
    gzip_disable "Mozilla/*"; # 选择情的开启或开闭gip压缩
    gzip_buffers 16 8k; # 缓存空间大小
    gzip_http_version 1.1; # 选择压缩最低版本
    gzip_min_length 20; # 传输数据的大小
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

静态资源缓存

  1. 缓存流程图

    静态资源缓存

  2. 配置代码
server{
    location ~.*\.(html|js|css|png)$ {
        expires 1000;
        add_header Cache-Control no-store;
        root /mnt/html;
    }
}

跨域问题

  1. 基本介绍
  • 同源策略是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到 XSS、CSFR 等攻击。所谓同源是指"协议+域名+端口"三者相同, 即便两个不同的域名指向同一个 ip 地址,也非同源。
  1. 配置代码
location /api/v1 {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE;
    default_type application/json;
    return 200 '{"id":1,"name":"tom"}';
}

防盗链实现

  1. 基本介绍
  • Referer 是 Header 的一部分,当浏览器向 Web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该请求是从哪个页面链接过来的,服务器就可以禁止或允许某些来源的网站访问资源。
  • 如果直接在浏览器直接打开文件链接https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/1.jpg,请求 Header 里不会带有 Referer。
  1. 配置代码
location ~.*\.(jpeg|jpg|png)$ {
    valid_referers no backed *.xiaozhi.shop;
    if ($invalid_referer) {
            return 403;
    }
    root /mnt/html;
}

rewrite 重写链接地址

  1. 基本介绍
  • 在实际工作中往往会遇到很多跳转(重写 URL)的需求。比如:更换域名后需要保持旧的域名能够跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求,使用 nginx 跳转效率会更高
  1. set 指令
location /write {
    set $name tom;
    set $age 18;
    default_type application/json;
    return 200 '{"name":$name,"age":$age}';
}
  1. if 指令
location /testif {
    default_type text/plain;
    set $username 'hello';
    if ($username) {
        return 200 $username;
    }
    return 200 'username is empty';
}
  1. break 指令
location /testbreak{
    default_type text/plain;
    set $username tom;
    if ($args) {
        set $username jeray;
        break;
        set $username rose;
    }
    add_header username $username;
    return 200 $username;
}
  1. return 指令
  • 该指令用于完成对请求的处理,直接向客户端返回,在 return 后的所有 nginx 配置都是无效的。
location /testreturn {
    default_type application/json;
    return  200 '{"name":"tom","age":20}';
}
  1. rewrite 指令
  • 该指令通过正则表过式的使用来改变 URI,可以同时存在一外或多个指令,按照顺序依次对 URL 进行匹配和处理
location /rewrite {
    rewrite ^/rewrite/url\w*$ https://www.baidu.com;
    rewrite ^/rewrite/(test)\w*$ /$1;
    rewrite ^/rewrite/(demo)\w*$ /$1;
}

location /test {
    default_type text/plain;
    return 200 'test success';
}

location /demo {
    default_type text/plain;
    return 200 'demo success';
}
  1. rewrite_log 指令
  • 该指令配置是否开启 URL 重写日志输出功能
rewrite_log on;
error_log /var/log/nginx/error.log notice;

反向代理

  1. 基本介绍
  • 反向代理是一种代理服务器的配置模式,它代表服务器向客户端提供服务。客户端发送请求到反向代理服务器,然后反向代理服务器将请求转发到后端的真实服务器上,并将响应返回给客户端。简单理解为用户直接访问反向代理服务器就可以获得目标服务器的资源。这一过程叫反向代理
  1. 反向代理图解

反向代理

  1. proxy_pass 指令
  • 该指令用来设置被代理服务器地址,可以是主机名称,ip 地址+port(端口形式)
location / {
    proxy_pass https://8.134.182.122;
}
  1. proxy_set_header 指令
  • 该指令可以更改 nginx 服务器接收到的客户端请求的请求头信息,然后将新的请求头信息发送给代理服务器
location / {
    proxy_set_header username tom;
    proxy_pass https://8.134.182.122;
}
  1. proxy_redirect 指令
  • 该指令是用来重置头信息的 location 和 refresh 的值
location / {
    proxy_redirect http://47.107.101.79/ http://8.134.182.122/;
}

负载均衡

  1. 基本介绍
  • 负载均衡是指将用户的请求分配到多个后端服务器上进行处理,以达到优化资源利用率、提高响应速度和增加系统的可靠性的目的。负载均衡器通常位于用户和服务器之间,接收用户的请求,并根据某种算法将请求分发给合适的后端服务器。
  1. 负载均衡图解

负载均衡

  1. 负载均衡配置
upstream backend {
    server 8.134.182.122;
    server 106.15.74.79;
}
server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
            proxy_pass http://backend;
    }
}
  1. 负载均衡 backup
  • 将该服务器标记为备份服务器,当主服务器不可用时,将用来传递请求。
upstream backend {
    server 8.134.182.122;
    server 106.15.74.79 backup;
}
server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
            proxy_pass http://backend;
    }
}
  1. 负载均衡 max_fails 和 fail_timeout
  • max_fails 设置允许请求代理服务器失败的次数默认为 1。
  • fail_timeout=time;设置经过 max_fails 失败后,服务器暂停的时间,默认是 10 秒。
upstream backend {
    server 8.134.182.122 max_fails=3 fail_timeout=15;
    server 106.15.74.79;
}

server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
        proxy_pass http://backend;
    }
}
  1. weight 加权[加权轮询]
  • weight=number:用来设置服务器权重,默认为 1,权重数据越大,被分配到请求的几越大,该权重值,主要是针对实际工作环境中的不同的后端服务器硬件配置进行调整的,所有此策略比较适合服务器硬件配置差别较大的情况。
upstream backend {
    server 8.134.182.122 weight=1;
    server 106.15.74.79 weight=10;
}

server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
        proxy_pass http://backend;
    }
}
  1. 负载均衡策略 ip_hash
  • 对于后端的多台动态应用服务器做负载均衡时,ip_hash 指令能够将某个客户端 ip 的请求通过哈希算法定位到周一台服务器上,这样当来自某一个 ip 的用户在后端 web 服务器 A 上登录后,在访问该站点的共他 URL,能保证其访问的还是后端 web 服务器 A。
upstream backend {
    ip_hash;
    server 8.134.182.122 weight=1;
    server 106.15.74.79 weight=10;
}

server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
        proxy_pass http://backend;
    }
}
  1. 负载均衡策略 least_conn
  • 最少连接,把请求转发给连接数较少的后端服务器,轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同,但是,有些请求占用的时间很长,会导致其所在的后端负载较高,
upstream backend {
    least_conn;
    server 8.134.182.122;
    server 106.15.74.79;
}

server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
        proxy_pass http://backend;
    }
}
  1. 负载均衡策略 url_hash
  • 按访问 url 的 hash 结果来分配请求,使每个 url 定向到周一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会达到不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费,而使用 url_hash,可以使得同一个 url 会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从缓存中读取。
upstream backend {
    hash &request_uri;
    server 8.134.182.122;
    server 106.15.74.79;
}

server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
        proxy_pass http://backend;
    }
}
  1. 负载均衡策略 fair
  • fair 采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小,加载时间长短智能进行负载均衡
upstream backend {
    fair;
    server 8.134.182.122;
    server 106.15.74.79;
}

server
{
    listen 80;
    server_name 47.107.101.79;

    location / {
        proxy_pass http://backend;

    }
}

nginx 缓存设置

  1. 基本介绍
  • web 缓存(或 HTTP 缓存)是用于临时存储(缓存)web 文档(如 HTML 页面和图像),以减少服务器延迟的一种信息技术。web 缓存系统会保存下通过这套系统的文档的副本;如果满足某些条件,则可以由缓存满足后续请求。 Web 缓存系统既可以指设备,也可以指计算机程序。
  1. proxy_cache_path
  • 该指令用于设置缓存文件存放的路径
http{
    proxy_cache_path /var/log/nginx/cache levels=2:1 keys_zone=xiaozhi:200m inactive=1d max_size=20g;
}
  1. proxy_cache
  • 该指令用来开启或关闭代理缓存,如果是开启则自定义使用那个缓存区来进行缓存
location / {
    proxy_cache xiaozhi;
    proxy_cache_key xiaozhi;
    proxy_cache_valid 200 5d;
    proxy_pass http://backend;
}

贵州晓智信息科技有限公司

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

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

相关文章

点击展开详细说明网站html引导页源码

点击展开详细说明网站html引导页源码,源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 https://download.csdn.net/download/huayula/89…

开箱即用,使用极空间搭建小清新的自托管个人仪表板『honey』

开箱即用&#xff0c;使用极空间搭建小清新的自托管个人仪表板『honey』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 说到可以在NAS部署的自托管仪表板呀&#xff0c;导航栏呀简直不要太多&#xff0c;光是我之前分享的譬如Sun-Panel &#xff0c;Dashy&#xff0c;HomePage&am…

【Linux】1.Linux环境搭建

文章目录 1.Linux环境安装2.云服务器选择2.1 3个云服务器平台2.2阿里云平台租借云服务器教程 3.Xshell安装4.Xshell配置连接云服务器5.如何多人共享一台Linux云服务器&#xff1f;6.如何更改他人访问云服务器的密码呢&#xff1f;7.如何阻止你共享的人访问云服务器呢&#xff1…

<数据集>RSOD数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;936张 标注数量(xml文件个数)&#xff1a;936 标注数量(txt文件个数)&#xff1a;936 标注类别数&#xff1a;4 标注类别名称&#xff1a;[aircraft, oiltank, overpass, playground] 序号类别名称图片数框数1air…

【轨物推荐】数字化时代的企业技术创新方法论

原创 郭朝晖 蝈蝈创新随笔 2024年08月03日 18:29 上海 数字化转型的一个重要特点&#xff0c;是用数字化技术手段解决企业的技术、运营和管理问题。于是我发现&#xff1a;数字化项目往往既有技术项目的特点、又有工程项目管理的特点&#xff0e;还有创新项目的特点。但换个角…

鲲鹏服务器安装Kafka

由于项目需求&#xff0c;需要在鲲鹏云主机上安装Kafka&#xff0c;并且要求安装的版本为2.3.X。下面主要从以下几个步骤说明如何安装&#xff1a; 1、下载kafka的安装文件 2、上传到服务器 3、修改配置 4、启动 5、使用工具测试 服务器信息 CPU信息 [rootecs02 ~]# lscpu A…

[数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8768 标注数量(xml文件个数)&#xff1a;8768 标注数量(txt文件个数)&#xff1a;8768 标注…

24款保时捷帕拉梅拉升级原厂360全景影像案例

24款保时捷帕拉梅拉升级原厂360全景影像后&#xff0c;车辆的前后左右都能被清晰地拍摄下来&#xff0c;并通过车载屏幕实时显示。这可以帮助驾驶员更好地了解车辆周围的环境&#xff0c;从而提高驾驶安全性和便利性。以下是一些可能的效果展示&#xff1a; • 全景视图&#…

wincc报警如何通过短信发送给手机

单位使用WINCC上位机监控现场&#xff0c;需要把报警信息发送到指定手机上&#xff0c;能否实现&#xff1f;通过巨控GRMOPC系列远程智能控制终端&#xff0c;简单配置即可实现wincc报警短信传送到手机。配置过程无需任何通讯程序&#xff0c;也不要写任何触发脚本。 GRMOPC模…

Vue的遍历(列表、对象、字符串、数字)、key的原理

目录 1 遍历(列表、对象、字符串、数字)2. key的原理2.1 key使用index2.1 key使用数据的唯一id2.3 key的原理 3. 列表过滤4. 列表排序 1 遍历(列表、对象、字符串、数字) key可以使用数据的唯一字段(最好)&#xff0c;也可以使用index(默认) 使用示例: <!DOCTYPE html>…

数据科学已死?

既然有了人工智能&#xff0c;训练自己的机器学习模型是否还值得&#xff1f; 既然有了人工智能&#xff0c;学习 Python 是否还值得&#xff1f; 既然有了人工智能&#xff0c;KNIME 还在营业吗&#xff1f; 既然有了人工智能&#xff0c;数据科学是否仍然需要&#xff1f;…

【深度学习与NLP】——Transformer架构解析

目录 第一章:Transformer背景介绍 1.1 Transformer的诞生 1.2 Transformer的优势 1.3 Transformer的市场 第二章:Transformer架构解析 2.1 认识Transformer架构 2.1.1 Transformer模型的作用 2.1.2 Transformer总体架构图 2.2 输入部分实现 2.2.1 文本嵌入层的作用 …

维护和升级LabVIEW程序

在维护和升级LabVIEW程序时&#xff0c;需要全面考虑代码的现状和未来的需求。以下是各个方面的详细注意事项&#xff0c;以确保程序能够在稳定性和性能方面得到提升。 1. 理解现有代码: 深入代码分析: 仔细阅读现有的代码&#xff0c;了解其逻辑结构、数据流、和控制流程。关注…

众善慈善机构:帮助贫困地区的人们提高自身的就业能力和创业能力

众善慈善机构是一家致力于帮扶和脱贫的慈善机构&#xff0c;主要致力于帮助贫困地区的人们改善生活条件&#xff0c;提高生活质量。 众善慈善机构的主要帮扶对象是贫困地区的儿童、老人和残疾人。他们通过开展各种救助项目&#xff0c;为这些人群提供生活物资、教育、医疗等方面…

【附源码】Python :PYQT界面点击按钮随机变色

系列文章目录 Python 界面学习&#xff1a;PYQT界面点击按钮随机变色 文章目录 系列文章目录一、项目需求二、源代码三、代码分析3.1 导入模块&#xff1a;3.2 定义App类&#xff1a;3.3 构造函数&#xff1a;3.4 初始化用户界面&#xff1a;3.5 设置窗口属性&#xff1a;3.6 …

GDB的基本使用

我有话说 因为时间和精力原因&#xff0c;本文写的虎头蛇尾了&#xff0c;除了启动调试与程序执行以外只有少量截图演示&#xff0c;只是简单的说明。如果有需要可以联系我&#xff0c;我有时间的话会把演示补上&#xff0c;谢谢理解。 启动调试与程序执行 启动调试并传递参数…

哈啰出行Java开发工程师一面面经(校招)

牛客网最新面经分享面试过程&#xff1a; 小编为参加校招、秋招、金九银十面试季的小伙伴们准备了一份很全很详细的java面试宝典&#xff08;包含各个大厂真题以及最常见的八股文含答案&#xff09;&#xff0c;由于平台篇幅原因&#xff0c;就不在这里一一展示了&#xff0c;…

企业高性能web服务器之nginx篇

文章目录 Nginx核心配置location 使用详情location之精确匹配location之区分大小写location之不区分大小写location之文件名后缀 Nginx账户认证功能自定义错误页面自定义错误日志检测文件是否存在长连接下载服务器 Nginx高级配置Nginx的状态页Nginx 压缩功能Nginx 变量使用Ngin…

5G+智慧农业大数据解决方案

1. 5G智慧农业大数据概述 5G智慧农业大数据方案融合5G网络、大数据等技术&#xff0c;推动农业向智能化、信息化发展。方案包含农产品质量追溯、农业物联网、电子商务、休闲农业等多个平台&#xff0c;全面支撑乡村振兴战略。 2. 乡村振兴战略的政策背景 2022年中央一号文件…

什么是黄金期权?黄金期权合约详解

想要了解什么是黄金期权首先要了解一下黄金期货。黄金期货是以现货黄金为标的物的期货品种&#xff0c;其交易代码通常为Au。而黄金期权&#xff0c;又称为黄金期货期权&#xff0c;是一种期权合约&#xff0c;其标的物是黄金期货合约本身&#xff0c;而非黄金现货。这意味着期…