首页
留言
导航
统计
Search
1
追番推荐!免费看动漫的网站 - 支持在线观看和磁力下载
2,512 阅读
2
推荐31个docker应用,每一个都很实用
1,312 阅读
3
PVE自动启动 虚拟机 | 容器 顺序设置及参数说明
931 阅读
4
一条命令,永久激活!Office 2024!
618 阅读
5
优选 Cloudflare 官方 / 中转 IP
490 阅读
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
登录
Search
标签搜索
Java
小程序
Redis
SpringBoot
docker
Typecho
Cloudflare
docker部署
虚拟机
WordPress
群晖
uni-app
CentOS
Vue
Java类库
Linux命令
防火墙配置
Mysql
脚本
Nginx
微醺
累计撰写
264
篇文章
累计收到
11
条评论
首页
栏目
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
页面
留言
导航
统计
搜索到
55
篇与
的结果
2023-03-22
Debian10 配置镜像源(外网、内网)
一.备份默认源由于默认源都在国外,速度非常慢,需要把默认的源配置文件备份后删除。# 进入配置文件目录 cd /etc/apt # 复制配置文件 cp sources.list sources.list.bak二、配置外网源(阿里)nano /etc/apt/sources.list配置文件内容:deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib deb http://mirrors.aliyun.com/debian-security/ buster/updates main non-free contrib deb-src http://mirrors.aliyun.com/debian-security/ buster/updates main non-free contrib清理缓存|更新仓库文件列表# 清除缓存 apt clean # 更新列表 apt update三、配置本地源(内网环境)在非联网环境可以通过安装包光盘配置本地源。# 创建挂载目录 mkdir /mnt/debian-cd # 挂载光盘 mount /dev/cdrom /mnt/debian-cd # 验证是否挂载成功 ls -l /mnt/debian-cd # 添加光盘镜像源 apt-cdrom add # 清除缓存 apt clean # 更新列表 apt update
2023年03月22日
92 阅读
0 评论
0 点赞
2023-03-22
Docker 安装 Nginx Proxy Manager
1.背景对于想自己搭建网站的朋友,使用自己个性化域名的朋友,使用Nginx的不在少数,可能也会使用Apache来管理自己的网站,但Nginx轻量又好用,还支持正向/反向代理,谁不喜欢呢?Nginx Proxy Manager就是一款让你能通过网页的一些设置,完成网站的代理配置,无需自己再手动安装Nginx修改配置文件了,大大提高了效率。项目也是开源的,不用担心项目的安全性。2.安装docker安装依然使用我们的老伙计 docker ,但这次要使用到 docker 的伙计: docker-compose,使用 docker-compose 可以帮助我们编排自己的容器,通过一个简单的脚本启动复杂的程序,自动处理依赖项目,从而简化操作。服务器上执行以下命令安装 docker, 安装完成后执行第二条命令,启动并设置开机启动 docker。curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable --now docker安装docker-composesudo curl -L "https://github.com/docker/compose/releases/download/v2.1.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose检查一下安装是否成功# 查看docker版本 docker -v # 查看docker-compose版本 docker-compose -v如果未能查看 docker-compose 版本可能是因为 /usr/local/bin 没有加入到系统环境变量export PATH=/usr/local/bin:$PATH3.部署Nginx Proxy Manager创建一个目录用于存放 Nginx Proxy Manager 的配置和项目文件mkdir -p /opt/docker/NginxProxyManager && cd /opt/docker/NginxProxyManager创建一个 docker-compose.yml 文件vi docker-compose.yml粘贴以下内容:version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt按下键盘上的 ESC 键和 SHIFT+: 键,输入 wq 保存退出。请注意文件间的缩进,如果缩进不正确,可以使用文本编辑器编辑好后上传到服务器上。创建 docker 容器docker-compose up -d4.访问控制页面浏览器输入你的ip:81,如果有防火墙,可以临时开放 81 的 tcp 端口。初始的用户和密码如下:Email: admin@example.com Password: changeme
2023年03月22日
32 阅读
0 评论
0 点赞
2023-03-13
Cdnfly 通过修改 hosts 破解授权保姆级教程
Cdnfly 官方文档:http://doc.cdnfly.cn/1790334Cdnfly 是基于 Openresty ,以 lua 脚本语言开发的防 CC 攻击软件。而 Openresty 是集成了高性能 Web 服务器 Nginx ,以及一系列的 Nginx 模块,这其中最重要的,也是我们主要用到的 Nginx lua 模块。Cdnfly 基于 Nginx lua 开发,继承了 nginx 高并发,高性能的特点,可以以非常小的性能损耗来防范大规模的 CC 攻击主控端目前仅支持 Centos-7 和 Ubuntu 1604 系统。因本次教程用到两台服务器演示,故未测试在同一台服务器配置网站及主控端安装。网站搭建A 服务器在宝塔面板新建网站,绑定域名:auth.cdnfly.cn 和 monitor.cdnfly.cn 。设置网站伪静态。location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last; break; } } 上传本文附件内压缩包至网站根目录解压。下载地址:https://115.com/s/sw6rlch3hlg?password=g507Cdnfly-v5.1.11.zip访问码:g507主控端安装B 服务器在宝塔面板 /etc 目录下编辑 host 文件。设置 auth.cdnfly.cn 指向刚才配置网站的服务器 IP 。设置完可通过 ping 命令验证。*.*.*.* auth.cdnfly.cn 通过 Xshell 或其他 SSH 工具执行以下命令安装主控:curl http://auth.cdnfly.cn/master.sh -o master.sh && chmod +x master.sh && ./master.sh --es-dir /home/es 安装完成访问主控端 IP 即可访问后台。修改授权节点数量及到期时间。节点安装命令在后台 系统管理 - 系统升级 。错误提示如提示:Job forlma riadb . service failed because the control process exited with error code.See "systemctl status mariadb . servic and "journalctl -xe" for details. 不如重装下系统吧。变更日志2022-7-14 更新修复节点监控功能
2023年03月13日
29 阅读
0 评论
0 点赞
2023-03-04
Jenkins+Docker 实现一键自动化部署项目!步骤齐全,少走坑路
本文章实现最简单全面的 Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。环境:Centos7+Git(Gitee)简述实现步骤:在 docker 安装 jenkins,配置 jenkins 基本信息,利用 Dockerfile 和 shell 脚本实现项目自动拉取打包并运行。安装 dockerdocker 安装社区版本 CE确保 yum 包更新到最新。yum update卸载旧版本(如果安装过旧版本的话)yum remove docker docker-common docker-selinux docker-engine安装需要的软件包yum install -y yum-utils device-mapper-persistent-data lvm2设置 yum 源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装 dockeryum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0 yum install <自己的版本> # 例如:sudo yum install docker-ce-17.12.0.ce启动和开机启动systemctl start docker systemctl enable docker验证安装是否成功docker version安装 JenkinsJenkins 中文官网安装 Jenkinsdocker 安装一切都是那么简单,注意检查 8080 是否已经占用!如果占用修改端口docker run --name jenkins -u root --rm -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean如果没改端口号的话安装完成后访问地址=> http://{部署Jenkins所在服务IP}:8080此处会有几分钟的等待时间。初始化 Jenkins详情见官网教程=> https://www.jenkins.io解锁 Jenkins进入 Jenkins 容器:docker exec -it {Jenkins容器名} bash # 例如 `docker exec -it jenkins bash`查看密码:cat /var/lib/jenkins/secrets/initialAdminPassword复制密码到输入框里面安装插件选择第一个:安装推荐的插件创建管理员用户此账户一定要记住哦系统配置安装需要插件进入【首页】–【系统管理】–【插件管理】–【可选插件】搜索以下需要安装的插件,点击安装即可。安装 Maven Integration安装 Publish Over SSH(如果不需要远程推送,不用安装)如果使用 Gitee 码云,安装插件 Gitee(Git 自带不用安装)配置 Maven进入【首页】–【系统管理】–【全局配置】,拉到最下面 maven–maven 安装创建任务新建任务点击【新建任务】,输入任务名称,点击构建一个自由风格的软件项目源码管理点击【源码管理】–【Git】,输入仓库地址,添加凭证,选择好凭证即可。构建触发器点击【构建触发器】–【构建】–【增加构建步骤】–【调用顶层Maven目标】–【填写配置】–【保存】此处命令只是 install,看是否能生成 jar 包clean install -Dmaven.test.skip=true保存点击【保存】按钮即可测试该功能测试是否能正常打包构建查看日志点击正在构建的任务,或者点击任务名称,进入详情页面,查看控制台输出,看是否能成功打成 jar 包。该处日志第一次可能下载依赖 jar 包失败,再次点击构建即可成功。查看项目位置cd /var/jenkins_home/workspacell 命令即可查看是否存在运行项目因为我们项目和 jenkins 在同一台服务器,所以我们用 shell 脚本运行项目,原理既是通过 dockerfile 打包镜像,然后 docker 运行即可。Dockerfile在 springboot 项目根目录新建一个名为 Dockerfile 的文件,注意没有后缀名,其内容如下:(大致就是使用 jdk8,把 jar 包添加到 docker 然后运行 prd 配置文件)FROM jdk:8 VOLUME /tmp ADD target/zx-order-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8888 ENTRYPOINT ["Bash","-DBash.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=prd"]修改 jenkins 任务配置配置如下:-t:指定新镜像名.:表示Dockfile在当前路径cd /var/jenkins_home/workspace/zx-order-api docker stop zx-order || true docker rm zx-order || true docker rmi zx-order || true docker build -t zx-order . docker run -d -p 8888:8888 --name zx-order zx-order:latest备注:我上图用了 docker logs -f 是为了方便看日志,真实不要用,因为会一直等待日志,构建任务会失败加|| true 是如果命令执行失败也会继续实行,为了防止第一次没有该镜像报错保存点击 保存 即可构建查看 jenkins 控制台输出,输出如下,证明成功!验证docker ps 查看是否有自己的容器 docker logs 自己的容器名 查看日志是否正确浏览器访问项目试一试
2023年03月04日
78 阅读
0 评论
0 点赞
2023-02-23
Nginx核心面试题40问,含答案!
Nginx核心面试题40问,含答案!什么是Nginx?Nginx 有哪些优点?Nginx应用场景?Nginx怎么处理请求的?Nginx 是如何实现高并发的?什么是正向代理?什么是反向代理?反向代理服务器的优点是什么?Nginx目录结构有哪些?Nginx配置文件nginx.conf有哪些属性模块?cookie和session区别?为什么 Nginx 不使用多线程?nginx和apache的区别什么是动态资源、静态资源分离?为什么要做动、静分离?什么叫 CDN 服务?Nginx怎么做的动静分离?Nginx负载均衡的算法怎么实现的?策略有哪些?如何用Nginx解决前端跨域问题?Nginx虚拟主机怎么配置?location的作用是什么?限流怎么做的?漏桶流算法和令牌桶算法知道?Nginx配置高可用性怎么配置?Nginx怎么判断别IP不可访问?在nginx中,如何使用未定义的服务器名称来阻止处理请求?怎么限制浏览器访问?Rewrite全局变量是什么?Nginx 如何实现后端服务的健康检查?Nginx 如何开启压缩?ngx\_http\_upstream_module的作用是什么?什么是C10K问题?Nginx是否支持将请求压缩到上游?如何在Nginx中获得当前的时间?用Nginx服务器解释-s的目的是什么?如何在Nginx服务器上添加模块?生产中如何设置worker进程的数量呢?nginx状态什么是Nginx?Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。Nginx 有哪些优点?跨平台、配置简单。非阻塞、高并发连接:处理 2-3 万并发连接数,官方监测能支持 5 万并发。内存消耗小:开启 10 个 Nginx 才占 150M 内存。成本低廉,且开源。稳定性高,宕机的概率非常小。内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上Nginx应用场景?http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。Nginx怎么处理请求的?server { # 第一个Server区块开始,表示一个独立的虚拟主机站点 listen 80; # 提供服务的端口,默认80 server_name localhost; # 提供服务的域名主机名 location / { # 第一个location区块开始 root html; # 站点的根目录,相当于Nginx的安装目录 index index.html index.html; # 默认的首页文件,多个用空格分开 } # 第一个location区块结果 首先,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket(创建 S ocket,设置 addr、reuse 等选项,绑定到指定的 ip 地址端口,再 listen 监听)。然后,再 fork(一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为子进程)出多个子进程出来。之后,子进程会竞争 accept 新的连接。此时,客户端就可以向 nginx 发起连接了。当客户端与nginx进行三次握手,与 nginx 建立好一个连接后。此时,某一个子进程会 accept 成功,得到这个建立好的连接的 Socket ,然后创建 nginx 对连接的封装,即 ngx\_connection\_t 结构体。接着,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。最后,Nginx 或客户端来主动关掉连接,到此,一个连接就寿终正寝了。Nginx 是如何实现高并发的?如果一个 server 采用一个进程(或者线程)负责一个request的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。等什么?最多的应该是等待网络传输。而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。Nginx是如何利用的呢,简单来说:同样的 4 个进程,如果采用一个进程负责一个 request 的方式,那么,同时进来 4 个 request 之后,每个进程就负责其中一个,直至会话关闭。期间,如果有第 5 个request进来了。就无法及时反应了,因为 4 个进程都没干完活呢,因此,一般有个调度进程,每当新进来了一个 request ,就新开个进程来处理。「回想下,BIO 是不是存在酱紫的问题?」Nginx 不这样,每进来一个 request ,会有一个 worker 进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发 request ,并等待请求返回。那么,这个处理的 worker 不会这么傻等着,他会在发送完请求后,注册一个事件:“如果 upstream 返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有 request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker 才会来接手,这个 request 才会接着往下走。这就是为什么说,Nginx 基于事件模型。由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即:webserver 刚好属于网络 IO 密集型应用,不算是计算密集型。异步,非阻塞,使用 epoll ,和大量细节处的优化。也正是 Nginx 之所以然的技术基石。什么是正向代理?一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。正向代理总结就一句话:代理端代理的是客户端。例如说:我们使用的OpenVPN 等等。什么是反向代理?反向代理(Reverse Proxy)方式,是指以代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。❝反向代理总结就一句话:代理端代理的是服务端。❞反向代理服务器的优点是什么?反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时。「Nginx目录结构有哪些?」tree /usr/local/nginx /usr/local/nginx ├── client_body_temp ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参数的配置文件 │ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件 │ ├── fastcgi_params # fastcgi的参数文件 │ ├── fastcgi_params.default │ ├── koi-utf │ ├── koi-win │ ├── mime.types # 媒体类型 │ ├── mime.types.default │ ├── nginx.conf # Nginx主配置文件 │ ├── nginx.conf.default │ ├── scgi_params # scgi相关参数文件 │ ├── scgi_params.default │ ├── uwsgi_params # uwsgi相关参数文件 │ ├── uwsgi_params.default │ └── win-utf ├── fastcgi_temp # fastcgi临时数据目录 ├── html # Nginx默认站点目录 │ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面 │ └── index.html # 默认的首页文件 ├── logs # Nginx日志目录 │ ├── access.log # 访问日志文件 │ ├── error.log # 错误日志文件 │ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件 ├── proxy_temp # 临时目录 ├── sbin # Nginx命令目录 │ └── nginx # Nginx的启动命令 ├── scgi_temp # 临时目录 └── uwsgi_temp # 临时目录 Nginx配置文件nginx.conf有哪些属性模块?worker_processes 1;# worker进程的数量 events { # 事件区块开始 worker_connections 1024;# 每个worker进程支持的最大连接数 } # 事件区块结束 http { # HTTP区块开始 include mime.types;# Nginx支持的媒体类型库文件 default_type application/octet-stream;# 默认的媒体类型 sendfile on;# 开启高效传输模式 keepalive_timeout 65;# 连接超时 server { # 第一个Server区块开始,表示一个独立的虚拟主机站点 listen 80;# 提供服务的端口,默认80 server_name localhost;# 提供服务的域名主机名 location / { # 第一个location区块开始 root html;# 站点的根目录,相当于Nginx的安装目录 index index.html index.htm;# 默认的首页文件,多个用空格分开 } # 第一个location区块结果 error_page 500502503504 /50x.html;# 出现对应的http状态码时,使用50x.html回应客户 location = /50x.html { # location区块开始,访问50x.html root html;# 指定对应的站点目录为html } } ...... cookie和session区别?共同:存放用户信息。存放的形式:key-value格式 变量和变量内容键值对。区别:cookie存放在客户端浏览器每个域名对应一个cookie,不能跨跃域名访问其他cookie用户可以查看或修改cookiehttp响应报文里面给你浏览器设置钥匙(用于打开浏览器上锁头)session:存放在服务器(文件,数据库,redis)存放敏感信息锁头为什么 Nginx 不使用多线程?Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以 worker 支持比 perfork 高的并发),并发过大会榨干服务器资源。Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置 Nginx 主进程的工作进程的数量)(epoll),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。nginx和apache的区别轻量级,同样起web服务,比apache占用更少的内存和资源。抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞性的,在高并发下nginx能保持低资源,低消耗高性能。高度模块化的设计,编写模块相对简单。最核心的区别在于apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。什么是动态资源、静态资源分离?动态资源、静态资源分离,是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离。为什么要做动、静分离?在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do 等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js 等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗?当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问这里我们将静态资源放到 Nginx 中,动态资源转发到 Tomcat 服务器中去。当然,因为现在七牛、阿里云等 CDN 服务已经很成熟,主流的做法,是把静态资源缓存到 CDN 服务中,从而提升访问速度。相比本地的 Nginx 来说,CDN 服务器由于在国内有更多的节点,可以实现用户的就近访问。并且,CDN 服务可以提供更大的带宽,不像我们自己的应用服务,提供的带宽是有限的。什么叫 CDN 服务?CDN ,即内容分发网络。其目的是,通过在现有的 Internet中 增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度。一般来说,因为现在 CDN 服务比较大众,所以基本所有公司都会使用 CDN 服务。「Nginx怎么做的动静分离?」只需要指定路径对应的目录。location可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下:(操作都是在Linux上)location /image/ { root /usr/local/static/; autoindex on; } 步骤:# 创建目录 mkdir /usr/local/static/image # 进入目录 cd /usr/local/static/image # 上传照片 photo.jpg # 重启nginx sudo nginx -s reload 打开浏览器 输入 server_name/image/1.jpg 就可以访问该静态图片了Nginx负载均衡的算法怎么实现的?策略有哪些?为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。Nginx负载均衡实现的策略有以下五种:轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。upstream backserver { server 192.168.0.12; server 192.168.0.13; } 权重 weightweight的值越大,分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。# 权重越高,在被访问的概率越大,如上例,分别是20%,80%。 upstream backserver { server 192.168.0.12 weight=2; server 192.168.0.13 weight=8; } ip_hash(IP绑定)每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题upstream backserver { ip_hash; server 192.168.0.12:88; server 192.168.0.13:80; } fair(第三方插件)必须安装upstream\_fair模块。对比 weight、ip\_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。# 哪个服务器的响应速度快,就将请求分配到那个服务器上。 upstream backserver { server server1; server server2; fair; } url_hash(第三方插件)必须安装Nginx的hash软件包按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; } 如何用Nginx解决前端跨域问题?使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。Nginx虚拟主机怎么配置?基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台基于 ip 的虚拟主机。基于虚拟主机配置域名需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件;# 当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件 server { listen 80; server_name www.lijie.com; location / { root data/www; index index.html index.htm; } } # 当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/bbs目录下文件 server { listen 80; server_name bbs.lijie.com; location / { root data/bbs; index index.html index.htm; } } 基于端口的虚拟主机使用端口来区分,浏览器使用域名或ip地址:端口号 访问# 当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件 server { listen 8080; server_name 8080.lijie.com; location / { root data/www; index index.html index.htm; } } # 当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080 server { listen 80; server_name www.lijie.com; location / { proxy_pass http://127.0.0.1:8080; index index.html index.htm; } } location的作用是什么?location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。location的语法能说出来吗?❝注意:~ 代表自己输入的英文字母❞Location正则案例# 优先级1,精确匹配,根路径 location =/ { return 400; } # 优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写 location ^~ /av { root /data/av/; } # 优先级3,区分大小写的正则匹配,匹配/media*****路径 location ~ /media { alias /data/static/; } # 优先级4,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里 location ~* .*\.(jpg|gif|png|js|css)$ { root /data/av/; } # 优先级5,通用匹配 location / { return 403; } 限流怎么做的?Nginx限流就是限制用户请求速度,防止服务器受不了限流有3种正常限制访问频率(正常流量)突发限制访问频率(突发流量)限制并发连接数Nginx的限流都是基于漏桶流算法❝实现三种限流算法❞1、正常限制访问频率(正常流量):限制一个用户发送的请求,我Nginx多久接收一个请求。Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。# 定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; # 绑定限流维度 server{ location/seckill.html{ limit_req zone=zone; proxy_pass http://lj_seckill; } } 1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求。2、突发限制访问频率(突发流量):限制一个用户发送的请求,我Nginx多久接收一个。上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx提供burst参数结合nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数:# 定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; # 绑定限流维度 server{ location /seckill.html{ limit_req zone=zone burst=5 nodelay; proxy_pass http://lj_seckill; } } 为什么就多了一个 burst=5 nodelay; 呢,多了这个可以代表Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我Nginx就漏掉不接受你的请求3、 限制并发连接数Nginx中的ngx\_http\_limit\_conn\_module模块提供了限制并发连接数的功能,可以使用limit\_conn\_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下:http { limit_conn_zone $binary_remote_addr zone=myip:10m; limit_conn_zone $server_name zone=myServerName:10m; } server { location / { limit_conn myip 10; limit_conn myServerName 100; rewrite / http://www.lijie.net permanent; } } 上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。漏桶流算法和令牌桶算法知道?漏桶算法漏桶算法思路很简单,我们把水比作是请求,漏桶比作是系统处理能力极限,水先进入到漏桶里,漏桶里的水按一定速率流出,当流出的速率小于流入的速率时,由于漏桶容量有限,后续进入的水直接溢出(拒绝请求),以此实现限流。漏桶算法令牌桶算法令牌桶算法的原理也比较简单,我们可以理解成医院的挂号看病,只有拿到号以后才可以进行诊病。系统会维护一个令牌(token)桶,以一个恒定的速度往桶里放入令牌(token),这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌(token),当桶里没有令牌(token)可取时,则该请求将被拒绝服务。令牌桶算法通过控制桶的容量、发放令牌的速率,来达到对请求的限制。Nginx配置高可用性怎么配置?当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用Nginx配置代码:server { listen 80; server_name www.lijie.com; location / { ### 指定上游服务器负载均衡服务器 proxy_pass http://backServer; ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间 proxy_connect_timeout 1s; ###nginx发送给上游服务器(真实访问的服务器)超时时间 proxy_send_timeout 1s; ### nginx接受上游服务器(真实访问的服务器)超时时间 proxy_read_timeout 1s; index index.html index.htm; } } Nginx怎么判断别IP不可访问?# 如果访问的ip地址为192.168.9.115,则返回403 if ($remote_addr = 192.168.9.115) { return 403; } 在nginx中,如何使用未定义的服务器名称来阻止处理请求?只需将请求删除的服务器就可以定义为:服务器名被保留一个空字符串,他在没有主机头字段的情况下匹配请求,而一个特殊的nginx的非标准代码被返回,从而终止连接。怎么限制浏览器访问?## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500 if ($http_user_agent ~ Chrome) { return 500; } Rewrite全局变量是什么?$remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客户端port,如:50472 $remote_user //已经经过Auth Basic Module验证的用户名 $host //请求主机头字段,否则为服务器名称,如:blog.sakmon.com $request //用户请求信息,如:GET ?a=1&b=2 HTTP/1.1 $request_filename //当前请求的文件的路径名,由root或alias和URI request组合而成,如:/2013/81.html $status //请求的响应状态码,如:200 $body_bytes_sent // 响应时送出的body字节数数量。即使连接中断,这个数据也是精确的,如:40 $content_length // 等于请求行的“Content_Length”的值 $content_type // 等于请求行的“Content_Type”的值 $http_referer // 引用地址 $http_user_agent // 客户端agent信息,如:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 $args //与$query_string相同 等于当中URL的参数(GET),如a=1&b=2 $document_uri //与$uri相同 这个变量指当前的请求URI,不包括任何参数(见$args) 如:/2013/81.html $document_root //针对当前请求的根路径设置值 $hostname //如:centos53.localdomain $http_cookie //客户端cookie信息 $cookie_COOKIE //cookie COOKIE变量的值 $is_args //如果有$args参数,这个变量等于”?”,否则等于”",空值,如? $limit_rate //这个变量可以限制连接速率,0表示不限速 $query_string // 与$args相同 等于当中URL的参数(GET),如a=1&b=2 $request_body // 记录POST过来的数据信息 $request_body_file //客户端请求主体信息的临时文件名 $request_method //客户端请求的动作,通常为GET或POST,如:GET $request_uri //包含请求参数的原始URI,不包含主机名,如:/2013/81.html?a=1&b=2 $scheme //HTTP方法(如http,https),如:http $uri //这个变量指当前的请求URI,不包括任何参数(见$args) 如:/2013/81.html $request_completion //如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty),如:OK $server_protocol //请求使用的协议,通常是HTTP/1.0或HTTP/1.1,如:HTTP/1.1 $server_addr //服务器IP地址,在完成一次系统调用后可以确定这个值 $server_name //服务器名称,如:blog.sakmon.com $server_port //请求到达服务器的端口号,如:80 Nginx 如何实现后端服务的健康检查?方式一 利用 nginx 自带模块 ngx\_http\_proxy\_module 和 ngx\_http\_upstream\_module 对后端节点做健康检查。方式二(推荐) 利用 nginx\_upstream\_check_module 模块对后端节点做健康检查。Nginx 如何开启压缩?开启nginx gzip压缩后,网页、css、js等静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率,给用户快的体验。虽然会消耗cpu资源,但是为了给用户更好的体验是值得的。开启的配置如下:http { # 开启gzip gzip on; # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩 gzip_min_length 1k; # gzip 压缩级别 1-10 gzip_comp_level 2; # 进行压缩的文件类型。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 是否在http header中添加Vary: Accept-Encoding,建议开启 gzip_vary on; } 保存并重启nginx,刷新页面(为了避免缓存,请强制刷新)就能看到效果了。以谷歌浏览器为例,通过F12看请求的响应头部:我们可以先来对比下,如果我们没有开启zip压缩之前,我们的对应的文件大小,如下所示:现在我们开启了gzip进行压缩后的文件的大小,可以看到如下所示:并且我们查看响应头会看到gzip这样的压缩。gzip压缩前后效果对比:jquery原大小90kb,压缩后只有30kb。gzip虽然好用,但是以下类型的资源不建议启用。1、图片类型原因:图片如jpg、png本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费资源。(Tips:可以试试将一张jpg图片压缩为zip,观察大小并没有多大的变化。虽然zip和gzip算法不一样,但是可以看出压缩图片的价值并不大)2、大文件原因:会消耗大量的cpu资源,且不一定有明显的效果。ngx_http_upstream_module的作用是什么?ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。什么是C10K问题?C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。Nginx是否支持将请求压缩到上游?您可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。微信搜索公众号:信安黑客技术,回复:黑客 领取资料 。如何在Nginx中获得当前的时间?要获得Nginx的当前时间,必须使用SSI模块、和date_local的变量。Proxy_set_header THE-TIME $date_gmt; 用Nginx服务器解释-s的目的是什么?用于运行Nginx -s参数的可执行文件。如何在Nginx服务器上添加模块?在编译过程中,必须选择Nginx模块,因为Nginx不支持模块的运行时间选择。生产中如何设置worker进程的数量呢?在有多个cpu的情况下,可以设置多个worker,worker进程的数量可以设置到和cpu的核心数一样多,如果在单个cpu上起多个worker进程,那么操作系统会在多个worker之间进行调度,这种情况会降低系统性能,如果只有一个cpu,那么只启动一个worker进程就可以了。nginx状态码499:服务端处理时间过长,客户端主动关闭了连接。502:502 状态码的可能情况就比较多了。FastCGI 进程是否已经启动FastCGI worker进程数是否不够FastCGI 执行时间过长fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; FastCGI Buffer不够,nginx和apache一样,有前端缓冲限制,可以调整缓冲参数fastcgi_buffer_size 32k; fastcgi_buffers 8 32k; Proxy Buffer不够,如果你用了Proxying,调整proxy_buffer_size 16k; proxy_buffers 4 16k;php脚本执行时间过长将php-fpm.conf的0s的0s改成一个时间
2023年02月23日
50 阅读
0 评论
0 点赞
2023-02-18
OpenWRT 路由配置技巧(PPTP VPN+断线自动重连+chnroutes国内路由表)
chnroutes 路由表这个路由表集中了所有分配到中国大陆的 IP 段,根据 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 每天自动更新,可使得在访问国内地址时不经过 VPN。想想如果能够让家里的路由直接连接 VPN,在家连接 WiFi 的所有设备直接达到Fan墙的效果,应该很 Cool,所以最近在某宝整了一个 Netgear WNDR3800 二手路由回来,先后分别在 DD-WRT 和 OpenWRT 成功配置 VPN + chnroutes,最后还是选择了 OpenWRT。DD-WRT vs OpenWRT关于 DD-WRT 和 OpenWRT ,我选择 OpenWRT 主要因为 DD-WRT ROM 中集成的软件太多,绝大多数用不到,要配置 jffs2 来保存脚本文件,一般配置则保存在 nvram 中,而且无线较不稳定,5G频段常搜索不到(当然可能是我这个路由器型号的支持问题)。OpenWRT 的配置文件语法统一,配置都存储在文件系统中,且 ROM 本身仅集成了必备组件,非常小,可以只安装需要的东西,WEB管理界面也是可选安装,简洁强大,经过若干天的使用一直比较稳定。配置已配置好 OpenWRT 上网的童鞋们可以直接跳过 1.刷ROM 和 2.初始配置刷ROMa. 首先确定你的设备可以被 OpenWRT 所支持(到这里查看支持的设备列表:http://wiki.openwrt.org/toh/start),然后到这里下载编译好的 ROM:http://downloads.openwrt.org/ 。最新的 stable 版本是 attitude_adjustment(12.09),我下载的是 trunk 版本。b. 在 OpenWRT 官网找相应设备的 Wiki 页面查看刷机方法,一般都是在路由方Web固件升级页面直接刷入(我的 WNDR3800 Wiki页面是:http://wiki.openwrt.org/toh/netgear/wndr3800)初始配置a. 路由器启动后,有的型号没有安装 Wifi 模块,需要先用网线连接到 LAN 口,本机 IP 配置为静态 192.168.1.x,然后 telnet 到 192.168.1.1,更改 root 密码,然后 ssh 连入,参考:http://wiki.openwrt.org/doc/start#configuring.openwrtb. 配置 WAN 口,让路由连上 Internet,参考:http://wiki.openwrt.org/doc/howto/internet.connection比如要配置PPPoE:代码如下:uci set network.wan.proto=pppoe uci set network.wan.username='yougotthisfromyour@isp.su' uci set network.wan.password='yourpassword' uci commit network ifup wanc. 安装 LuCI Web 管理界面并设置开机自动启动,参考:http://wiki.openwrt.org/doc/howto/luci.essentials代码如下:opkg update opkg install luci /etc/init.d/uhttpd start /etc/init.d/uhttpd enabled. 浏览器输入路由器 LAN 侧 IP(多为192.168.1.1),进行 Wifi 等配置配置 DNSa. 创建 /etc/config/sec_resolv.confvim /etc/config/sec_resolv.conf填入以下 DNS Servers:代码如下:nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 208.67.222.222b. 编辑 /etc/config/dhcpvim /etc/config/dhcp找到 option resolvfile 选项,替换为:option resolvfile '/etc/config/sec_resolv.conf'配置 PPTPa. 安装 ppp-mod-pptp代码如下:opkg updateopkg install ppp-mod-pptp如果需要 LuCI 支持(推荐):opkg install luci-proto-pppb. 配置 vpn 接口,编辑 /etc/config/network 文件,应该已经有以下内容(如果没有,需要插入),并配置里面的 server、username 和 password:代码如下:config 'interface' 'vpn' option 'ifname' 'pptp-vpn' option 'proto' 'pptp' option 'username' 'vpnusername' option 'password' 'vpnpassword' option 'server' 'vpn.example.org or ipaddress' option 'buffering' '1'c. 进入 Network -> Firewall ,把 vpn 加入 wan zone,效果如图:d. 进入 Network -> Interfaces ,此时应该已经可以看到 VPN Interface 并可以连接,效果如图:e. 此时在本机 traceroute www.google.com,应该能得到类似以下的结果:代码如下:FL-MBP:~ fatlyz$ traceroute www.google.com traceroute: Warning: www.google.com has multiple addresses; using 74.125.239.113 traceroute to www.google.com (74.125.239.113), 64 hops max, 52 byte packets fc_r0.lan (192.168.7.1) 2.266 ms 0.999 ms 0.946 ms 10.7.0.1 (10.7.0.1) 189.259 ms 187.813 ms 188.368 ms 23.92.24.2 (23.92.24.2) 189.847 ms 190.489 ms 188.939 ms 10ge7-6.core3.fmt2.he.net (65.49.10.217) 188.508 ms 192.216 ms 202.863 ms 10ge10-1.core1.sjc2.he.net (184.105.222.14) 195.695 ms 195.691 ms 284.242 ms 72.14.219.161 (72.14.219.161) 189.196 ms 192.287 ms 193.220 ms 216.239.49.170 (216.239.49.170) 192.496 ms 188.547 ms 189.881 ms 66.249.95.29 (66.249.95.29) 190.125 ms 190.335 ms 190.026 ms nuq05s01-in-f17.1e100.net (74.125.239.113) 189.804 ms 190.556 ms 190.242 ms可以看出,其中第二跳是 VPN 的网关,而 traceroute www.baidu.com 的话第二跳应该也是同样的结果。这时已经可以访问 Google, Baidu 等国内外的站点了。配置 chnroutesa. 到 chnroutes 项目的下载页面:http://chnroutes-dl.appspot.com/ 下载 linux.zip ,解压b. 把 ip-pre-up 重命名为 chnroutes.sh,打开编辑,在 if [ ! -e /tmp/vpn_oldgw ]; then 前插入以下代码,以避免 ppp 连接脚本重复执行导致重复添加路由表项:代码如下:if [ $OLDGW == 'x.x.x.x' ]; then exit 0 fi其中 x.x.x.x 是 VPN 的网关,可以先本机连接上去之后查看一下网关地址。c. ssh 连接到路由器,执行以下命令:代码如下:cd /etc/config/ mkdir pptp-vpncd pptp-vpnvim chnroutes.sh在 vim 中把编辑好的 chnroutes.sh 粘贴进去(当然也可以通过 ssh 直接把 chnroutes.sh 文件传过去,或者上传到某个地方再 wget 下载)执行以下命令,设置权限为可执行:chmod a+x chnroutes.shd. 用 vim 编辑 /lib/netifd/ppp-up 文件:vim /lib/netifd/ppp-up在 [ -d /etc/ppp/ip-up.d ] && { 这一行前插入以下内容,确保 ppp 连接脚本能够被执行:sh /etc/config/pptp-vpn/chnroutes.she. 重启路由,启动好之后,进入 LuCI 查看接口状态,等 WAN 和 VPN 都连接成功后,ssh进去,执行 route -n | head -n 10 ,效果应该类似这样:代码如下:root@FC_R0:/etc/config# route -n | head -n 10 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.7.0.1 0.0.0.0 UG 0 0 0 pptp-vpn 1.0.1.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan 1.0.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan 1.0.8.0 58.111.43.1 255.255.248.0 UG 0 0 0 pppoe-wan 1.0.32.0 58.111.43.1 255.255.224.0 UG 0 0 0 pppoe-wan 1.1.0.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan 1.1.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan 1.1.4.0 58.111.43.1 255.255.252.0 UG 0 0 0 pppoe-wan其中 Destination 为 0.0.0.0 的是默认路由,网关为 VPN 网关,意味着默认流量都经过 VPN,而以下的条目则把目的为国内的网段都指向了 ISP 提供的网关。至此 PPTP VPN 和 chnroutes 已经配置完毕。配置 VPN 断线自动重连a. 创建 /etc/config/pptp-vpn/status-check.shvim /etc/config/pptp-vpn/status-check.sh在 vim 中粘贴以下内容(此脚本检测 VPN 连接状态,并在断线后会断开 WAN 和 VPN 接口,10秒后重新连接 WAN,并在 30 秒后重连 VPN):代码如下:#!/bin/sh</p> <p>if [ -f "/tmp/vpn_status_check.lock" ] then exit 0 fi</p> <p>VPN_CONN=`ifconfig | grep pptp-vpn`</p> <p>if [ -z "$VPN_CONN" ] then touch /tmp/vpn_status_check.lock echo WAN_VPN_RECONNECT at: >> /tmp/vpn_status_check_reconn.log date >> /tmp/vpn_status_check_reconn.log</p> <p> ifdown vpn ifdown wan sleep 10 ifup wan sleep 30 ifdown vpn sleep 10 ifup vpn sleep 40 rm /tmp/vpn_status_check.lock</p> <p>else date > /tmp/vpn_status_check.log fi执行以下命令,设置权限为可执行:chmod a+x /etc/config/pptp-vpn/status-check.shb. 进入LuCI 的 System -> Scheduled Tasks 填入以下内容,并保存:*/1 * * * * /etc/config/pptp-vpn/status-check.sh以上实际上是编辑了 cron 配置,cron 每分钟运行检测 / 重连脚本,重启 cron:/etc/init.d/cron restartc. 静待几分钟,查看 /tmp 目录,应该能看到 vpn_oldgw 和 vpn_status_check.log 文件,查看 vpn_status_check.log 文件,可以看到最近一次检测 VPN 连接状态的时间。代码如下:root@FC_R0:/tmp# ls vpn* vpn_oldgw vpn_status_check.log root@FC_R0:/tmp# cat vpn_status_check.log Tue Jul 15 00:04:02 HKT 2014 root@FC_R0:/tmp#你可以在 LuCI 中断开 VPN 接口,在接下来的4-5分钟,观察 WAN 和 VPN 的重连情况。d. 分别 traceroute www.google.com 和 www.baidu.com ,观察第二跳的地址:代码如下:FL-MBP:~ fatlyz$ traceroute www.google.com | head -n 3 traceroute: Warning: www.google.com has multiple addresses; using 74.125.239.115 traceroute to www.google.com (74.125.239.115), 64 hops max, 52 byte packets fc_r0.lan (192.168.7.1) 2.161 ms 0.912 ms 0.895 ms 10.7.0.1 (10.7.0.1) 193.747 ms 187.789 ms 289.744 ms 23.92.24.2 (23.92.24.2) 259.323 ms 354.625 ms 408.535 ms代码如下:FL-MBP:~ fatlyz$ traceroute www.baidu.com | head -n 3 traceroute to www.a.shifen.com (180.76.3.151), 64 hops max, 52 byte packets 1 fc_r0.lan (192.168.7.1) 1.190 ms 0.984 ms 0.731 ms 2 58.111.43.1 (58.111.43.1) 20.616 ms 38.822 ms 18.484 ms 3 183.56.35.133 (183.56.35.133) 20.056 ms 52.353 ms 87.841 ms可以看出,已成功对国内外的目标地址进行了路由选择。至此,OpenWRT 路由的基本配置、PPTP VPN、chnroutes 和自动重连已经配置完成。
2023年02月18日
385 阅读
0 评论
0 点赞
2023-02-16
Docker部署 Mysql、redis、Rabbitmq、Vue、Java 项目
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。本文主要讲解如何在Linux环境下使用 Docker 部署前后端分离项目,其中涉及到使用 Docker 安装本人项目相关的一些环境 ,例如mysql、rabbitmq、redis,基于CenterOS7.0。Docker 环境安装1.安装 Docker 客户端# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务 sudo service docker start2.配置镜像加速器sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://sq2b0kv9.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker安装 PortainerPortainer 是一个轻量级 Web 端的 Docker 管理 UI,Portainer 够轻松地管理不同的 Docker 环境(Docker 主机或集群)。Portainer 的部署和使用十分简单。Portainer 可以部署为 Linux 容器或 Windows 本机容器,也支持其他平台。Portainer 允许您管理所有 Docker 资源(容器、映像、卷、网络等)!它与独立的 Docker 引擎和 Docker 集群模式兼容。1.安装# 拉取官方镜像 docker pull portainer/portainer # 运行镜像到容器 docker run -d -p 9000:9000\ --restart=always\ -v /var/run/docker.sock:/var/run/docker.sock\ -m 20M --oom-kill-disable --memory-swap=-1\ --name portainer\ portainer/portainer2.访问页面访问地址:http://localhost:9000,第一次打开需要设置用户名、密码,docker 模式我一般选择 Local 本机模式。通过此工具我们可以更加简便的对镜像和容器进行操作和管理。登录页 面板页 安装 mysql# docker search mysql 可通过此命令查看可用版本 # 拉取mysql镜像,默认会拉取最新版本,我这里加上版本号 docker pull mysql:8.0.0 # 查看镜像是否拉取成功 docker images # 在/home/docker/mysql目录下创建mysql挂载目录 mkdir {data,logs,conf} # 运行容器 docker run -d -p 3306:3306 -v /home/docker/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /home/docker/mysql/data:/var/lib/mysql -v /home/docker/mysql/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test mysql:8.0.0说明:--name:容器名-e:配置信息,此处配置 mysql 的 root 用户登陆密码-d:后台运行容器,保证在退出终端后容器继续运行-p:端口映射,此处映射 主机 3306 端口 到 容器的 3306 端口-v:挂载目录此处需要注意不要直接挂载容器中的 mysql 配置文件目录,可能会将容器内的配置文件目录清空。个人建议将容器中的 my.cnf 文件复制出来进行选择性的修改,再挂载 mysql.cnf 文件即可。docker cp :用于容器与主机之间的数据拷贝。# 语法 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- # 实例 docker cp 96f7f14e99ab:/etc/mysql/conf.d/mysqld.cnf /home/docker/mysql/my.cnf安装 redis因为 redis 默认配置只能够本地连接,不能进行远程访问,使用 Redis 客户端工具连接都会报错,因此需要手动挂载 redis 配置文件。# /home/docker/redis目录下新增挂载文件夹 mkdir {data,conf} # 下载最新版本的Redis镜像 docker pull redis # 新增redis配置文件 cd /home/docker/redis/conf touch redis.conf vim redis.conf添加以下内容#bind 127.0.0.1 protected-mode no appendonly yes requirepass 123456说明:bind 127.0.0.1 ,注释掉这部分,这是限制 redis 只能本地访问protected-mode:默认 yes,开启保护模式,限制为本地访问appendonly:redis 持久化(可选)requirepass:设置访问密码为 123456运行容器docker run --name myredis -p 6379:6379 -v /home/docker/redis/data:/data -v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf说明:--name:容器名称-p :表示将服务器的 6379(冒号前的 6379)端口映射到 docker 的 6379(冒号后的 6379)端口-d :表示以后台服务的形式运行 redis-v :挂载宿主机目录redis redis-server /etc/redis/redis.conf:表示运行 redis 服务器程序,并且指定运行时的配置文件经过以上步骤,便可以通过 redis 客户端工具进行连接,如果连接不上,检查安全组和服务器防火墙端口是否开放安装 rabbitmq# 拉取带图形化管理界面的镜像 docker pull rabbitmq:3.7.7-management # 根据下载的镜像创建和启动容器 docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9说明:-d:后台运行容器;--name:指定容器名;-p:指定服务运行的端口(5672:应用访问端口;15672:控制台 Web 端口号);-v:映射目录或文件;--hostname :主机名(RabbitMQ 的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);-e:指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)Rabbitmq 访问地址:http://localhost:15672 至此,基本的运行环境都安装完毕,下面就是关键的打包步骤了。Vue 前端项目打包将 dist 下的所有文件目录拷贝到 SpringBoot 后端项目的 resources\static 目录下,static 目录需要新建。如果你的项目中用到了 shiro 或者 spring security 等安全框架,需要对静态资源放行。以上配置完成后,先在本地运行,再用 maven 进行打包。将 jar 包上传到服务器后,就要开始制作自己的镜像了,首先在与 jar 包同目录下新建 Dockerfile 文件。# 新建Dockerfile文件 touch Dockerfile # 编写Dockerfile文件 vim Dockerfile加入以下内容# Docker image for springboot file run # VERSION 0.0.1 FROM java:8 # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD demo-01.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]执行 docker build -t [镜像名称] . ,至此镜像文件就制作完成了。docker images查看镜像是否存在。最后一步,创建并启动容器,docker run --name [容器名称] -d -p 80:8080 [镜像名]。
2023年02月16日
64 阅读
0 评论
0 点赞
2023-02-16
CentOS7离线安装Docker和卸载Docker步骤(亲测有效)
一、CentOS7离线安装 Docker 步骤1、docker 安装包下载地址https://download.docker.com/linux/static/stable/x86_64/2、将下载的 docker-18.06.3-ce.tgz 文件上传到 Centos7 服务器上(如上传到 /home/docker 目录下),并执行 tar 命令解压,如下图:tar -zxvf docker-18.06.3-ce.tgz3、将/home/docker 目录下解压出来的所有 docker 文件复制到 /usr/bin/ 目录下cp docker/* /usr/bin/4、将 docker 注册为 service,进入/etc/systemd/system/目录,并创建 docker.service 文件cd /etc/systemd/system/touch docker.service5、编辑 docker.service 文件,将以下内容复制到 docker.service 文件中注:以下内容中 --insecure-registry=192.168.3.10 此处改为你自己服务器 ipvim docker.service[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=192.168.3.10 ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target6、给 docker.service 文件添加执行权限chmod 777 /etc/systemd/system/docker.service7、重新加载配置文件注:每次修改 docker.service 这个文件时都要重新加载下。systemctl daemon-reload8、启动 Docker 服务systemctl start docker9、设置开机启动 Docker 服务systemctl enable docker.service10、验证 docker 是否启动成功查看 Docker 状态,显示 active(running)表示启动成功systemctl status docker查看 Docker 版本docker -v11、配置镜像加速器,默认是到国外拉取镜像速度慢,如下图:编辑 /etc/docker/目录下的 daemon.json 文件,将以下内容复制到 daemon.json 文件中vim /etc/docker/daemon.json{"registry-mirrors": ["http://hub-mirror.c.163.com"]}重启 docker,使其 daemon.json 文件配置生效service docker restart二、CentOS7 离线卸载Docker步骤1、删除服务取消开机自启systemctl disable docker取消注册文件rm -rf /etc/systemd/system/docker.service2、删除命令rm -rf /usr/bin/containerd rm -rf /usr/bin/containerd-shim rm -rf /usr/bin/ctr rm -rf /usr/bin/runc rm -rf /usr/bin/docker*3、删除配置rm -rf /etc/docker/4、删除镜像或容器rm -rf /var/lib/docker
2023年02月16日
75 阅读
0 评论
0 点赞
2023-02-16
Ubuntu18.04 安装 RabbitMQ (正确安装)
安装 erlang由于 rabbitMq 需要 erlang 语言的支持,在安装 rabbitMq 之前需要安装 erlangsudo apt-get install erlang-nox安装 Rabbitmq更新源sudo apt-get update安装sudo apt-get install rabbitmq-server启动、停止、重启、状态 rabbitMq 命令sudo rabbitmq-server start sudo rabbitmq-server stop sudo rabbitmq-server restart sudo rabbitmqctl status添加 admin,并赋予 administrator 权限添加 admin 用户,密码设置为 adminsudo rabbitmqctl add_user admin admin赋予权限sudo rabbitmqctl set_user_tags admin administrator赋予 virtual host 中所有资源的配置、写、读权限以便管理其中的资源sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'RabbitMQ GUID 使用1、官方提供的一个 web 管理工具(rabbitmq_management) 2、安装了 Rabbitmq 后,默认也安装了该管理工具,执行命令即可启动先定位到 rabbitmq 安装目录sudo rabbitmq-plugins enable rabbitmq_management浏览器访问 http://localhost:15672/ 使用刚刚创建的 admin 就可以登录,密码也为 admin
2023年02月16日
50 阅读
0 评论
0 点赞
2023-02-15
Linux 怎么防止 ssh 被暴力破解
SSH 是一种广泛使用的协议,用于安全地访问 Linux 服务器。大多数用户使用默认设置的 SSH 连接来连接到远程服务器。但是,不安全的默认配置也会带来各种安全风险。具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。尤其是如果您使用的是公共 IP 地址,则破解 root 密码要容易得多。因此,有必要了解 SSH 安全性。这是在 Linux 上保护 SSH 服务器连接的方法。1、禁用root用户登录为此,首先,禁用 root 用户的 SSH 访问并创建一个具有 root 权限的新用户。关闭 root 用户的服务器访问是一种防御策略,可以防止攻击者实现入侵系统的目标。例如,您可以创建一个名为 exampleroot 的用户,如下所示:useradd -m exampleroot passwd exampleroot usermod -aG sudo exampleroot以下是上述命令的简要说明:useradd 创建一个新用户,并且-m参数在您创建的用户的主目录下创建一个文件夹。passwd 命令用于为新用户分配密码。请记住,您分配给用户的密码应该很复杂且难以猜测。usermod -aG sudo 将新创建的用户添加到管理员组。在用户创建过程之后,需要对 sshd_config 文件进行一些更改。您可以在 /etc/ssh/sshd_config 找到此文件。使用任何文本编辑器打开文件并对其进行以下更改:# Authentication: #LoginGraceTime 2m PermitRootLogin no AllowUsers examplerootPermitRootLogin 行将阻止 root 用户使用 SSH 获得远程访问。在 AllowUsers 列表中包含 exampleroot 会向用户授予必要的权限。最后,使用以下命令重启 SSH 服务:sudo systemctl restart sshd2、更改默认端口默认的 SSH 连接端口是 22。当然,所有的攻击者都知道这一点,因此需要更改默认端口号以确保 SSH 安全。尽管攻击者可以通过 Nmap 扫描轻松找到新的端口号,但这里的目标是让攻击者的工作更加困难。要更改端口号,请打开 /etc/ssh/sshd_config 并对文件进行以下更改:Include /etc/ssh/sshd_config.d/*.confPort 22099在这一步之后,使用 sudo systemctl restart ssh 再次重启 SSH 服务。现在您可以使用刚刚定义的端口访问您的服务器。如果您使用的是防火墙,则还必须在此处进行必要的规则更改。在运行 netstat -tlpn 命令时,您可以看到您的 SSH 端口号已更改。3、禁止使用空白密码的用户访问在您的系统上可能有您不小心创建的没有密码的用户。要防止此类用户访问服务器,您可以将 sshd_config 文件中的 PermitEmptyPasswords 行值设置为 no 。PermitEmptyPasswords no4、限制登录/访问尝试默认情况下,您可以根据需要尝试多次输入密码来访问服务器。但是,攻击者可以利用此漏洞对服务器进行暴力破解。通过指定允许的密码尝试次数,您可以在尝试一定次数后自动终止SSH 连接。为此,请更改 sshd_config 文件中的 MaxAuthTries 值。MaxAuthTries 35、使用 SSH 版本 2SSH 的第二个版本发布是因为第一个版本中存在许多漏洞。默认情况下,您可以通过将 Protocol 参数添加到 sshd_config 文件来启用服务器使用第二个版本。这样,您未来的所有连接都将使用第二个版本的SSH。Include /etc/ssh/sshd_config.d/*.conf Protocol 26、关闭TCP端口转发和X11转发攻击者可以尝试通过 SSH 连接的端口转发来访问您的其他系统。为了防止这种情况,您可以在 sshd_config 文件中关闭 AllowTcpForwarding 和 X11Forwarding 功能。X11Forwarding no AllowTcpForwarding no7、使用 SSH 密钥连接连接到服务器的最安全方法之一是使用 SSH 密钥。使用 SSH 密钥时,无需密码即可访问服务器。另外,您可以通过更改 sshd_config 文件中与密码相关的参数来完全关闭对服务器的密码访问。创建 SSH 密钥时,有两个密钥: Public 和 Private 。公钥将上传到您要连接的服务器,而私钥则存储在您将用来建立连接的计算机上。在您的计算机上使用 ssh-keygen 命令创建 SSH 密钥。不要将 密码短语字段 留空并记住您在此处输入的密码。如果将其留空,您将只能使用 SSH 密钥文件访问它。但是,如果您设置了密码,则可以防止拥有密钥文件的攻击者访问它。例如,您可以使用以下命令创建 SSH 密钥:ssh-keygen8、SSH 连接的 IP 限制大多数情况下,防火墙使用自己的标准框架阻止访问,旨在保护服务器。但是,这并不总是足够的,您需要增加这种安全潜力。为此,请打开 /etc/hosts.allow 文件。通过对该文件进行的添加,您可以限制 SSH 权限,允许特定 IP 块,或输入单个 IP 并使用拒绝命令阻止所有剩余的 IP 地址。下面您将看到一些示例设置。完成这些之后,像往常一样重新启动 SSH 服务以保存更改。Linux 服务器安全的重要性 所有服务器管理员都应该考虑数据和数据安全问题。服务器安全是一个非常敏感的问题,因为攻击的主要焦点是 Web 服务器,它们几乎包含有关系统的所有信息。由于大多数服务器都在 Linux 基础架构上运行,因此熟悉 Linux 系统和服务器管理非常重要。SSH 安全只是保护服务器的方法之一。可以通过停止、阻挡或减缓攻击来最大程度地减少您受到的伤害。除了提供 SSH 安全性之外,您还可以实施许多不同的方法来保护您的 Linux 服务器。--- EOF ---
2023年02月15日
88 阅读
2 评论
1 点赞
1
...
4
5
6