首页
归档
朋友
关于我
留言
Search
1
虚拟机无法ping不通百度,并无法访问浏览器
4,847 阅读
2
mysql使用or条件使索引失效
4,061 阅读
3
mysql如何在一对多查询时选取时间最近的一条记录
3,475 阅读
4
根据MySQL获取当天,昨天,本周,本月,上周,上月,本月的起始时间
2,927 阅读
5
熟悉mysql的共享锁、排它锁、悲观锁、乐观锁以及使用场景
1,766 阅读
PHP
面向对象
设计模式
知识汇总
常用函数
PHP框架知识
数据库
MySQL
服务器
Docker
虚拟机
Nginx
缓存相关
Redis
前端
中间件
RabbitMQ
网络编程
HTTP相关
Swoole
Workerman
工具软件
Git
Typecho
杂乱无章
面试指南
PHP相关
MySQL面试汇总
中间件相关
开发技巧 | 优化
登录
Search
标签搜索
php
mysql
代码片段
linux
Thinkphp
Redis
nginx
mysql优化
docker
面试指南
面向对象
git
Laravel框架
http协议
RabbitMQ
Redis性能优化
设计模式
linux命令
编译安装
PhpSpreadsheet
黎明强
累计撰写
70
篇文章
累计收到
59
条评论
首页
栏目
PHP
面向对象
设计模式
知识汇总
常用函数
PHP框架知识
数据库
MySQL
服务器
Docker
虚拟机
Nginx
缓存相关
Redis
前端
中间件
RabbitMQ
网络编程
HTTP相关
Swoole
Workerman
工具软件
Git
Typecho
杂乱无章
面试指南
PHP相关
MySQL面试汇总
中间件相关
开发技巧 | 优化
页面
归档
朋友
关于我
留言
搜索到
14
篇与
服务器
的结果
2022-04-27
Docker搭建Replication分布式集群
什么是Replication集群Replication集群是MySQL自带的数据同步机制原理:MySQL通过读取、执行另外一个MySQL的bin_log日志,实现数据同步。流程:首先要开启MySQL的二进制文件 (bin_log)我们所使用MySQL的命令操作都会被记录到bin_log日志里。另外一个MySQL通过读取bin_log文件,就知道第一个MySQL节点执行了哪些操作。第二个MySQL操作还会在本地也执行一边,因为执行的操作都是相同的,所以2个MySQL的内容完全相同。这就是replication的数据同步原理。总结:Rep集群异步传输的,数据只要在一个节点写入,就算成功了,至于能不能同步到其他节点Replication不做任何保证。Rep集群数据同步是单向的,只能从主节点数据同步到从节点,不能从从节点同步到主节点。如果业务系统是读多写少非常大。我们可以给一个Master设置多个Slave。所有的读操作发送给Slave从节点执行。写操作 发送给Master主节点执行,就可实现数据读写分离的功能注意: 读写分离功能需要配置MyCat才能实现的实例演示这里先实例演示Replication集群的MyCat路由转发因为本地环境,首先先准备2台服务器,分了4个端口,做为4个虚拟主机,我这边使用Vragnt生成了2台Linux服务器。192.168.205.10 (作为主节点)192.168.205.11 (从节点)一、搭建服务器环境Vgrant搭配2台服务相关配置,不熟悉的同学可以查看下Vgrant官网文档,或者用其他虚拟机搭建都可。创建Vagrantfile 文件# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.require_version ">= 1.6.0" boxes = [ { :name => "swarm-manager", :eth1 => "192.168.205.10", :mem => "1024", :cpu => "1" }, { :name => "swarm-worker1", :eth1 => "192.168.205.11", :mem => "1024", :cpu => "1" } ] Vagrant.configure(2) do |config| config.vm.box = "centos/7" boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.hostname = opts[:name] config.vm.provider "vmware_fusion" do |v| v.vmx["memsize"] = opts[:mem] v.vmx["numvcpus"] = opts[:cpu] end config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", opts[:mem]] v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] end config.vm.network :private_network, ip: opts[:eth1] end end #config.vm.synced_folder "./labs", "/home/vagrant/labs" # config.vm.provision "shell", privileged: true, path: "./setup.sh" end :::然后在当前Vgrantfilefile同目录下,运行启动vagrant up启动完成,输入ssh xxx进入虚拟主机里vagrant ssh swarm-manager进入主机后,配置下SSH,在外部的ssh终端也可远程连接。(进入虚拟主机是Vgrant角色,我们需要用root角色)切换到root账号 (root默认密码是vagrant) ,进入ssh目录,配置sshd_config ,修改root也可远程登录PermitRootLogin yes #root可登录 PubkeyAuthentication yes PasswordAuthentication yes以上这几个注释解开,并且重启sshd服务systemctl restart sshd这样就可以用xhsell 或iTimer2 、Termius等工具去远程连接了。配置Docker环境下载并安装dockeryum install -y docker因为仓库在国外,有些镜像下载比较慢,我们还需要配置镜像加速curl -sSL https://get.daocloud.io/daotools/set-mirror.sh | sh -s http://f1361db2.m.daocloud.io编辑/ect/docker/daemon.json文件,把结尾的逗号去掉(不然启动会报错)集群MySQL需要分布式部署环境,Docker Swarm技术可以自动把异地的Dcoker虚拟机组成一个局域网我们只需要在主节点里,输入docker swarm init --advertise-addr=192.168.205.10如果我们之前有连接相关的集群,需要强制解散swarm集群(包括从节点也要输入 ),输入:docker swarm leave -f 创建个共享网络,作为MySQL的集群网络docker network create -d overlay --attachable swarm_mysql下载Replication镜像 (Oracle没有提供官网镜像,用第三方封装的镜像)docker pull mishamx/mysql docker tag mishamx/mysql rep docker rmi mishamx/mysql搭建Replication集群环境开放防火墙端口,并且重启docker服务firewall-cmd --zone=public --add-port=9003/tcp --permanent firewall-cmd --zone=public --add-port=9004/tcp --permanent firewall-cmd --reload创建主节点容器docker run -d -p 9003:3306 --name rn1 -e MYSQL_MASTER_PORT=3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_REPLICATION_USER=backup -e MYSQL_REPLICATION_PASSWORD=backup123456 -v rnv1:/var/lib/mysql --privileged --net=swarm_mysql rep 创建主节点容器,去客户端尝试连接是否成功?创建从节点容器docker run -d -p 9003:3306 --name rn2 -e MYSQL_MASTER_HOST=rn1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_REPLICATION_USER=backup -e MYSQL_REPLICATION_PASSWORD=backup123456 -v rn2:/var/lib/mysql --privileged --net=swarm_mysql rep 注意事项: 从节点需要与主节点同步,没有主节点不能创建从节点也去客户端数据库工具尝试是否连接成功。验证主从节点是否同步先去主节点rn1下,创建一个逻辑库,并且创建一个user表,写入数据, 从节点是否有同步过来?数据果真同步过来了。从节点写入数据,主节点会不会同步数据 ? 答案不会,因为rep集群是单向同步的,数据同步必须是由主节点同步给从节点搭建MyCat环境(读写分离)去官网进行下载最新版或者稳定版的Mycat http://dl.mycat.org.cn/2.0/ ,得到一个mycat.tar.gz包安装JavaJDK镜像,因为安装MyCat需要运行在java环境docker pull adoptopenjdk/openjdk8 docker tag adoptopenjdk/openjdk8 openjdk8 docker rm adoptopenjdk/openjdk8创建java容器docker run -d -it --name mycat1 -v mycat1:/root/server --privileged --net=host openjdk8把Mycat包,解压到java目录下/root/server/开放mycat需要用到的端口firewall-cmd --zone=public --add-port=9066/tcp --permanent #数据处理 (传入sql) firewall-cmd --zone=public --add-port=8066/tcp --permanent #获取mycay运行信息 firewall-cmd --reloadMyCat的主要配置目录查看Mycat目录下的文件,MyCat主要的配置文件,一共有3个重要的文件,分别: server.xml 、schema.xml 、rule.xmlserver.xml : 配置MyCat端口、全局主键生成方式,虚拟逻辑库和账户Schema.xml : 配置数据库连接,以及数据表用什么切分规则 (最重要)rule.xml : 用户定制规则切分MyCat配置 Replication集群,需要把写操作发送给主节点执行,读操作发送给从节点执行。配置server.xml可以配置端口号、账户信息、全局主键方式等等<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">test</property> </user>需要多个逻辑库就可以设置为<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">test,shop,db1,db2</property> </user>MyCat不会保存到真实的库里,只会记录MyCat自己的配置文件。只需要配置<user>段,把多余的user删除,要不然启动报错user name : 启动的角色property password : 启动登录的密码property schemas : 需要用到的库 (根据你实际业务看,我这用test库)配置schema.xml在这个文件里,要对每个MySQL节点的连接信息做设置,MyCat管理那么多个节点,首先要对这个节点做好工作上的划分。把读写任务分别发送给不同的节点执行,可以降低单一节点的负载PXC集群不需要设置读写分离,做好负载均衡即可Replication集群主从节点功能明确,需要做读写分离配置虚拟机逻辑库和关系表<schema>标签可以设置虚拟逻辑库,<table>标签可以设置虚拟关系表<schema name="test"> <table name="admin1" dataNode="dn1,dn2" type="global"></table> <table name="user" dataNode="dn1,dn2" type="mod-long"></table> </schema>user表配置了rule主键求模的切分数据。配置dataHost标签这个标签可以配置数据库集群的。 <dataHost name="rep1" maxCon="1000" minCon="10" balance="3" balanceType="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="r1w1" url="192.168.168.205.10:9003" user="root" password="123456"> <readHost host="r1r1" url="192.168.205.11:9003" password="123456" user="root" /> </writeHost> </dataHost>name : 取别名maxCon 跟 minCon : 代表最大连接数和最小连接数balance : 设置3,代表写节点和读节点功能分开,写节点负责写入请求,读节点负责读取请求。writeType : 读写请求是否发送可用的写节点 (1-是),MyCat自带心跳检测功能会想mysql定期发送sql语句,如果某一个节点没有响应了,那么会认为这个节点宕机了,就不会向宕机节点发送请求。dbType : 代表什么数据库的集群dbDriver : 使用mysql自带的native驱动SwitchType : 会根据自身带有的心跳检测结果去判断哪一个mysql节点宕机了?slaveThreshold : 跟rep集群有关,主从复制同步的,设置100代表100秒,如果从库超过主库的100秒就剔除从节点,不会从这个从节点读取数据。Heartbeat : 监察心跳,连接是否正常的SQL,有返回响应就代表没宕机。writeHost : 配置mysql写节点的 (有多少个节点就配置多个标签),图上有2个节点。<readHost> : writeHost嵌套一个3个<readHost> ,代表3个读节点host: 读节点名称url : 读节点mysql 地址user : 读节点用户Password:读节点密码host : 是节点的别名url : 节点请求mysql url地址user : 登录用户名Password : 用户密码注意事项: 读节点一定要放入写节点里,如果有多个读节点,那么第一个读节点不能是闭合< />状态。3、配置多个集群分片配置多个集群分片就复制多个<dataHost> ,相当于多个集群。4、配置虚拟库和关系表因为Mycat并不存储数据,只是SQL语句的路由器,并不默认接管MySQL所有的数据表,所有必须要配置可以使用的虚拟逻辑库和关系表。<dataNode name="dn1" dataHost="rep1" database="test"> <dataNode name="dn2" dataHost="rep2" database="test" />意思就是要使用rep1节点的test数据库,并且起名为dn1。意思就是要使用rep2节点的test数据库,并且起名为dn2。我这用到2个分片,一个作为同步,一个作为切分转发配置rule.xmlMyCat默认的mod-long是按照3个分片切分数据,所以我们要求该这个默认值。设置成2个。<function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!-- how many data nodes --> <property name="count">2</property> </function>全局预览图由于我是用2台服务,用端口作为4个不同的虚拟主机节点。注意查看,我这有2个 dataHost 表示部署2个集群(2个分片),rep1=作为同步的, rep2=作为数据切分的rep1集群:<writeHost>写节点是192.168.205.10:9003 是之前容器生成的主节点。从节点是访问192.168.205.11:9003rep2集群192.168.205.10:9004是主启动MycatMyCat日志文件主要有console.log和mycat.log ,存放在logs目录 (不存在就手动创建)。为MyCat/bin 目录中所有的sh命令设置最高权限。chmod -R 777 ./*.sh启动./startup_nowrap.sh查看是否启动成功ps -a 因为mycat是基于是java, 如果包含java就表示启动成功
2022年04月27日
183 阅读
0 评论
0 点赞
2022-04-21
快速熟悉Docker的一些基本操作流程
前文可能刚接触Docker的同学,上手Docker看到很多命令、或者操作一脸懵,需要了解docker安装、镜像容器啊,docker上的网络,容器之间的端口映射以及network网络空间、数据持久化等等...太多知识点了!!接下来我就整理快速熟悉下Docker的一些基本操作流程 ~~ (不包含配置dockerCompose、Swarm等编排操作)方便快速上手。流程比如写好一个Dockerfile文件 ,可以通过命令build出一个镜像。不要自己写的,可以下载远程仓库的镜像可以用search命令去远程仓库pull下来。也可以把自己创建的镜像push到自己的仓库。(原理跟git一样)查看本地多少个镜像可以用images ,删除镜像就rmi (前提必须把运行相关镜像的容器停止删除)想要把宿机的目录映射到容器里,就在执行run加上参数-v [本地目录]:[容器目录]有些服务需要跟本地端口互通,也在执行run 加上参数-p 3306:3306把镜像导出到本地的压缩文件,使用执行save命令把本地镜像文件导入本地Docker虚拟机,使用load命令想要创建容器,那么就可以执行run 命令,run命令创建的容器是运行的状态的。想要访问正在运行的容器。使用exec/attach 进入容器内部。想要暂停容器,使用pause命令 ,恢复容器使用unpause命令想要停止容器,可以执行stop命令,重新启动容器使用start命令。查看Docker里有多少容器,使用ps命令。想要删除容器,执行rm命令。如果想要把容器转换成镜像,我们使用commit命令
2022年04月21日
320 阅读
1 评论
0 点赞
2021-11-26
Docker常用命令整理
基本命令docker version #查看版本 docker login #登录dockerID docker build -t [DockerId/自定义名称] [文件目录] #打包构建dockerfile文件,制成镜像 (docker build -t limingqiang/hello-world . ) docker commit [原容器名] [新镜像名] #容器制回镜像 (不推荐) docker --help #帮助镜像操作(Image)docker image ls 或 docker images #查看本地所有的镜像(简写) docker image pull [Image] 或 docker pull #拉取某个仓库的镜像 docker image push [Image] 或 docker push #将本地的镜像上传到镜像仓[要登录才能推送] docker image rm [镜像名] 或 docker rmi [镜像名] #删除本地镜像 docker image build 或 docker build #通过Dcokerfile文件构造新的镜像容器操作(Container)docker run [镜像名|镜像ID] #镜像-创建一个新容器并执行 docker run -it [镜像名|镜像ID] #交互式运行镜像的容器 docker run -d [镜像名] #容器运行在后台服务 docker run -d --name [别名] [镜像名] #给指定运行的容器起别名并挂载后台 docker run -d --name [别名]] --link [另容器别名] [镜像名] #容器A跟容器B之间的可以通过容器名进行访问互通 docker run -d --name [别名] --network [bridge网络] [镜像名] #当前容器加入到另一个namespace网络中 docker run -e [环境变量] [镜像名] # 容器启动前加入环境变量( docker run -e USERNAME=lmq centos ) docker exec [镜像名] #在运行的容器中执行命令 docker exec -it [镜像名] /bin/bash #以bash命令并交互式进入运行中的容器里 docker exec [镜容ID|别名] ip a #查看容器里的网络信息 docker container ls 或 docker ps #查看运行中的容器 docker container ls -a 或 docker ps -a #查看运行/停止的容器 docker container rm [容器ID] 或 docker rm [容器ID] #删除容器(可多个 空格隔开) docker container commit [镜像名] 或 docker commit #修改后的容器commit成新的镜像 docker container inspect [容器ID|容器名] #查看容器的详细信息 docker start [容器ID | 别名] #启动容器 docker stop [容器ID|别名] #停止已运行的容器 docker inspect [容器ID] #打印容器的详情信息 docker logs [容器ID] #查看容器的一些日志 docker ps -aq #获取所有容器的ID docker rm $(docker ps -aq) #删除所有容器 docker rm $(docker ps -a -f "status=exited" -q) #删除所有已停止的容器网络操作(network)docker network ls #查看网络空间 docker network inspect [NetWorkID] #查看容器的详情网络信息 docker network connect [NetWorkID] [容器名] #容器切换其他网络上数据卷操作(Volume)docker volume ls #查看容器挂载的volume数据 docker volume inspect [volume Name] #查看某个Volume的详细信息 docker volume rm [volume Name] #删除某个/多个Data VolumeDocker-Compose操作 docker-compose --version #查看compose版本 docker-compose up #启动compose(默认启动docker-compose.yaml文件) docker-compose up -d #启动compose并且后台运行 docker-compose up -f docker-compose2.yamlup #启动compose(别的文件配置) docker-compose ps #查看状态 docker-compose imags #查看compose中所有的镜像 docker-compose start #启动compose服务 docker-compose stop #停止compose服务 docker-compose rm #删除停止的容器 docker-compose down #停止并删除compose的容器、镜像、网络、数据卷 docker-compose exec [service_name] #进入compose服务中的其中一个容器,server_name指的是容yml配置的器名集群操作(Docker-Swarm)docker swarm --help #帮助 docker swarm init --advertise-addr=[本机IP] #创建manager主节点。其他机器通过d这个节点连接 docker swarm join --token [worker|manager机器] #加入某台机器的节点 docker node ls #Manager下查看哪些节点已连接 docker service --help #帮助 docker service create --name demo centos7 #创建sevice容器 (跟docker run类似) docker service ls #查看service容器列表 docker service ps [service_name | 别名] #查看service容器下所有的容器 docker service scale [servie_name]=[number] #水平扩展机器多少个 (docker service scale web=3) docker service rm [servie_name] #删除service上所有容器 多容器多机集群管理操作(Docker Stack)类似docker-compose管理组的概念,不过docker-compose是管理本地多容器的,而docker stack 是管理swarm集群涉及多台机器多容器的。可以理解为docker run --->docker-compose 进行统一管理,而docker service -->docker stack进行统一组管理。docker stack --help #帮助 docker stack deploy --compose-file=docker-compose.yml #部署创建Service生成Stack docke stack ls #查看stack列表 docker stack ps <stack名> #某个Stack具体的Service应用(部署多少台,在哪台机器等?) docker stack service wordpress #Stack下的Service具体情况 (端口映射情况等) docker stack rm <stack名> #删除stack (包含删除正在运行容器、网络、服务等)
2021年11月26日
208 阅读
1 评论
0 点赞
2021-11-25
记录Vagrant常用的一些命令
简介Vagrant 是一种用于在单个工作流中构建和管理虚拟机环境的工具,需要配合VirtualBox配合使用。一旦您或其他人创建了一个 Vagrantfile,您只需要vagrant up安装和配置所有内容即可工作。您团队的其他成员使用相同的配置创建他们的开发环境。您的所有团队成员都在相同的环境中运行代码,针对相同的依赖项,所有配置都相同道路。告别“在我的机器上工作”的错误。解决:以前搭建Linux虚拟机,需要 VirtualBox 从.iso 文件安装了,有Vagrant可以直接从配置拉取并下载系统,一步到位简洁化,开发环境变得简单。疑问:为什么不用VMware+VMware而是用VirtualBox+Vagrant去使用呢虽然VMware功能更强大,但是Vmware是收费的,而且使用VMware+Vagrant 配搭的环境也是要收费的。安装Vagrant下载地址: https://www.vagrantup.com/下载后通过终端输入命令vagrant --hlep 查看是否已安装成功。在创建一个空目录,并且再目录里运行vagrant init centos/7(根据官网还有很多系统可选,我这选 centos/7 , 镜像地址 :https://app.vagrantup.com/boxes/search)初始化一个Vagrantfile 配置文件。输入vagrant up 执行下载centos7的系统资源 (等待时间有点长)下载完成,出现一个CentOS7的 VM虚拟机,然后再打开VirtualBox 就可以看到这个系统了。运行&卸载安装好后,在目录下执行vagrant ssh ,进入我们刚创建的CentOS7的VM。(这就一台CentOS系统, 在里面可以使用Linux相关的命令.. )注意的是,如果在Vagrant虚拟机里,需要执行yum install xx,并且前面加个sudo如果不想要这个VM卸载,首先exit退出vagrant ,检查机器是否运行vagrant status ,运行中就需要vagrant halt 将系统停止。刚才在VirtualBox的centOS7系统就没了,这样就把系统卸载掉了。配置镜像一般官网都有配置一些镜像提供下载系统,可以输入命令vagrant up 镜像系统名 去下载,也可以通过Vagrantfile文件配置进行操作。官网镜像地址 :https://app.vagrantup.com/boxes/search自动创建:输入以下命令就可以自动创建对应的系统vagrant init centos/7 vagrant up手动创建(Vagrantfile配置中改系统):Vagrantfile是通过Vagrant init生成的,配置选项可以做很多事 ,可以从一个Vagrantfile配置多个系统的操作。复制以上代码到Vagrantfile并且命令输入vagrant up远程SSH登录输入vagrant ssh-config 查看一些配置(登录IP、私钥文件位置、端口号等)常用命令vagrant -v #查看版本 vagrant init centos/7 #初始化(centos/7是系统镜像名) vagrant up #启动虚拟机 vagrant reload #重启虚拟机 vagrant halt #关闭虚拟机 vagrant destroy #删除虚拟机 vagrant ssh #ssh登录虚拟机 vagrant ssh-config #查看配置 vagrant suspend #暂停虚拟机(类似休眠) vagrant resume #唤醒虚拟机 vagrant status #观察虚拟机状态 vagrant box list # 查看本地box列表 vagrant box add # 添加box到列表 vagrant box remove # 从box列表移除
2021年11月25日
683 阅读
2 评论
0 点赞
2021-03-17
Nginx缓存相关指令以及配置示例
相关指令proxy_cache开启缓存(对上游服务器数据)指定某一个zone名称)语法 : proxy_cache zone | off; 默认值 : proxy_cache off; 上下文 :httpproxy_caceh_path缓存的路径,path : 缓存目录路径keys_zone : 1M可以缓存8千多个key语法 : proxy_cache_path path [levels=levels][use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]; 默认值 : proxy_cache_path off; 上下文 : http可选参数可选参数含义path缓存文件的存放路径 【必选】levelpath的目录层级use_temp_pathoff直接使用path路径,on使用proxy_temp_path路径keys_zonename是共享内存名称;size是共享内存大小 【必选】inactive在指定时间内没有被访问缓存会被清理;默认10分钟max_size设定最大的缓存文件大小,超过将由CM清理manager_filesCM清理一次缓存文件,最大清理文件数;默认100manager_sleepCM清理一次后进程的休眠时间,默认200毫秒manager_thresholdCM清理一次最长耗时;默认50毫秒loader_filesCL载入文件到共享内存,每批最多文件数;默认100loader_sleepCL加载缓存文件到内存中,进程休眠时间;默认200毫秒loader_thresholdCL每次载入文件到共享内存的最大耗时,默认50毫秒proxy_cache_key缓存key信息语法: proxy_cache_key string; 默认值 : proxy_cache_key $scheme$proxy_host$request_uri; 上下文 : http、server 、 locationproxy_cache_valid语法: proxy_cache_valid [code..] time; 默认值: - 上下文:http、server 、 location 配置示例:proxy_cache_valid 60m; // 只对200/301/302的响应码缓存upstream_caceh_status变量变量名: upstream_cache_statusMISS : 未命中缓存HIT : 命中缓存EXPIRED : 缓存过期STALE : 命中了陈旧缓存REVALIDDATED : Nginx验证陈旧缓存依然有效UPDATING : 内容陈旧,但正在更新BYPASS : 响应从原始服务器获取配置示例虚拟机做演示作为上游服务器 192.168.253.131作为代理服务器 :192.168.253.130代码演示上游服务器配置用9001、9002这2个端口做为2台服务器。并且把对应的端口号开启,然后创建9001/9002目录。server { listen 9001; root /opt/html/9001; location / { index index.html index.htm; } } server { listen 9002; root /opt/html/9002; location / { index index.html index.htm; } } 代理服务器配置配置虚拟渔民Host /ect/host#缓存配置 proxy_cache_path /opt/nginx/cache_temp levels=2:2 keys_zone=cache_zone:30m max_size=32g inactive=60m use_temp_path=off; #反向代理IP upstream cache_server { server 192.168.253.131:9001; server 192.168.253.131:9002; } server { listen 80; server_name cache.lmq-nginx.com; location / { proxy_pass http://cache_server; #开启缓存 proxy_cache cache_zone; proxy_cache_valid 200 5m; #缓存有效5分钟 add_header Nginx-Cache-Status "$upstream_cache_status";#查看缓存状态变量 } } 重载nginx,并运行运行访问开启缓存访问,一直访问9001 ,并且会生成缓存文件,这里定义到/opt/nginx/temp_path其他说明1. 怎么修改缓存的key呢location / { proxy_pass http://cache_server; #开启缓存 proxy_cache cache_zone; proxy_cache_valid 200 5m;#缓存有效期5分钟 add_header Nginx-Cache-Status "$upstream_cache_status";#查看缓存状态变量 #改变key名 proxy_cache_key $proxy_host$reuqest_uri; #主机名+文件名 }2. 设置上游服务器的缓存有效期虽然代理服务器设置了有效期5分钟,但是可以由上游服务器去控制在上游服务器设置server { add_header X-Accel-Expires 5; //5秒有效 locatoin / { .... } }
2021年03月17日
559 阅读
0 评论
0 点赞
2021-03-04
Linux中用yum安装好还是自编译安装
yum安装和源码编译安装的区别yum安装可以看成是在线安装的一种方式,你只需要yum install 软件名,系统就自动根据yum源配置文件中的镜像位置去下载安装包了,并可以自动分析所需的软件依赖关系,自动安装所需的依赖软件包。此方式适合初学者,简单方便,不用考虑依赖关系。但有些软件并不能通过yum来安装。。而源码安装方式是需要自己到网上下载源码包,然后解压安装。此方式可以指定配置参数,更加灵活方便,兼容性更强。比较适合对Linux系统有较多了解的进阶用户使用。。yum跟编译的特点大部分Linux发行版的某个特定版本,比如说Cent OS 6.x,或者Ubuntu 14.04这种,对于官方提供的软件包都会选择一个版本固定下来,很少跨大版本升级,为的是稳定,避免用户升级产生问题yum是一个包管理器,除了承担安装,还会帮你管理包与包的关联,还有卸载,搜索等附加功能。它主要安装的是二进制包,背后是rpm,当然也有源码的包,不那么常用。你也可以找到第三方提供的软件包的新版本,只是需要你自己把这种源添加进去如果只是追求最新,源码确实是获取新版的最快方式,只是比较麻烦,关联需要你自己管理(当然你也可以通过yum来安装关联包),优势是你可以自己定义编译参数进行一些优化调整,还可以把软件装到期望安装的目录用软件源(yum)特点好处:是不用处理依赖关系的问题缺点:版本不新。自己编译的特点好处 : 是可以精确控制编译参数,修改代码,获得最新的版本。缺点: 是要处理复杂的依赖关系。总结如果不是特别需要,一般都是能yum安装就yum安装了。尽量包,不要自编译有包管理更好啊,源码编译费事费力又费电,包管理只管安装,依赖,卸载,升级都交给包管理完成。一句命令完成系统的全面升级。
2021年03月04日
1,631 阅读
2 评论
0 点赞
2021-01-28
nginx中的rewrite指令
rewrite功能根据指定正则表达式匹配规则,重写URL语法结构语法 : rewrite regex replacement [flag] 默认值 : - 上下文 ; server 、 location 、 if 示例 rewrite /images/(.*\.jpg)$ /pic/$1; //将/images下的*.jpg图片重写到/pic目录下的图片这个$1 可以理解为 www.xxx.com/images/1.jpg 把这个1.jpg 参数传递到pic/目录下 ,查看pic/下是否有1.jpgrewrite中的flagflag可选值以及含义这里重点看last、break的可选值。场景示例场景1server { location /search { rewrite ^/(.*) http://www.baidu.com redirect; //访问xxx.com/search 任意字符 会临时重定向到百度上。 } }场景2流程顺序比较复杂,多看看。访问xxx.com/images 重写到/pic下,/pic下又重写到/photos下。写入测试数据cd '网站目录' mkdir imgages mkdir pic mkdir photos echo "我在images目录下" > images/index.html echo "我在pic目录下" > pic/index.html echo "我在photos目录下" > photos/index.htmlserver { location /images { rewrite /images/(.*)$ /pic/$1; } location /pic { rewrite /pic/(.*) /photos/$1 } location /photos { } }想想最后是会访问到那个?答: 最后是会访问到photos下。一层一层匹配到最后的photos目录下。(再次说明 这个$1 就是一个参数变量,访问xxx.com/images/index.html),实际上这个index.html 就是变量。最后重写到/photos/index.html ,场景3还是拿上述举例。如果在/pic的location段后,增加break 的flag。会重定向哪里?server { location /images { rewrite /images/(.*)$ /pic/$1 break; //增加break的flag,终止需要匹配规则 } location /pic { rewrite /pic/(.*) /photos/$1; } location /photos { } }访问xxx.com/images 匹配到/pic,并且终止循环匹配去找。而直接去找pic下的文件,如果有就返回。就中止继续找了。场景4还是拿场景2举例。如果在/pic的location段后,增加last 的flag。会重定向哪里?server { location /images { rewrite /images/(.*)$ /pic/$1 last; //增加last的flag,重新在server段找 } location /pic { rewrite /pic/(.*) /photos/$1; } location /photos { } }访问xxx.com/images,匹配到pic,加了last会在server段找是否有location /pic的内容,有就匹配。匹配到了/pic 又重写到photos,最后还是访问photos目录下。
2021年01月28日
766 阅读
0 评论
0 点赞
2021-01-28
nginx中return和rewrite指令同时存在,先执行顺序哪个?
前文如果return指令跟rewrite指令同时存在先执行哪个呢?场景示例模拟数据server { location /images { rewrite /images/(.*)$ /pic/$1 last; return 200 "return 200 in /images"; } location /pic { rewrite /pic/(.*) /photos/$1; return 200 "return 200 in /pic"; } location /photos { return 200 "return 200 in /photos"; } }分别在/images、/pic、/photos的location段增加return 返回200状态码并输出字符串流程访问xxx.com/images/index.html ,会进入/images的location段中,在/images中,进行rewrite指令,将images/index.html重写到/pic/的index.html,并且有last 值。遇到last值,会重新触发请求。在server段找/pic的location段。匹配到location的/pic后 ,又重写,将/pic的index.html重定向到/photos目录下的index.html。(注意/pic段没有加last值,意味着流程顺序执行!)没有加flag标签。所以/pic段中依然执行下面的命令,会走retrun 200 "return 200 in /pic" 之后就中断。场景2如果在/pic段中增加flag的break,会执行什么?当遇到break,会重写找/photos段,不会执行return 200 in /pic,注意事项如果当你直接访问xxx.com/photos/index.html, 但是又有return指令, 会优先执行return指令 , 并不会返回photos/index.html的页面,直接返回return结果给你。如果没有return指令才会找目录对应下的有没有index.html文件。
2021年01月28日
887 阅读
0 评论
0 点赞
1
2