Nginx

文章目录

  • 一、目录结构
  • 二、多进程模型和请求基本流程
  • 三、基础配置
    • 3.1 最小配置文件
    • 3.2 servername的多种匹配方式
      • 3.2.1完整匹配
      • 3.2.2通配符匹配
      • 3.2.3通配符结束匹配
      • 3.2.4正则匹配
  • 四、反向代理
    • 4.1 反向代理到外网与内网主机的配置
    • 4.2 负载均衡配置
  • 五、动静分离
  • 六、URLRewrite 伪静态配置
  • 七、防盗链
  • 八、高可用

一、目录结构

在这里插入图片描述
conf:核心配置文件
nginx.conf:会引用其他配置文件;
sbin:nginx运行程序;
html:默认网页和静态资源;

二、多进程模型和请求基本流程

在这里插入图片描述
master主进程不处理业务,会协调Worker进程,Worker获取nginx.conf配置文件,并解析用户的请求找资源。

三、基础配置

3.1 最小配置文件

在这里插入图片描述

#全局块
#user  nobody;
# 工作的进程个数,对应物理服务器的内核数
worker_processes  1;

#event块
# 配置事件驱动模块
events {
# 每个worker允许连接的客户端最大连接数
    worker_connections  1024;
}

#http块
http {
    #http全局块
    # 引入其他配置文件
    include       mime.types;
    # 请求资源默认类型,如果不包含在mime.types,就以application/octet-stream这种格式的流传输给客户端
    default_type  application/octet-stream;
    # 数据 0 拷贝
    sendfile        on;
    # 保持连接超时时间
    keepalive_timeout  65;
    
    #server块 虚拟主机
    server {
        #server全局块
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        #location块
        # 域名后面跟的子目录或路径,指的是uri,完全匹配或者按规则匹配。
        location / {
        	# html(/user/local/nginx/html):相对路径
            root   html;
            # 默认页
            index  index.html index.htm;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }
    #这边可以有多个server块
    server {
      ...
    }
}

3.2 servername的多种匹配方式

匹配上就不会往下找了

3.2.1完整匹配

【可以配置多个,空格隔开】
server_name www.test.com www.test1.com www.test.2com;

3.2.2通配符匹配

server_name *.test.com;

访问 xxx.test.com都会匹配上。

3.2.3通配符结束匹配

server_name www.test.*;

访问www.test.net || www.test.org都会匹配上。

3.2.4正则匹配

server_name ~^ [0-9]+.test.com$;

0-9数字开头的,666.test.com会匹配上。

四、反向代理

在这里插入图片描述

4.1 反向代理到外网与内网主机的配置

#全局块
#user  nobody;
# 工作的进程个数,对应物理服务器的内核数
worker_processes  1;

#event块
# 配置事件驱动模块
events {
# 每个worker允许连接的客户端最大连接数
    worker_connections  1024;
}

#http块
http {
    #http全局块
    # 引入其他配置文件
    include       mime.types;
    # 请求资源默认类型,如果不包含在mime.types,就以application/octet-stream这种格式的流传输给客户端
    default_type  application/octet-stream;
    # 数据 0 拷贝
    sendfile        on;
    # 保持连接超时时间
    keepalive_timeout  65;
    
    #server块 虚拟主机
    server {
        #server全局块
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        #location块
        # 域名后面跟的子目录或路径,指的是uri,完全匹配或者按规则匹配。
        location / {
        	# 可以设置为网址,也可以配置为一组服务器
        	proxy_pass http://www.test.com;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }
    #这边可以有多个server块
    server {
      ...
    }
}

proxy_pass 与 root 二先一。

4.2 负载均衡配置

轮询策略

# weight配置负载均衡 权重的配置
# down 不参数负载均衡
# backup 备用服务器,没有机器可用了,备用机上
upstream httpds{
	server 192.168.44.102:80 weight = 8 down;
	server 192.168.44.103:80 weight = 2;
	server 192.168.44.104:80 weight = 1 backup;
}
#server块 虚拟主机
    server {
        #server全局块
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        #location块
        # 域名后面跟的子目录或路径,指的是uri,完全匹配或者按规则匹配。
        location / {
        	# 可以设置为网址,也可以配置为一组服务器【httpds:别名】
        	proxy_pass http://httpds;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }

五、动静分离

把静态资源放到nginx上,不放在tomcat中,让静态资源的请求不打到服务器。

#server块 虚拟主机
    server {
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        location / {
        	proxy_pass http://192.168.44.104:8080;
        }
        #正则匹配css、img、js请求路径
        location ~*/(css|img|js) {
        	root html;
        	index index.html;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }

在这里插入图片描述

六、URLRewrite 伪静态配置

隐藏后端真实地址,比如真实地址:http://192.168.44.101/index.jsp?pageNum=2,可以请求访问:http://192.168.44.101/2.html。

#server块 虚拟主机
    server {
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        location / {
        	#匹配正则第一个括号$1
        	rewrite ^([0-9]+).html$         /index.jsp?pageNum=$1  break;
        	proxy_pass http://192.168.44.104:8080;
        }
        #正则匹配css、img、js请求路径
        location ~*/(css|img|js) {
        	root html;
        	index index.html;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }

在这里插入图片描述

七、防盗链

upstream httpds{
	server 192.168.44.102:80 weight = 8 down;
	server 192.168.44.103:80 weight = 2;
	server 192.168.44.104:80 weight = 1 backup;
}
#server块 虚拟主机
    server {
        # 监听服务器的端口号
        listen       80;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        location / {
        	#匹配正则第一个括号$1
        	rewrite ^([0-9]+).html$         /index.jsp?pageNum=$1  break;
        	proxy_pass http://httpds;
        }
        #正则匹配css、img、js请求路径
        location ~*/(css|img|js) {
        	valid_referers none 192.168.44.101;
        	#检测无效跳转403状态码,只允许192.168.44.101
        	if ($invalid_referer){
        		#返回状态码
        		#return 401;
        		#break 隐藏地址
        		rewrite^/ /img/x.png break;
        	}
        	root html;
        	index index.html;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
        
        error_page   401  /401.html;
        location = /401.html {
            root  html;
        }
    }

valid_referers:配置说明
在这里插入图片描述

八、高可用

Keepalived本质就是为ipvs服务的。Keepalived的主要目的就是它自身启动为一个服务,它工作在多个LVS主机节点上,当前活动的节点叫做Master备用节点叫做Backup,Master会不停的向Backup节点通告自己的心跳,这种通告是基于VRRP协议的。Backup节点一旦接收不到Master的通告信息,它就会把LVS的VIP拿过来,并且把ipvs的规则也拿过来,在自己身上生效,从而替代Master节点。
在这里插入图片描述

#第一台keepalived服务器
global_defs {  
    router_id server111
}
#vrrp keepalived内网通讯协议
vrrp_instance VI_1 {      #虚拟路由器名称,在一个keepalived可以启多个虚拟路由器,每个虚拟路由器的名字都不一样
    state MASTER          #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP,一般都是配置backup,该值无法决定身份,最终还是通过比较priority
    interface eth0        #绑定为当前虚拟路由器使用的网卡名
    virtual_router_id 51  #每个虚拟路由器惟一标识,范围:0-255,同一组虚拟路由器的vrid必须一致
    priority 100          #当前物理节点在此虚拟路由器的优先级,范围:1-254,每个keepalived主机节点此值不同
    advert_int 1          #vrrp通告的时间间隔,默认1s
 
    authentication {      #认证机制 同一组保持一致
        auth_type PASS    #AH(不推荐)或PASS
        auth_pass 1111    #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
    }
 
    virtual_ipaddress {                      #虚拟IP
        10.0.0.100                           #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认为/32
        10.0.0.101/24 dev eth1               #指定VIP的网卡
        10.0.0.102/24 dev eth2 label eth2:1  #指定VIP的网卡label
        192.168.44.200
    }
}

vrrp_instance router2 {
    state BACKUP
    interface eth0
    virtual_router_id 60
    priority 80
    advert_int 1
 
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
 
    virtual_ipaddress {
        10.0.0.102/24 dev eth0 label eth0:2
        10.0.0.103/24 dev eth0 label eth0:3
    }
}
#第二台keepalived服务器
global_defs {  
    router_id server110
}
#vrrp keepalived内网通讯协议
vrrp_instance VI_1 {      #虚拟路由器名称,在一个keepalived可以启多个虚拟路由器,每个虚拟路由器的名字都不一样
    state BACKUP          #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP,一般都是配置backup,该值无法决定身份,最终还是通过比较priority
    interface eth0        #绑定为当前虚拟路由器使用的网卡名
    virtual_router_id 51  #每个虚拟路由器惟一标识,范围:0-255,同一组虚拟路由器的vrid必须一致
    priority 50          #当前物理节点在此虚拟路由器的优先级,范围:1-254,每个keepalived主机节点此值不同
    advert_int 1          #vrrp通告的时间间隔,默认1s
 
    authentication {      #认证机制 同一组保持一致
        auth_type PASS    #AH(不推荐)或PASS
        auth_pass 1111    #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
    }
 
    virtual_ipaddress {                      #虚拟IP
        10.0.0.100                           #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认为/32
        10.0.0.101/24 dev eth1               #指定VIP的网卡
        10.0.0.102/24 dev eth2 label eth2:1  #指定VIP的网卡label
        192.168.44.200
    }
}

vrrp_instance router2 {
    state BACKUP
    interface eth0
    virtual_router_id 60
    priority 80
    advert_int 1
 
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
 
    virtual_ipaddress {
        10.0.0.102/24 dev eth0 label eth0:2
        10.0.0.103/24 dev eth0 label eth0:3
    }
}

连接测试ip漂移
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C-关键字(下)

文章目录循环控制switch-case-break-defaultdo-while-forgetchar()break-continuegotovoidvoid*returnconstconst修饰变量const修饰数组const修饰指针指针补充const 修饰返回值volatilestruct柔型数组union联合体联合体空间开辟问题利用联合体的性质,判断机器是大端还是小端enu…

运行时内存数据区之虚拟机栈——动态链接、方法返回地址与一些附加信息

动态链接(Dynamic Linking)——指向运行时常量池的方法引用 每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如:invokedynamic指令。…

( “树” 之 DFS) 101. 对称二叉树 ——【Leetcode每日一题】

101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 提示&#xff1a…

聚焦元宇宙赋能产业,打造数字世界,“OFweek2023广州元宇宙产业发展高峰论坛”圆满落幕!

2023年4月12日下午,由广东潮域科技有限公司、OFweek维科网共同主办,OFweek人工智能网承办的“OFweek 2023 广州元宇宙产业发展高峰论坛”在广州保利世贸博览馆1号馆盛大举办。 元宇宙产业相关技术及设备,包括VR/AR、虚拟现实、物联…

springboot配置跨域问题

近期自己搭建项目时,遇到一个跨域问题。我们以前项目解决跨域是在controller上加一个跨域注解CrossOrigin(allowCredentials "true"),很方便。但是在我自己搭建的项目中,启动时竟然报错了,错误如下: When …

不会写代码也能做自动化?推荐一款自动化测试神器

在软件测试这条道路上,大部分的职业技能发展道路都会是纯业务手工测试→自动化测试→性能测试→安全测试/测试开发。 但是却有着一部分人起初进入软件测试这一行看重的就是软件测试属于IT行业,门槛比较低,不需要代码基础。 这就导致了这一部…

第07章_面向对象编程(进阶)

第07章_面向对象编程(进阶) 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 关键字:this 1.1 this是什么? 在Java中,this关键字不算难理解…

<数据结构> 链表 - 单链表(c语言实现)

B.最简单结构的链表——不带哨兵位单链表的实现(关于哨兵位结点) 一、不带哨兵位单链表结点的创建1.1 typedef 链表的数据类型 1.2 结点的结构体创建 二、单链表要实现的功能 三、需要包含的头文件四、函数接口一览为什么有些函数参数传递的是二级指针&a…

【大数据之Hadoop】十一、MapReduce之Shuffle、MapTask、ReduceTask工作机制

1 Shuffle机制 对于排序而言分为两个阶段,MapTask后和ReduceTask前。 2 MapTask工作机制 MapTask并行度由切片个数决定;切片个数由切片大小(切片大小取决于块大小、maxsize(Long的最大值)和minsize(默认为…

设计模式之模板模式(C++)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、模板模式是什么? 模板模式是一种行为型的软件设计模式,在父类中定义了一个模板算法,只实现…

Android---MVC/MVP/MVVM的演进

目录 一个文件打天下 一个文件--->MVC MVC--->MVP MVP--->MVVM 6大设计原则 完整demo 我们通过"#字棋"游戏来展现MVC-->MVP-->MVVM 之间的演进 一个文件打天下 数据、视图以及逻辑都放在一个 class 里面。而一个 class 里最多 500 行代码&…

GPT-4 和ChatGPT API的定价分析

OpenAI发布了他们的ChatGPT新机器学习模型GPT-4。GPT-4是GPT-3的一大进步,GPT-3是当前ChatGPT免费版本(GPT 3.5 Turbo)所运行的模型的基础,今天我们也来凑个热点,研究一下它们的定价 GPT-4新的功能 GPT-4可以在对话中使用图像,并…

Mybatis(七)Mybatis的日志体系

在介绍Mybatis日志实现前,我们先了解下java的日志体系以及日志框架的发展,目前比较常用的日志框架有下面几个: 而JCL和SLF4J属于日志接口(没有日志具体实现),提供统一的日志操作规范,而日志的实…

NumPy 秘籍中文第二版:四、将 NumPy 与世界的其他地方连接

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍以下秘籍: 使用缓冲区协议使用数组接口与 MATLAB 和 Octave 交换数据安装 RPy2与 R 交互安装 JPype将 NumPy 数组发送到 J…

什么是Lambda表达式?

什么是Lambda表达式 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 匿名:它不像普通的方法那样有一个明确的名称&#xff1…

GPT 任务指令 = 定义角色 + 背景信息 + 任务目标 + 输出要求

GPT 任务指令 定义角色 背景信息 任务目标 输出要求 环境 GPT-4 0. 你是一名专业的导游,负责为我生成旅游计划,现在我来北京旅游,需要你为我生成一份 3天2晚的北京旅游规划。我的要求是:1.地点包括故宫、军播和环球影城。 2…

pytorch搭建ResNet50实现鸟类识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍦 参考文章地址: 365天深度学习训练营-第J1周:ResNet-50算法实战与解析 🍖 作者:K同学啊 理论知识储备 深度残差网络ResNet(dee…

OceanBase 4.1 发版 | 一个面向开发者的里程碑版本

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 2022 年 8 月,OceanBase发布了 4.0 版本(小鱼),作为业内首个单机分布式一体化架构,兼顾了分布式架构的扩展性和集中式架构的性能优势&…

优思学院|职场达人有什么晋升秘诀?

作为职场人士,升职晋升是我们一直追求的目标。然而,在职场中,竞争是激烈的,只有那些真正做到了突出表现和积极进取的人才能获得晋升机会。这里将分享七个职场达人的晋升秘诀,希望对那些正在寻找升职机会的人有所帮助。…

Linux Shell 实现一键部署Nginx

nginx前言 nginx [engine x] 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器,最初由Igor Sysoev编写。很长一段时间以来,它一直在许多负载重的俄罗斯网站上运行,包括 Yandex、 Mail.Ru、 VK和 Rambler。根据 Netcraft …