首页
公共接口
每周Music
友链
Armour
微软太空望远镜
国际空间站实时位置
Search
1
RB2011升级固件,RB2011刷机
58 阅读
2
关于新栏目接口的说明
56 阅读
3
RouterOS配置OpenVPN客户端以及服务端
52 阅读
4
自己封装ESXI的驱动
46 阅读
5
CentOS同步时间
42 阅读
NAS
服务器
笔记记录
网络
Armour
EVE-NG
Space
Nginx
登录
Search
DKM
累计撰写
98
篇文章
累计收到
0
条评论
首页
栏目
NAS
服务器
笔记记录
网络
Armour
EVE-NG
Space
Nginx
页面
公共接口
每周Music
友链
Armour
微软太空望远镜
国际空间站实时位置
搜索到
98
篇与
dkm
的结果
2024-12-05
MariaDB 10.4后面的版本修改root允许登录的主机范围
UPDATE mysql.global_priv SET Host='%' WHERE User='root';
2024年12月05日
1 阅读
0 评论
0 点赞
2024-11-03
用两个树莓派2B做一个协议拦截服务
从闲鱼上收了20片开发板,其中两片是树莓派2B+,其余的分别是11片全志H3,7片全志A10,总共花了不到300块钱。从树莓派官网下载工具 ,这里跳转 下载 本环境使用的是Ubuntu 22.04,(因为只能装这个,其他的都装不了)-----省略部分内容首先需要安装软件#安装前需要删除apt锁定文件,不删除将无法安装下面的所有组件 #安装并启动Nginx服务 sudo apt-get install nginx sudo systemctl start nginx sudo systemctl enable nginx #ufw放行443和80端口用于 sudo ufw allow 80/tcp sudo ufw allow 443/tcp #创建Nginx需要使用的文件夹 cd /var/www/html sudo mkdir img static sudo mkdir -p static/js static/img Nginx服务的配置文件,需要更改的地方Nginx需要自己定义的部分 server { listen 80; listen 443 ssl; server_name _; #SSL配置部分,如果不需要则自动将上面的监听443端口注释或者删除 location / { index index.html; root /var/www/html; } } 下面开始配置DNS服务器 sudo snap install btop #下面是需要的部分端口,53是DNS服务器需要用到的端口 sudo ufw allow 53/tcp sudo ufw allow 53/udp sudo ufw allow 8080/tcp sudo ufw allow 3000/tcp 打开IP:端口去配置Adg的初始配置直接打开到 设置-DNS设置设置上游DNS服务器,这里推荐下面几个服务器 https://1.12.12.12/dns-query https://doh.pub/dns-query https://doh-pure.onedns.net/dns-query (不要设置国外的DoH服务器,因为设置了也不生效)然后勾选下面的并行请求,并行请求是找当前最快的DNS,因为要考虑到不同场景下的不同DNS服务器请求反应速度是不一样的,需要考虑到这一点,另外建议最好使用纯IP地址的DoH服务器,尽量不要使用域名访问的DoH DNS服务器然后下面设置几个后备DNS服务器的地址,也就是传统的IP地址DNS服务器 223.5.5.5 //alibaba 223.6.6.6 //alibaba 1.1.1.1 //Cloudflare 8.8.8.8 //Google.HK 8.8.4.4 //Google.HK.BAK 114.114.114.114 //114DNS 218.4.4.4 //ChinaNet.JS.SZ.MAN.163BK 218.2.2.2 //ChinaNet.JS.SZ.MAN.163BK.BAK 上面的是我设置的备用DNS服务器,这里需要酌情选择跳转网址: 国内DNS服务器 下面设置屏蔽规则具体的设置方法Adg的拦截使用方法 设置强制指定这个DNS服务器下面以RouterOS为设置对象#在DHCP服务器里面设置 /ip dhcp-server network add address=内网IP dns-server=DNS服务器 gateway=DNS服务器地址 netmask=掩码 #配置强制指定到本地的DNS服务器 #配置记得需要加一条特殊的 /ip firewall nat add action=redirect chain=dstnat comment=dns_UDP/MAIN_NET dst-port=53 protocol=udp src-address=\ !本地DNS服务器地址 to-ports=53 add action=redirect chain=dstnat comment=dns_TCP/MAIN_NET dst-port=53 protocol=tcp src-address=\ !本地DNS服务器地址 to-ports=53 注意,上面的感叹号不要删掉,这个感叹号是标记除了DNS服务器的IP地址,其他的IP地址请求DNS全部被重定向到路由器上,如果不加就是默认只重定向DNS服务器的DNS请求,如果不填这个地址,DNS服务器的缺省查找会出现查询失败的可能性配置路由器的DNS服务器 /ip dns set allow-remote-requests=yes cache-max-ttl=1d cache-size=8192KiB servers=本地DNS服务器地址,1.1.1.1,8.8.8.8 上面可以只填一个本地的DNS服务器,但是不能不填DNS。
2024年11月03日
0 阅读
0 评论
0 点赞
2024-07-17
利用ovpn隧道配合EoIP做透L2协议
首先是配置OpenVPN的链路,此处省略,并配置静态路由配置静态路由后,假设R1的IP地址是172.16.80.1,R2的IP地址是192.168.31.1这两端路由器都可以相互ping通,下面设置EoIP链路的信息R1的配置 /interface eoip add name=eoip-tunnel1 remote-address=192.168.31.1 tunnel-id=1 R2的配置 /interface eoip add name=eoip-tunnel1 remote-address=172.16.80.1 tunnel-id=1 简单讲解: EoIP配置相较简单,多数情况下是在内网内的L2协议透传使用较多,实际可以理解为 用L3协议去承载L2协议,MTU限制为1450,与传统的L2以太网有区别。识别链路隧道的编号使用的是Tunnel-id字段来识别,可隔离相互间的EoIP隧道。如果有VLAN则自动将EoIP链路的接口设置为tagged all,需要添加进bridge,该bridge下的所有VLAN与对端EoIP添加的bridge下相同的VLAN会通信,不同的默认不通
2024年07月17日
5 阅读
0 评论
0 点赞
2024-05-24
MikroTik封禁某个特定软件或者特定网站的服务并重定向到禁止的页面
很久没更新MikroTik的技术文章了,这次更新一个封禁网站以及特定软件服务的方法,HTTP与HTTPS两种协议均可以正常封禁并重定向,稍后放出方法。此方法需要配合一台HTTP服务器(理论上可以使用MikroTik自带的HTTP服务器),推荐使用Windows Server 2012及以上版本安装IIS 10.0(其他的也可以,IIS操作比较简单)前置配置:IIS服务器的IP地址为100.64.1.5DNS服务器:218.4.4.4,223.6.6.6,8.8.8.8MikroTik端的配置开启DNS缓存以及设置路由器端的DNS服务器 /ip dns set allow-remote-requests=yes cache-size=4096KiB servers=218.4.4.4,223.6.6.6,8.8.8.8 #开启DNS53端口挟持(注意这个非常重要) /ip firewall nat add action=redirect chain=dstnat comment=dns_UDP/MAIN_NET dst-port=53 protocol=udp to-ports=53 add action=redirect chain=dstnat comment=dns_TCP/MAIN_NET dst-port=53 protocol=tcp to-ports=53 #配置硬件加速(如果不是专用硬件区别不大) /ip firewall filter add action=fasttrack-connection chain=forward dst-port=53 hw-offload=yes protocol=tcp add action=fasttrack-connection chain=forward dst-port=53 hw-offload=yes protocol=udp 下面一步比较重要,需要封禁DoT服务,很多软件内置了DoT(Domain over TLS)不封禁可能会出现部分软件正常工作无法控制协议。 /ip firewall filter add action=drop chain=forward dst-port=853 protocol=tcp add action=drop chain=forward dst-port=853 protocol=udp到这里没有完,这里需要讲一下具体实现的原理,MikroTik里面有一个静态DNS,这个静态DNS可以是domain静态DNS也可以是regexp(正则表达式)静态DNS,说到这里大概都能想到一种原理就是用的SNI(Server Name Indication),TLS下的Relay Hello数据包,这里就带过一下不讲;DNS请求的53端口,数据包没有加密过,可以读取DNS数据包内请求的Domain,正则表达式是直接读取请求的Domain是否包含设置的regexp的字段,如果存在那就直接DNS Static解析到100.64.1.5这台服务器上,由这台服务器返回网页被封禁的页面。下面来着重讲一下如何获取regexp的值;例如:我需要封禁2345,到百度搜索一下2345这个公司所有的网站 你会发现他所有的域名都携带xxx.2345.xxx,那么这个公司的大部分服务就是2345这个为重点字段那我在MikroTik上配置Static DNS的条目 /ip dns static add address=100.64.1.5 regexp=2345 ttl=5s上面的ttl为生效时间,ttl=5s就是5秒后自动生效下面转到Windows Server的IIS上操作,安装IIS我就不演示了,因为默认安装的IIS就可以运行我需要的服务,不需要安装扩展的CGI下面我给一段封禁网页的HTML代码,并附上下载通道<head><title>网站已禁止访问</title></head> <img src=".\img\pic1.jpg" alt="给你个图片看看" /> <p>这个网站被我吃了,现在不允许打开</p>下载文件 创建一个站点,这里设置你的目录并设置一个连接的用户,不然文件IIS服务器没有权限去访问。 下面需要配置这个站点的IP地址以及端口,因为上面需要重定向到这个服务器上,不然是无法显示网站被禁止的页面,主机名不要填写,留空即可。 使用keymanager签发一个证书,然后导出成pfx格式,这个证书只是为了开启IIS监听443端口,没有实际使用的用途,然后到Windows Server上直接安装这个证书打开IIS的编辑绑定的设置页面 现在这个IIS的443端口被开启监听了,下一步操作就是设置这个站点的404页面,由于大部分请求网页肯定都是带URL请求的网页,如果在IIS上的话那肯定会报错404,要解决这个方法那就直接把404页面解决了就行,怎么解决呢,那就把上面的那个HTML文件设置成404页面啊 现在这个网站实际上是可以工作了,下面测试一下MikroTik的DNS挟持是不是正常工作,我这里试着请求一下2345的网站(使用nslookup)#不指定DNS服务器默认请求 ping www.2345.com #指定DNS服务器定向请求 nslookup www.2345.com 223.5.5.5查看结果 因为ipv6优先级比较高,因为没有配置ipv6的防火墙配置,所以实际上ipv6没限制,这里不能直接不指定DNS服务器nslookup,但是解决方法也很简单,这种方法原封不动在路由器ipv6 firewall上相同方法配置一下即可,区别相差不大。现在打开网页测试一下是不是被封禁了 测试一下带URL的网页 这个SSL证书显示不安全是因为这个证书是自签发证书,而且证书没有绑定任何域名;解释一下这个HTTPS拦截的原理,以及显示错误页的服务器为什么要设置HTTPS监听;第一点,现在多数网页都是用的HTTPS,如果被挟持到本地的服务器上必须要求本地服务器支持HTTPS协议以及对应的端口,IIS配置HTTPS主要就是开HTTPS的服务端口;第二点,HTTPS请求后对于服务器来讲是使用2345的域名直接去访问这个服务器上的资源,不需要解析HTTPS协议即可,也不需要使用SNI(实现比较复杂,也可以实现)Windows11支持DoH(Domain over HTTPS),想要封禁就直接在DNS Static里面填入DoH服务器的域名(因为DoH服务器也需要经过DNS请求获取到DoH服务器的IP地址),不能直接封禁,因为DoH使用的是443端口,封禁会造成其他网站无法正常访问常用的DoH服务器地址 点我跳转
2024年05月24日
15 阅读
0 评论
0 点赞
2023-09-18
封禁加密DNS协议的方法
DoTDoT协议使用的是TLS1.2 TCP 853端口,所以封禁该协议就通过防火墙禁止出站目标端口为853 TCP/UDPMikroTik RouterOS防火墙命令(RouterOS全系列通用) /ip firewall filter add action=drop chin=output dst-port=53 protocol=udp /ip firewall filter add action=drop chin=output dst-port=53 protocol=tcpDoHDoH的全称是DNS over HTTPS,看到HTTPS的意思就是,该协议使用443端口,也就是说这里不能使用上面的方法封禁;需要封禁就要开启DNS缓存和配置DNS挟持,这里有现成的文章DNS挟持 在静态DNS里面添加DoH的域名,让DNS over HTTPS的HTTPS无法实现(不需要封禁CDN)DoQ目前QUIC协议未定为标准,大多数QUIC协议的部署端口是UDP 443,所以这里暂定封禁方法为封禁UDP的443端口,目前大多数Web服务器都不支持QUIC协议,仅Caddy支持QUIC协议。但是在DoQ协议手册得知,DoQ协议端口可以是自定义端口,没有标明默认端口号;暂定无法彻底封禁在MikroTik上封禁DNS over QUIC /ip firewall filter add action=drop chin=output dst-port=443 protocol=udp这里请勿封禁443 TCP,如果封禁了所有网站将无法打开
2023年09月18日
23 阅读
0 评论
0 点赞
2023-09-08
RouterOS配置OpenVPN客户端以及服务端
MikroTik RouterOS配置服务端RouterOS版本7.10{card-describe title="卡片描述"}此处建议使用MikroTik官方的硬件,x86的设备没有Cloud功能,如果是专线固定IP地址则不需要考虑{/card-describe}创建CA证书system->Certificates点击+号下面是需要填写的参数参数名参数NameCACommon NameCASubject Alt. NameIP截图示意 然后到第二页Key Usage,勾上几个参数 点击右侧Apply,然后再点击sign,点击sign之后第一行选择刚才创建的证书,第二行留空,第三行填写路由器的IP地址,如下图所示 点击start开始签名创建服务端的证书参数如下参数名参数NameServerCommon NameServerSubject Alt. NameIPKey Usage选择下图几个参数 点击Apply,然后再点击SignSign页面选择如下 然后签名完了之后需要打开证书,勾选此项参数(Trusted参数) 创建客户端证书创建基本步骤如上基本一致,Key Usage参数仅需要勾选一个tls client 如图所示 点击右侧Apply,再点击Sign,签名方法与之前服务器证书方法一致签名后需要和服务端证书一样,需要勾选Trusted参数配置OpenVPN服务端配置前需要导出CA证书和Client客户端的证书双击证书,点击Export 客户端证书需要自己创建密码,导出后会生成三个文件,CA证书的crt文件,Client客户端的crt文件和Client客户端的key文件配置OpenVPN服务端参数PPP->Interface->OpenVPN Servertips:部分区域的BAS限制OpenVPN的1194端口,所以这里改成自定义端口(我这里使用的是9999端口)详细配置如下图所示,注意:这里的配置参数客户端要与这一致,否则客户端无法正常连接服务端 创建OpenVPN用户PPP->Secrt 自此处,服务端配置已完成,现在配置客户端在服务端那台路由器上的Files处下载客户端证书和密钥以及CA证书上传到OpenVPN客户端下的Files处,打开System->Certificates->Import导入CA证书以及客户端证书和客户端密钥(客户端证书和密钥需要分两次导入)导入CA证书(如果导出的时候上了密码需要填写密码,并且再导入CA的密钥文件) 导入客户端证书(如果导出的时候上了密码需要填写密码,并且导入客户端的密钥文件) 现在准备连接OpenVPN服务器创建OpenVPN Client接口 配置OpenVPN的连接信息,必须与之前的服务端参数一致(加密协议可以选择已使用的协议) 最后点击Apply(如果配置正确,点击Apply之后自动连接) 查看IP地址
2023年09月08日
52 阅读
0 评论
0 点赞
2023-09-02
使用MikroTik RouterOS做异地组网(SDN)
基于MikroTik RouterOS的软件定义网络
2023年09月02日
41 阅读
0 评论
0 点赞
2023-08-12
Cisco三层交换机配置DHCP服务器
声明:这里三层交换机上的DHCP服务器还是路由器上的DHCP服务器均适用此配置方法配置思科三层交换机的命令 Switch>en Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#ip dhcp pool test Switch(dhcp-config)#network 192.168.10.0 255.255.255.0 Switch(dhcp-config)#default-router 192.168.10.1 Switch(dhcp-config)#dns-server 8.8.8.8 Switch(dhcp-config)#exit Switch(config)#int vlan 1 Switch(config-if)#ip add 192.168.10.1 255.255.255.0 Switch(config-if)#no sh Switch(config-if)#end Switch#w配置三层交换机的过程(GIF) DHCP协议的工作流程,以及获取IP地址的数据包分析 Cisco pkt文件下载下载思科模拟器文件
2023年08月12日
22 阅读
0 评论
1 点赞
2023-07-05
ONU、ONT、ODN、OLT、OTN的区别
ONU、ONT这两个都属于用户端设备,ONT是ONU的一种,也包含在ONU内,ONT是光终端用户,应该说最后一端的上网设备;通俗一点就是用户不一定是通过ONU直接接入的,中间可能还有其他的方式传输例如FTTB(光纤到楼)。ONU是指光网络单元,一般可以指用户端例如FTTH(光纤到户);ONT是ONU的组成部分ODNODN是从OLT处到用户端ONU或者ONT之间的设备,这类设备属于物理无源设备(无源的意思就是不需要额外供电),最主要的设备是分光器,干线光缆组成。OLTOLT是光线路终端或称运营商局端设备,是用于接入承载网的重要设备;OLT可以批量管理下发用户端的ONU设备参数,以及对设备进行吞吐量限制,物理隔离开各个用户端;OTNOTN是光传送网,是一种波分复用技术为基础的下一代传送网技术。OTN的可扩容能力强,交叉容量可扩容到几十甚至上百Tbps的容量。支持异步映射,拥有SDH以及WDM两种技术的优点。ONU和OLT之间的区别ONU下挂在OLT的PON口下,一个PON口能接多个ONU用户端EPON 最大32个ONUXE-PON(10G EPON) 最大64个ONUGPON 实际数量未知XG-PON(10G GPON) 实际数量未知XGS-PON 目前未知(Tip2:GPON,XG-PON,XGS-PON三种协议可以共存)(Tip2:EPON,XE-PON协议可以共存)以当前最新的华为OLT为例XG-PON业务板,单PON口最大可开512户XG-PON以及256户GPON,共计768户(据现不可靠消息,目前华为OLT最新的OLT业务板,单PON口可开1024户XG-PON以及384户GPON,共计1408户单PON口)OLT和ONU之间的主要关系是,OLT可派发传单到ONU,ONU照着传单完成OLT的要求,从而实现用户功能。例:某地OLT下发用户PPPoE的VLAN ID是48,IPTV是110,VoIP是118,MPLS业务是122如果使用人工去人为的手动调整会大大增加维护成本,那么我们可以这样,通过在局端设备上设置模板,我只要从局端下发一个配置文件到ONU上自动设置参数就行,免去了手动配置的环节,大大提升了效率
2023年07月05日
19 阅读
0 评论
0 点赞
2023-06-22
各个国家5GHz频段支持情况
暂无简介
2023年06月22日
7 阅读
0 评论
0 点赞
2023-06-22
POE协议详解
POE协议分为,802.3af 802.3at 802.3bt(从供电功率小到大排序) 功率对应为:12.9Watt 30Watt 90Watt一般情况下PoE的实施条件为两端,这里以AB为例,A端为POE供电端(PSE;Power Sourcing Equipment);B端为POE受电设备(PD;PowerDevice)常见的PSE设备有:标准POE供电器、POE交换机、路由器POE交换板卡、带POE功能AC控制器、带POE功能NVR常见的PD设备有:POE供电无线AP、PoE中继器、标准POE分离器、POE监控摄像头、POE供电小型交换机、POE供电小型路由器等标准的超五类网线为八根线(四对双绞线)POE的工作过程(仅限标准POE规范或国标POE规范)供电前PSE设备检测对端设备,检测方法为用过一个低电压的电流去测试对端设备是不是支持标准POE当经过上方检测时,PSE设备将输出48v直流电到对端设备,在输出的过程中会逐渐提升功率等级,在提升功率的过程中,对端设备会返回一个功率等级给PSE设备,PSE设备在接受到功率等级后会自动调整功率限制对对端设备供电。如果设备没有回应功率等级,那么PSE仅输出最低等级功率给对端设备。如果PSE设备在第一步就没有检测到对端是PD设备,那么PSE设备将不会给PD设备供电,仅提供传输信号使用(针对标准PSE设备以及标准PD设备)PSE会实时检测对端设备端口,如果出现超载、短路等情况,PSE设备将会停止向PD设备供电,该端口进入保护模式标准PSE设备的直流输出电压在44-57v之间(一般为48v)工作分级为Class 0~3Class0设备需要的最高工作功率为0~12.95WattClass1设备需要的最高工作功率为0~3.84WattClass2设备需要的工作功率介于3.85W~6.49WattClass3设备的功率范围则介于6.5~12.95Watt802.3at协议输出电压缺省值为50v,最大工作功率为30Watt工作分级为Class4Class4设备可用功率为25.5Watt802.3bt协议输出电压缺省值为50v,最大工作功率为90Watt工作分级为Class5~8Class5设备可用功率为40WattClass6设备可用功率为51WattClass7设备可用功率为62WattClass8设备可用功率为71Watt802.3BT汇总表 Tips:从上表可知,802.3BT向下兼容802.3AF以及802.3AT标准协议设备支持POE协议的网线(没错,对应的协议还需要网线的支持)
2023年06月22日
6 阅读
0 评论
0 点赞
2023-06-20
PHP:/usr/bin/env: php: No such file or directory
遇到类似问题,例如:/usr/bin/env: php: No such file or directory找不到 php 的执行文件,原因是脚本文件 env 会通过 $PATH 所指定的路径去寻找 php 的可执行文件解决方法首先寻找php可执行文件存放的位置 find / -name php 然后通过查找出的文件绝对位置/绝对位置/php -v如果有返回PHP版本,那么就是这个PHP可执行文件存放的位置创建软连接,用于对应CLI直接输入php -v获取PHP版本信息ln -s /绝对路径/php /usr/local/bin/php测试php -v如果返回的是PHP版本,那么这个操作就对了
2023年06月20日
9 阅读
0 评论
0 点赞
2023-06-13
Nginx不能正常反向代理目标网站
很多情况下会遇到反向代理目标网站,由于目标网站的设置,反向代理不成功,需要在配置文件中间写入以下参数设置自定义Host以及传递真实客户端IP地址到服务器Nginx的虚拟服务器功能是通过虚拟主机的Host名称区分网站与服务的,所以会将网站与虚拟Host进行绑定,通过请求的Host区分访问的是哪个网站,当反向代理的站点不设置自定义Host,那么这个Nginx服务器反向代理的时候是传递的客户端请求反向代理服务器的Host到被反向代理的网站;又因为被反向代理的服务器没有这个主机名,所以会造成网站无法正常访问;因此需要在Nginx内设置一个自定义Host,在访问到这个反向代理的Nginx虚拟服务器时,会把传递到被代理网站的Host名称改为自定义的Host名称,从而实现不同虚拟主机名访问同一个网站Nginx还有一个重要的参数就是请求IP地址,当服务器不传递客户端真实IP地址时,那么所有的客户端请求反向代理的服务器时,对于被代理网站来讲,所有客户端请求的IP地址都为反向代理服务器的IP地址,不为客户端IP地址;假设服务器设置单IP地址访问数量限制时,反向代理服务器在高并发访问的情况下被代理网站服务器限制访问,或者禁用访问权限,导致反向代理服务器无法正常访问。配置文件写法 server { listen 80; server_name virtual_machine_name; location / { proxy_pass proxy_web_pass; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host proxy_virtual_name; } }
2023年06月13日
17 阅读
0 评论
0 点赞
2023-06-13
常用DNS服务器与DNS安全
栏目一:常规DNS服务器地址格式:主DNS,备DNS国内 ipv4 DNS阿里云DNS服务器 223.5.5.5,223.6.6.6腾讯云DNS服务器 119.29.29.29,182.254.116.116清华大学公共DNS服务器 101.6.6.6CNNIC(中国国家互联网中心) 1.2.4.8,210.2.4.8百度云DNS 180.76.76.76江苏电信DNS 218.4.4.4,218.2.2.2国内 ipv6 DNS阿里云DNS服务器 2400:3200::1,2400:3200:baba::1腾讯云DNS服务器 2402:4e00::清华大学公共DNS服务器 2001:da8::666CNNIC(中国国家互联网中心) 2001:dc7:1000::1百度云DNS 2400:da00::6666中国电信DNS 240e:4c:4008::1中国移动DNS 2409:8088::a,2409:8088::b国外 DNS服务器格式:主ipv4,备ipv4 | 主ipv6,备ipv6CloudFlare DNS服务器 1.1.1.1,1.0.0.1 | 2606:4700:4700::1111,2606:4700:4700::1001Google DNS服务器 8.8.8.8,8.8.4.4 | 2001:4860:4860::8888,2001:4860:4860::8844IBM Quad9 DNS服务器 9.9.9.9,149.112.112.112 | 2620:fe::fe,2620:fe::9Cisco OpenDNS 服务器 208.67.222.222,208.67.220.220 | 2620:119:35::35,2620:119:53::53AdGuard DNS服务器 94.140.14.14,94.140.15.15 | 2a10:50c0::ad1:ff,2a10:50c0::ad2:ff栏目二:加密DNS服务器国内 加密DNS服务器格式:DoH服务器 || DoT服务器1.阿里云加密DNS服务器 https://dns.alidns.com/dns-query || dns.alidns.com2.腾讯云加密DNS服务器 https://doh.pub/dns-query || dot.pub3.360加密DNS服务器 https://doh.360.cn || dot.360.cn4.清华大学加密DNS服务器 https://101.6.6.6:8443/dns-query国外 加密DNS服务器格式:DoH服务器 || DoT服务器Google 加密DNS服务器 https://dns.google/dns-query || dns.googleCloudFlare 加密DNS服务器1 https://cloudflare-dns.com/dns-query || 1dot1dot1dot1.cloudflare-dns.comCloudFlare 加密DNS服务器2 https://1.1.1.1/dns-query || one.one.one.oneCloudFlare 加密DNS服务器3 https://1.0.0.1/dns-queryIBM Quad9 加密DNS服务器 https://dns.quad9.net/dns-query || dns.quad9.netCisco OpenDNS 服务器 https://doh.opendns.com/dns-queryCisco OpenDNS 家庭版DNS服务器 https://doh.familyshield.opendns.com/dns-query老版本的DNS服务器可以直接使用扩展ACL,或防火墙iptables,firewalld屏蔽对应服务器53端口加密DNS服务器可使用DNS污染的方式或者DNS强制挟持的方式阻止使用可用方法跳转链接: https://dkm.draknightm.top/index.php/archives/107/
2023年06月13日
20 阅读
0 评论
0 点赞
2023-04-23
在Oracle Linux9上安装LNMP
Oracle Linux现在是CentOS的唯一替代者,也是唯一一个能确实对标CentOS的一款RHEL发行版。本人网站集群组近期已经将多台服务器更新至Oracle Linux 9.1,故将Oracle Linux 9下LNMP的配置过程写出。预先环境准备:需要安装的软件:PHP7.4 MariaDB10.5 Nginx1.20目前数据库建议全部用MariaDB,不建议MySQL;配置PHP安装需要的部分源: yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-9.rpm yum -y install epel-release yum makecache直接安装PHP7.4和对应的部分组件,并启动服务 dnf -y install gcc gcc-c++ dnf -y install php74 dnf -y install php php-curl php-gd php-intl php-json php-ldap php-mbstring php-mysqlnd php-xml php-zip php-opcache systemctl start php-fpm systemctl enable php-fpm 安装MariaDB dnf -y install mariadb-server systemctl start mariadb && systemctl enable mariadb #初始化数据库 mysql_secure_installation <-----参数全部默认 #创建需要的数据库 mysql -uroot MariaDB> CREATE DATABASE <your database name> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; MariaDB> GRANT ALL ON <your database name>.* TO 'ueser_name'@'<server id>' IDENTIFIED BY '<your password>'; MariaDB> SHOW DATABSES; MariaDB> EXIT;安装Nginx这里安装Nginx只需要Oracle Linux自带的epel源即可 dnf -y install nginx systemctl start nginx && systemctl enable nginx #PHP扩展其实已经在Nginx里面配置好了,在Nginx的配置文件路径是 /etc/nginx/conf.d/php-fpm.conf #默认的PHP pass是http://php-fpm 防火墙放行一些端口 firewall-cmd --add-port=8080/tcp --zone=public --permanent firewall-cmd --add-port=8443/ycp --zone=public --permanent firewall-cmd --reload关闭SELinux cd /etc/selinux nano config #将中间enc开头的参数改成disable,Ctrl+O 回车保存 Ctrl+X退出 #重启 rebootOracle Linux 9下面的LNMP配置结束
2023年04月23日
8 阅读
0 评论
0 点赞
2023-04-19
自己封装ESXI的驱动
难得写了一个关于ESXI的文章,我个人是用Proxmox VE的,只是在TG群里看见有人问ESXI有没有打包好驱动的ESXI镜像文件,有人直接在群里要价100块钱发镜像文件,我看的很不爽;看了一眼官方的文档,大致知道了ESXI是怎么打包驱动的。本文讲的是如何打包驱动到ESXI 8.0,所以需要VMware-PowerCLI-13,其他的版本在打包的时候会报错,所以这里提供PowerCLI-13的下载地址-> VMware-PowerCLI-13.0.0下载链接 <-下载完了之后解压到C:Programe FilesWindowsPowerShellModules 需要管理员身份解压到那管理员身份打开PowerShell #输入下面的参数以加载PowerShell库 Set-ExecutionPolicy RemoteSigned Import-Module VMware.PowerCLI Set-PowerCLIConfiguration -Scope AllUsers -ParticipateInCeip $false -InvalidCertificateAction Ignore输完之后关闭PowerShell安装Python 3.7.9Python 3.7.9下载地址-> 下载Python-3.7.9 For Windows <-安装Python3.7.9之后打开PowerShell,输入Python查看是否安装成功 关闭PowerShell因为PowerShell只有在重新加载的时候才会加载已安装的库文件再次重新打开PowerShell(管理员)这次下载ESXI的打包工具->ESXI打包脚本<- 解压GitHub上下载的ESXI打包脚本到任意目录;我这里解压到D盘ESXI下(E:/ESXI)在PowerShell中间指定Python的路径 #书名号里面的内容改成你的用户名 Set-PowerCLIConfiguration -PythonPath C:\Users\《你的用户名》\AppData\Local\Programs\Python\Python37\python.exe -Scope User 再次打开PowerShell(管理员) cd D:\ESXI #下载ESXI文件包,v80表示的是ESXI8.0的意思 .\ESXi-Customizer-PS.ps1 -v80 -ozip -outDir .\ 下载之后不要解压,复制到D:ESXI内,在ESXI内创建drivers文件夹(可以自定义,自定义需要修改下面的参数)关闭PowerShell打开驱动网站 ->驱动网站<- 找到NIC驱动 找到你要的驱动,点进去之后滚到最下面 点击第二个,第二个下载的压缩包内有我们需要的二进制文件解压到存放的drivers文件夹内(务必细化分开,即一个驱动一个文件夹)再次打开PowerShell(管理员),输入下面的命令 #进入ESXI的打包文件所在地 cd D:\ESXI #drivers文件夹的位置需要相对路径,outdir .\的意思就是在本文件夹内生成iso #-izip的意思就是导入zip压缩文件 -pkgdir的意思就是指定驱动目录 .\ESXi-Customizer-PS.ps1 -v80 -izip .\ESXi-8.0sb-21203431-standard.zip -pkgDir .\drivers\ -outDir .\ 下面只需要静静等待打包完成(END)
2023年04月19日
46 阅读
0 评论
0 点赞
2023-04-02
关于新栏目接口的说明
新栏目接口主要提供地区IP地址库接口为主,其他工具接口为辅;新版块接口代码不开源,获取方式不开源,目前没有接口调用次数限制,可在法律允许范围内使用;本接口不收取任何费用以及接口调用权限,故本接口不保证高并发量下的可持续服务性,望悉知!接口地址: 跳转
2023年04月02日
56 阅读
0 评论
0 点赞
2023-04-01
Windows共享打印机报错0x00000709解决方法
2021年九月份的一个Windows更新KB5005565补丁和固化补丁KB5006667导致的问题,此问题无法通过其他手段解决,固化之后这个补丁均不可卸载,目前可解决的方法有多种,但不包含卸载补丁更新和重启打印机服务的操作,这两种方法均无效;解决方式一:客户端与服务器都更新最新的Windows版本,以解决此类报错;或者服务器与客户机降级Windows版本,不更新补丁;本补丁需要双端都存在或者双端都不存在。解决方式二:降级补丁,通过脚本降级Windows已更新的补丁包,这里我放出一个用于降级补丁包的文件;本文件为未更新补丁包系统内获取,非篡改文件,悉知,谢谢~文件截图 使用方法为管理员身份启动脚本,并且dll文件存在的情况下以倒退补丁注意:服务端和客户端都必须运行一次这个脚本,如果你不知道是那一端的问题,那就客户端和服务端都安装一次(Windows10以下版本不需要倒退版本)文件下载地址:备注:修复专业工作站版使用专业版修复
2023年04月01日
7 阅读
0 评论
0 点赞
2023-02-27
记一次抓取PPPoE抓取账号密码
常见的PPPoE链路认证的上传数据包参数是不经过加密的,可以通过Wireshark抓包获得。需要准备的环境:MikroTik VMware虚拟机版(本文来源:ROSABC.com)下载以及Wireshark抓包软件抓包前需要开启PPPoE服务器,不开启PPPoE客户端无法通过PPPoE发现(LCP),无法抓包,原因是因为公司要换路由器,之前的路由器不是我配置的,公司也没有路由器管理密码,密码别人设置的,目前只能通过这种手段自己抓取参数MikroTik开启PPPoE服务器: /interface pppoe-server server add authentication=pap disabled=no interface=ether1 service-name=test-server #配置PPPoE服务器配置完成之后把需要抓取PPPoE数据包的路由器WAN接到你开虚拟机的电脑上,打开Wireshark软件,选择以太网,准备抓取PPPoE参数给路由器通电,将Wireshark的筛选栏目填入ppp参数抓取结果
2023年02月27日
26 阅读
0 评论
0 点赞
2023-02-26
MikroTik配置DNS挟持
MikroTik配置DNS挟持不需要借助其他的插件就可做到挟持功能,在配置前需要自行了解一下iptables的功能。配置MikroTik的防火墙挟持(本地网络访问53端口的请求全部挟持到本地) /ip firewall nat add action=masquerade chain=srcnat disabled=no add action=redirect chain=dstnat comment=dns_TCP disabled=no dst-port=53 \ protocol=tcp to-ports=53 add action=redirect chain=dstnat comment=dns_TCP disabled=no dst-port=53 \ protocol=udp to-ports=53 #上方为强制挟持流量到本机的53端口,并配置NAT上网 /ip firewall filter add chain=forward protocol=tcp dst-port=53 action=fasttrack-connection /ip firewall filter add chain=forward protocol=udp dst-port=53 action=fasttrack-connection #上方命令需要用MikroTik 6.x以上版本使用,ROS 5.x版本无法使用;作用是配置Fasttrack绕过队列。 配置完之后开启DNS服务 /ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=2048KiB \ max-udp-packet-size=4096 servers=\ 223.5.5.5,223.6.6.6,8.8.8.8,8.8.4.4,1.1.1.1,1.0.0.1 #开启DNS服务器并配置DNS服务器缓存,设置缓存大小 配置需要屏蔽的域名 在客户机上测试DNS是不是被污染了 批注,如果使用了360安全浏览器无法屏蔽,360安全浏览器会使用内置DoH服务器去请求正确的服务器地址;固需要在DNS static里面屏蔽360doh和360dot的域名,污染DoH。(DNS on HTTPS)常用的DoH、DoT服务器地址DoH-DoT服务器地址
2023年02月26日
36 阅读
0 评论
0 点赞
2023-01-11
终章-使用Nginx搭建一个CDN服务
本文为本系列最后一篇文章,本文章重点讲Nginx一个最重要的功能,即CDN服务器功能;目前国际大厂,Amazon,Azure,CloudFlare,Akamain以及国内的大部分CDN服务商均使用将Nginx变成CDN服务之前,首先配置缓存目录,缓存位置最好放在速度比较快的硬盘里面,建议放速度快的硬盘,因为缓存是频繁调用的。配置缓存目录 #创建目录 mkdir -p /data/nginx-cdn-cache mkdir -p /data/nginx-cache #配置文件目录权限 chmod 777 /data/nginx-cdn-cache chmod 777 /data/nginx-cache #配置Nginx配置文件 nano /etc/nginx/nginx.conf #在配置文件内引入参数 http{ proxy_temp_path /data/nginx-cache; proxy_cache_path /data/nginx-cdn-cache levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=1g; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404; } #注意这个是引入到http块里面的,不要填错地方 #一开始的目录是必须要创建的,不创建无法正常正常使用下面写用于清除缓存的脚本,也可以用用C代码写一个服务,C代码我就不讲了,这里我就用bash脚本 nano /etc/nginx/clean-cdn-cache.sh chmod a+x clean-cdn-cache.sh #/bin/bash cd /data sudo rm -rf nginx-cache/* && sudo rm -rf nginx-cdn-cache/* cd 上面的脚本可以清除文件下面将脚本封装成命令 cp clean-cdn-cache.sh /usr/bin/nginx-clean sudo chmod 755 /usr/bin/nginx-clean #修改完了之后使用nginx-clean即可执行清除CDN缓存下面开始编写Nginx的网站配置文件 #upstream参数,因为是CDN服务器,这个upstream是标记源服务器的参数块,一般直接填写服务器IP地址 upstream cdn_web_1 { server 172.16.21.37:80; } #server参数,用于缓存参数 server { listen 80; server_name www.nginx.test; #缓存静态文件 location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf|jpeg|mp4)$ { proxy_redirect off; proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #配置源站参数 proxy_pass http://cdn_web_1; proxy_cache cache_one; #传回请求参数 proxy_cache_key "$host$request_uri"; add_header Cache "$upstream_cache_status"; #HTTP返回错误状态 proxy_cache_valid 200 304 301 302 8h; proxy_cache_valid 404 1m; #缓存在CDN有效时间,可以自定义,常见CDN运营商使用的为5小时左右 proxy_cache_valid any 1d; } location / { proxy_redirect off; #设置超时错误 proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; #向服务端返回客户端IP地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #配置源站参数 proxy_pass http://cdn_web_1; client_max_body_size 40m; client_body_buffer_size 128k; #连接超时时间 proxy_connect_timeout 60; #发送超时时间 proxy_send_timeout 60; #读取超时时间 proxy_read_timeout 60; proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; } }
2023年01月11日
8 阅读
0 评论
0 点赞
2023-01-09
为什么要用Nginx
学到现在,很多人都会问的一个问题,为什么要用Nginx,为什么不去用其他例如Caddy,Tomcat,Apache等HTTP服务器呢?其实吧,这是个好问题,如果用上面的观点去看Nginx的话,Nginx就只有HTTP服务器的功能,而且非常容易被Tomcat,Apache等HTTP服务器替代,另外Tomcat还是一款自带运行环境的架构。解释上面提出的问题,需要如下几点来回答第一点,服务器的应用Nginx是一个使用C语言开发的高性能HTTP服务器,反向代理服务器,TCP/UDP端口转发服务器;官方测试过Nginx能持续提供5万多并发连接,消耗的CPU,内存资源很少,并且运行可靠性很高。在作为HTTP服务器时,Nginx可以做静态网页服务器或者搭配FastCGI(例如PHP,Python,Go)做动态交互式网页;并做前端网页文件和后端服务文件的分离操作、目录绑定、目录加密、甚至是将Nginx服务器作为文件服务器(WebDav)。在很多时候,一台服务器可能需要部署多个网站,在使用的时候需要对网站进行隔离,常用的方法是通过使用不通端口访问不同的网站,那就会出现一种问题,除了80端口浏览器打开可以直接访问,其他的端口需要在访问的域名或者IP地址后面加上:[port]的形式访问网站,而对于Nginx来说可以不需要这种操作,Nginx可以在server参数中间指定server_name参数创建一个网站空间,再指定网站的目录位置,在访问网站的时候会带上请求的域名参数,到Nginx服务器上会比较域名参数,通过检索Nginx的配置文件参数内是否包含该域名,如果存在该域名则默认请求绑定该域名的网站,不存在则返回默认页面。在使用Nginx的时候会遇到不知名的攻击者针对服务器的攻击,一般情况下网站会使用CDN来保护源网站,并通过CDN加速网站的打开速度,如果没有正确配置Nginx的配置文件,那么会出现源站地址泄露或者攻击者访问到源站服务器,并针对源站服务器进行攻击,在配置Nginx的时候需要配置一个默认页,在直接通过IP访问网站的时候返回403或者直接返回502。Nginx最主要也是最重要的功能就是反向代理,负载均衡;当某个公司的业务量增大,那么该公司的网站服务器就会出现大量的访问,如果服务器数量较少,则可能会出现访问该公司网站速度过慢,或者该公司网站打不开甚至是服务器崩溃;在这种情况下会使用到Nginx的负载集群方式来增加网站的负载能力,和网站的响应速度,所有请求网站用户的连接数会被Nginx平均负载,在某台服务器掉线的情况下不影响公司网站的正常运营,将故障服务器从集群中间去除,或者标记down。Nginx反向代理是通过反向访问其他的网页,但是有人会有疑问了,都反向代理其他的网站服务器了,为什么不直接使用其他的网站服务器,偏要去使用反向代理服务器呢?这个原因很简单,假设一个网站使用到了Python编写的动态语句,那么直接使用这个服务器上的Python引擎会出现一种情况,就是网站一般分静态资源和动态指令,如果直接让引擎接管全部操作的话,可能会出现源服务器需要实时回应静态资源或者是实时生成静态资源,会造成引擎产生大量的不必要连接数和不必要的性能浪费,那么就可以使用Nginx的反向代理缓存,缓存网站的静态资源,在用户访问网站的时候Nginx会直接缓存保存在缓存目录的静态资源文件,在用户进行动态操作的时候(例如查询信息)再将动态操作反馈到Python编写的服务器引擎,如果遇到没有缓存过的静态资源文件则再次向源Python请求保存的缓存文件,并缓存到Nginx的缓存目录;使用这种方法从而降低源服务器的性能浪费以及源服务器的资源消耗,并且Nginx支持极高的并发连接数,配合Nginx的负载集群(upstram)可以实现服务的高可用。第二点,其他类型HTTP服务器的优缺点Apache优点: 几乎可以运行在所有的通用计算机上,使用的是静态解析文件的方法,可以通过扩展脚本的方式支持动态页面 缺点: 配置复杂,服务以进程结构为基础,消耗系统硬件资源比较高,所以在高并发连接的时候系统需要消耗大量资源 Lighttpd优点: 比Apache轻量,服务器资源消耗较少,支持高并发 缺点: 稳定性和Apache Nginx相比较相差较远,支持的功能较少,并且代码的缺陷多 Caddy优点: 使用GoLang开发,Windows和Linux平台都可以使用,需要安装Go语言环境,自动支持HTTPS,使用简单 缺点: 由于Caddy使用的Go开发,所以Caddy的处理性能就是Go的处理性能 IIS优点: 使用简单,方便,支持多种动态语言 缺点: 无Linux平台版本,Linux平台只能用Docker版IIS,并且Linux版仅支持ASP.NET Core,标准版.NET Framework 5.0以下无法支持 第二点,支持并发量高<网上摘录部分>Nginx 服务器,正常运行过程中:多进程:一个 Master 进程、多个 Worker 进程。Master 进程:管理 Worker 进程。对外接口:接收外部的操作(信号);对内转发:根据外部的操作的不同,通过信号管理 Worker;监控:监控 Worker 进程的运行状态,Worker 进程异常终止后,自动重启 Worker 进程。Worker 进程:所有 Worker 进程都是平等的。实际处理:网络请求,由 Worker 进程处理。Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。HTTP 连接建立和请求处理过程如下:Nginx 启动时,Master 进程,加载配置文件。Master 进程,初始化监听的 Socket。Master 进程,Fork 出多个 Worker 进程。Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求。Nginx 高性能、高并发Nginx 为什么拥有高性能并且能够支撑高并发?Nginx 采用多进程+异步非阻塞方式(IO 多路复用 Epoll)。请求的完整过程:建立连接→读取请求→解析请求→处理请求→响应请求。请求的完整过程对应到底层就是:读写 Socket 事件。Nginx 的事件处理模型Request:Nginx 中 HTTP 请求。基本的 HTTP Web Server 工作模式:接收请求:逐行读取请求行和请求头,判断段有请求体后,读取请求体。处理请求。返回响应:根据处理结果,生成相应的 HTTP 请求(响应行、响应头、响应体)。Nginx 也是这个套路,整体流程一致:Nginx 的模块根据其功能基本上可以分为以下几种类型:①event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理。包括 ngx_events_module,ngx_event_core_module 和 ngx_epoll_module 等。Nginx 具体使用何种事件处理模块,这依赖于具体的操作系统和编译选项。②phase handler:此类型的模块也被直接称为 handler 模块。主要负责处理客户端请求并产生待响应内容,比如 ngx_http_static_module 模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。③output filter:也称为 filter 模块,主要是负责对输出的内容进行处理,可以对输出进行修改。例如,可以实现对输出的所有 html 页面增加预定义的 footbar 一类的工作,或者对输出的图片的 URL 进行替换之类的工作。④upstream:upstream 模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端。upstream 模块是一种特殊的 handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。⑤load-balancer:负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。摘录链接链接:https://www.jianshu.com/p/74aededc3457来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。第三点,使用难度较低
2023年01月09日
8 阅读
0 评论
0 点赞
2023-01-08
Nginx配置文件参数部分详解
因为Nginx的配置文件配置参数有很多,本篇文章只能粗略的放出部分配置参数文件Nginx主配置文件详解Nginx主配置文件默认位置为/etc/nginx/nginx.conf一般情况下默认编译的位置在上面的路径内,非刻意修改位置路径不变(修改方法为编译的时候设定编译位置)主配置文件结构#全局块 worker_processes 1; #events块 events { worker_connections 1024; } #http块 http { #http全局块 upstream { #upstream块 } server { #server块(网站配置文件块) location / { #location块 } } } stream { #stream块 upstream { #upstream块 } }上面配置文件的解读全局块全局块通常配置Nginx运行用户或者用户组,Nginx的进程和PID存放位置,日志的存放位置events块一般情况下能限制多worker process接收多个网络连接,这部分一般不做设置,任何配置问题可能会影响到Nginx的服务器整体性能,一般由服务器默认设置即刻。http块http块是Nginx配置文件中间最重要的部分,整个Nginx下面的http服务都在http块下面;http块下面可以包括http全局块,用于启用插件,引用外部文件;本区域server块可以通过include引用当前目录下conf.d目录下的参数配置文件,引用的语法为 include /etc/nginx/conf.d/*.conf ,意思为引用conf.d目录下面的所有以.conf为后缀的文件;http块内不能包含stream块,stream块与http块同级。http块配置参数http{#文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #默认编码 charset utf-8; #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用 tcp_nopush on; tcp_nodelay on; #长连接超时时间,默认单位是秒 keepalive_timeout 120; #FastCGI相关参数配置网站性能,一般搭配fastcgi模块使用,例如PHP fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzip模块设置,需要Nginx在安装的时候有编译gzip模块 gzip on; #开启gzip压缩输出 gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_comp_level 2; #压缩等级 gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。 gzip_vary on; #限制一个IP的连接数 limit_zone crawler $binary_remote_addr 10m; #设置上传的文件大小 client_max_body_size 8m; #允许访问目录 autoindex on; #客户请求头缓冲大小 large_client_header_buffers 4 64k;}server块server块就和虚拟主机有关系了,一般为网站的配置文件,可以用在域名隔离网站的情况下,特征是在http块下可以无限设置数量;server块下面主要用于正常的http第七层服务,内包含location块,server块基本语法如下 listen [port | ip | ip:port | localhost] #解释,上面的port可指定自定义端口,ip为监听地址,不指定端口默认监听该IP地址的80端口,ip:port为自定义监听该地址的端口,localhost一般情况下为监听127.0.0.1的80端口,可以为localhost:80的方式监听端口 server_name [ip | domain | _] #解释,上面的server_name可以表示网站空间为单个IP地址,或者多个地址,或者是多个域名;_下划线为表示该网站空间没有名称,即访问该网站不需要任何标识都可以访问。 location [ = | ~ | ~* | ^~ ] uri { ... } #解释,具体用途看前面单独讲location的文章 #允许客户端请求的最大单文件字节数 client_max_body_size 10m; #高负载下缓冲区大小 proxy_busy_buffers_size 64k; upstream块 upstream [upstream_name] #解释,upstream为网站http负载集群使用,可以包含在stream块里面做第四层负载集群使用。 #基本语法 upstream stream_name { [ip_hash | url_hash |least_conn | least_time] server [ip | domain | localhost]:port [type] } #其中type为负载参数,用于标识服务器权重,和服务器状态,基本使用方法如下 #weight 权重参数 #down 不请求该服务器 #backup 备份服务器 #max-fails 标记不可用超时次数 #fail_timeout 标记超时时间,与上方超时次数对应,超过次数后自动标记down状态 #max-conns 节点允许最大连接数当该节点达到规定数值,其他请求会被转移到其他服务器 #slow-start 节点恢复访问时,不立刻加入集群 #--------------------------------------- #解释[ip_hash | url_hash | least_conn | least_time]的使用区别 #ip_hash 用于动态网站,基于hash计算,保持session的一致 #url_hash 静态资源缓存,加速 #least_conn 优先访问当前网站访问量最小的 #least_time 优先访问最快响应速度的服务器 stream块stream块可以嵌套upstream块,stream块的主要参数listen 监听端口preread_buffer_size 设置每个会话数据预读缓冲区的大小preread_timeout 设置每个会话数据预读取的超时时间proxy_protocol_timeout 读取代理协议头的超时时间resolver 域名解析服务器地址resolver_timeout 域名解析超时时间tcp_nodelay 启用或关闭立即发送数据(tcp_nodelay)选项variables_hash_bucket_size 设置变量哈希表中桶的大小variables_hash_max_size 设置变量哈希表的最大值---------------分割---------------上面参数注意部分;listen可以监听UDP端口,监听格式 listen [port] udp;stream里面不可以使用server_name参数,server_name参数仅在第七层服务中间有效,stream为第四层协议,自然server_name参数无效upstream 在stream里面使用的时候可以使用的格式 server [domain | ip | static_host]:port [type]上格式解读,在stream里面可以使用与http块内upstream一样的权重参数,服务器标记参数以及备份参数stream块可以用来当端口转发服务使用,仅支持纯TCP/UDP的服务使用,使用到GRE协议或者更低例如 第三层协议PPTP(GRE),IGMP,IPsec,OpenVPN等,以及第二层协议L2TP(第二层链路封装协议)ikev2,ikev3,以及各种路由协议,均不能通过Nginx的TCP/UDP代理模块代理。解释:Nginx的TCP/UDP代理仅支持第四层以及第四层以上的第五层,第六层,以及第七层的协议,在OSI模型中间,规定只有层数低的协议可以代理层数高的协议或者同级的协议,TCP和UDP属于第四层,基于第三层的基础之上,所以Nginx自然不能代理第三层的协议,或者更低的协议;但是SOCKS工作在第四层,所以可以使用Nginx的第四层代理SOCKS的协议。
2023年01月08日
25 阅读
0 评论
0 点赞
2023-01-04
location 通用参数扩充资料
接上一篇文章扩充资料在使用location的时候会出现一个常见问题,就是在使用location /xxxx的时候,假设是静态目录,需要使用root或者alias两个参数alias是普通字符串匹配,假设请求一个静态文件是http://test.com/img/static/0001.png 那么这个location配置文件这样写 location /img { alias /var/www/; }使用alias指定目录那么请求携带的URL里面带/img/static/0001.png的参数,那么会请求/var/www/static/0001.png目录下面的静态文件,如果这个文件真实存在,则正常请求,如果将alias改成root参数,那么就会请求/var/www/img/static/0001.png下查询文件,如果文件不存在会返回404;alias叫别名配置,用于访问文件系统;root为根路径配置,用于URL匹配访问文件系统,然后会把请求的路径附加在后面
2023年01月04日
3 阅读
0 评论
0 点赞
2023-01-04
Nginx的location参数
location的语法规则location 主要分为几个语法类型符号类 [= ~ ~* ^~]目录类 /xxx/通用请求类 /符号类解释= 普通字符串精确匹配^~ 带参数前缀匹配,当前只匹配该参数,其他的一律不匹配~ 正则匹配,区分请求的大小写~* 正则匹配,不区分请求的大小写/x 普通前缀匹配/ 一般为通用请求,无匹配时使用,对比上面优先级最小上顺序为例,从上到下依次优先级降低TIP A:“=”, 示范 location = /A001 { return 301 https://baidu.com; }则请求的时候需要请求的URL后缀/A001 200OK/A001/ 404TIP B:“^~” 示范 location ^~ /A001/ { return 301 https://baidu.com; }如果写入该参数,则服务器仅匹配/A001/为目录参数开头的请求例如 http://test.com/A001/ 200OKhttp://test.com/A001/x 200OKhttp://test.com/A001 404如果遇到其他设置均由^~参数来处理TIP C:“~” 示范 location ~ /A001 { return 301 https://baidu.com; }请求区分大小写,则请求的参数与设置参数的大小写不一致,则返回404,如果服务器上面设置文件里面含上面的TIP B参数则下面所有参数全部中断请求例如http://test.com/A001 200OKhttp://test.com/a001 404http://test.com/A000 404TIP D:“~*” 示范1 location ~* .(png|jpg|gif)$ { }当需要请求静态文件的时候,不区分静态文件后缀的大小写例如http://test.com/1.Png 200OKhttp://test.com/1.PNG 200OKhttp://test.com/1.png 200OK示范2 location ~* /ABC { }当请求携带目录的时候,不区分目录的大小写例如http://test.com/ABC 200OKhttp://test.com/Abc 200OKhttp://test.com/abc 200OKhttp://test.com/abcd 404如果在整体参数中间出现^~,则以^~为默认请求匹配,不请求~*参数匹配TIP E:“/xxx” 示范1 location /test { }当请求不携带任何参数的时候,默认匹配携带参数例如http://test.com/test 200OKhttp://test.com/ 404示范2 location /test2 { }例如http://test.com/test2 200OKhttp://test.com/test3 404该请求匹配通用匹配中存在特定字符串的匹配TIP F:“/” 示范 location / { }此请求优先级最低,可以自定义目录请求例如http://test.com/ 200OKhttp://test.com/ABC 200OK PS:前提是该网站默认目录下存在/ABC目录,否则返回404http://test.com/i/1.png 200OK PS:前提是该网站的/i目录下存在1.png这个文件,否则返回404该请求参数为所有请求参数中间优先级最低请求综上参数TIP编号为例优先级顺序为 A>B>C>D>E>F,F为优先级最低------------------------------------分割符号------------------------------------扩展应用某网站的/admin目录(不区分大小写)不能通过域名test.com访问到,如果访问则返回403或者404错误 server { listen 80; server_name test.com; location / { root /var/www/test.com; index index.html index.htm; } location ~* /admin { return 403; }某网站test.com在访问/index目录的时候(不区分大小写)需要嵌套访问或者跳转到该网站公司的其他子网站http://test2.com/index 上嵌套访问方法,使用反向代理 server { listen 80; server_name test.com; location / { root /var/www/test.com; index index.html index.htm; } location ~* /index { proxy_pass http://test2.com/index; }重定向方法,使用301 server { listen 80; server_name test.com; location / { root/var/www/test.com; index index.html index.htm; } location ~* /index { return 301 http://test2.com/index; }某网站访问的时候只允许访问默认页面,不得用任何URL做任何自定义请求,否则返回403 server { listen 80; server_name test.com; location = / { root /var/www/test.com; index index.html index.htm; }
2023年01月04日
8 阅读
0 评论
0 点赞
2023-01-02
Nginx编译配置文件部分解释
本文讲解Nginx的编译安装配置的结构,详细解释每一行的作用以及含义 #查看当前系统安装的Nginx编译配置 nginx -V #Nginx配置反馈文件 configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy \ --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid \ --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module \ --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module \ --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic \ --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module \ --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module \ --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit \ --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads \ --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' \ --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' #------------------分割符号---------------------------- #上面的配置文件拆解 --prefix=/usr/share/nginx :Nginx的安装目录 --sbin-path=/usr/sbin/nginx :可执行程序文件存放位置,用于确定可执行文件的位置,Service引用位置与这个位置相同 --modules-path=/usr/lib64/nginx/modules :第三方插件存放的位置(在编译的时候指定插件存放的位置,编译后无需此目录) --conf-path=/etc/nginx/nginx.conf :Nginx配置文件所在位置(也可以说是Nginx主配置文件的位置) --error-log-path=/var/log/nginx/error.log :错误日志文件保存位置 --http-log-path=/var/log/nginx/access.log :HTTP访问日志记录保存位置 --http-client-body-temp-path=/var/lib/nginx/tmp/client_body :配置客户端上传的缓冲区目录位置(大型服务需要设置此参数,一般建议缓冲区放在速度快的硬盘里面) --http-proxy-temp-path=/var/lib/nginx/tmp/proxy :配置反向代理缓冲目录,用于缓冲反向代理目标服务器的缓存文件 --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi :字面意思是FastCGI的缓存文件存储路径 --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi :uwsgi服务器缓存文件位置 --http-scgi-temp-path=/var/lib/nginx/tmp/scgi :SCGI服务器接收到的数据文件缓存目录 --pid-path=/run/nginx.pid :指定当前的pid文件存放位置 --lock-path=/run/lock/subsys/nginx :lock文件保存的目录 --user=nginx --group=nginx :Nginx所属的用户和用户组,再编译之前需要设置相同的用户和用户组,不然编译会报错,运行环境也需要配置用户和用户组,不然在运行软件的时候也会报错 #----------------启用组件----------------------- --with-google_perftools_module :启用ngx_google组件,用于分析性能瓶颈 --with-http_addition_module :启用过滤器,分步响应请求 --with-http_auth_request_module :启用统一用户权限验证 --with-http_dav_module :Nginx官方的WebDav模块 --with-http_degradation_module :内存不足的时候会返回HTTP 204错误代码或者HTTP 444错误代码 --with-http_flv_module :启用flv支持,使用基于时间的偏移量文件 --with-http_gzip_static_module :在线压缩输出数据流 --with-http_image_filter_module=dynamic :图片缩略图功能,调整为动态 --with-http_mp4_module :启用对在线mp4视频文件支持 --with-http_perl_module=dynamic :支持构建嵌入式动态Perl模块 --with-http_random_index_module :从目录随机挑选一个目录索引 --with-http_realip_module :从报文头中更改客户端的IP地址,默认为关 --with-http_secure_link_module :计算和检查要求所需的安全链接网址 --with-http_slice_module :支持构建将请求拆分为子请求 --with-http_ssl_module :启用HTTPS支持,没这个就无法启用HTTPS模式 --with-http_stub_status_module :查看Nginx的状态页面 --with-http_sub_module :允许文本替换Nginx响应中的文本 --with-http_v2_module :支持HTTP/2模块 --with-http_xslt_module=dynamic :支持使用一个或者多个XSLT样式表转换XML响应模块 --with-mail=dynamic :启用POP3,IAMP4,SMTP代理模块 --with-mail_ssl_module:启用邮件代理模块的SSL功能 --with-pcre :启用pcre库 --with-pcre-jit :构建pcre库中间的pcre-jit指令 --with-stream=dynamic :允许为TCP/UDP代理和负载均衡模块 --with-stream_ssl_module :TCP/UDP流模块添加SSL/TLS协议支持 --with-stream_ssl_preread_module :在不终止SSL/TLS的情况下从消息中间获取信息 --with-threads :启用线程池 --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong :设置添加到GFLAGS变量参数 #下面的参数实在是看不懂,所以就不解释了,那行参数写的过于复杂
2023年01月02日
10 阅读
0 评论
0 点赞
2023-01-02
查看Nginx的日志文件并修改位置
本篇为本系列的扩展知识内容,通过扩展知识内容深入了解Nginx整个软件的基本结构查看Nginx的默认日志位置 #查看Nginx的编译配置内容 nginx -V #Nginx组件给的反馈内容 nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.1.1k FIPS 25 Mar 2021 TLS SNI support enabled configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' #--------------------分割-------------- #从以上反馈信息来看,访问错误日志在/var/log/nginx/error.log下,正常访问日志在/var/log/nginx/access.log下; #日志的位置是由编译的时候编译的默认位置为准,本次实验的服务器上所保存的日志文件为yum默认安装的Nginx目录下。 #遍历保存的日志文件目录 cd /var/log/nginx && ls -al查看当前日志文件 尝试修改日志文件的保存位置日志文件只能通过重新编译软件的方式重新编辑log文件位置下面来修改日志文件的位置 #重新配置Nginx的log文件位置(自己编译安装) #配置错误访问日志文件位置在/var/log/nginx/errorlog/error.log #配置正常访问日志文件位置在/var/log/nginx/accesslog/access.log #配置修改过的编译配置文件,一定是要你当前正在使用的Nginx配置文件修改,因为编译需要的插件环境每个人都不一样,注意:在生产环境下请勿使用本方法直接二次编译 ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/errorlog/error.log --http-log-path=/var/log/nginx/accesslog/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' #在服务器上配置日志目录 mkdir -p /var/log/nginx/accesslog/ && mkdir -p /var/log/nginx/errorlog/ #八个线程编译Nginx make -j8 #进入编译完成的文件目录,并配置nginx的可执行权限 systemctl stop nginx cd objs/ && chmod a+x nginx #停止Nginx服务,并备份原来的Nginx软件 mv /usr/sbin/nginx /usr/sbin/nginx.bak cp nginx /usr/sbin/nginx #重新启动Nginx服务 systemctl start nginx
2023年01月02日
5 阅读
0 评论
0 点赞
2022-12-28
Nginx项目化实训一
本篇为本系列综合项目一,配置一个博客网站,并设置负载集群;本次需要使用四台服务器,一台数据库,三台Web服务器。安装MariaDB数据库#配置源 nano /etc/yum.repo.d/mariadb.repo #-----粘贴下部分-------------------------------- [mariadb] name = MariaDB baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64 gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 #----------------------------------------------- #清除当前缓存并重新生成 yum clean all yum makcahe #安装MariaDB数据库软件 yum -y install MariaDB-server MariaDB-client #启动mariadb以及设置开机自启 systemctl start mariadb && systemctl enable mariadb #--------------------分割------------------------- #初始化MariaDB服务 sudo mysql_secure_installation #初始化的选项 Enter current password for root (enter for none):<– 回车 Set root password? [Y/n] <– 设置root密码y New password: <– 设置root用户的密码(密码设置成
[email protected]
) Re-enter new password: <– 再输入一次你设置的密码 Remove anonymous users? [Y/n] <– 删除匿名用户y Disallow root login remotely? [Y/n] <–禁止远程root用户n Remove test database and access to it? [Y/n] <– 删除Test数据库y Reload privilege tables now? [Y/n] <– 重新加载权限表y #----------------------初始化完毕------------------ #使用root用户登录数据库 mysql -u root -p -h localhost -P 3306 #密码是
[email protected]
,刚才设置的 #设置typecho用户并配置本地登录,设置用户密码为typecho mysql> GRANT ALL PRIVILEGES ON *.* TO 'typecho'@localhost IDENTIFIED BY 'typecho' WITH GRANT OPTION; mysql > flush PRIVILEGES; #创建数据库(下面这一行需要输入分号) mysql> create database typecho_db; #查看数据库是不是创建了 MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | typecho_db | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> use mysql; #配置用户远程的登录 MariaDB [mysql]> update user set `host` = '%' where `user` = 'typecho' limit 1; #强制刷新 MariaDB [mysql]> flush privileges; 安装PHP7.3并配置php.ini,以及Typecho需要的插件同步安装,这里推荐使用MobaXterm的多执行方式同步安装#安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装扩展插件 #安装mbstring yum -y install php-mbstring #在php.ini设置mbstring弃用 nano /etc/php.ini #在文件内加入这一行 extension=mbstring.so #安装完了查看版本 #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpm使用多执行的方式安装Nginx,并配置参数配置前先下载Typecho文件 yum -y install wget unzip cd / mkdir -p /www/blog.nginx.test/ cd /www/blog.nginx.test/ wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip unzip typecho.zip cd / chmod 777 /www/blog.nginx.test/ chmod 777 /www/blog.nginx.test/usr/uploads 签发SSL证书,使用WinSCP上传到主Nginx上上传到文件位置/cert/下重命名为local.crt以及local.key保存在/cert/文件目录下,等会配置文件要引用 #这里可以用编译的Nginx,也可以用yum安装的Nginx yum -y install epel-release yum -y install nginx #每台Nginx服务器的配置文件都不一样,需要多次确认 #----------------Nginx-2配置文件---------------------------- server { listen 80; server_name 10.0.0.90; root /www/blog.nginx.test/; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } } #-----------------分割-------------------------------------- #----------------Nginx-3配置文件---------------------------- server { listen 80; server_name 10.0.0.91; root /www/blog.nginx.test/; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } } #------------------分割------------------------------------ #----------------------Nginx-1主配置文件以及负载集群文件--- #下面的文件是配置文件,不需要上传SSL证书 server { listen 80; server_name 10.0.0.89; root /www/blog.nginx.test; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } } #--------------------配置负载集群文件--------------------------- upstream blog_local { #一定要ip_hash的方式负载,不然会出现掉登录的情况 ip_hash; server 10.0.0.89:80; server 10.0.0.90:80; server 10.0.0.91:80; } server { listen 80; listen 443 ssl; server_name blog.nginx.test; #配置SSL文件和SSL密钥串 ssl_certificate /cert/local.crt; ssl_certificate_key /cert/local.key; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:5m; ssl_session_timeout 5m; #设置强制HTTPS if ($scheme = http) { return 301 https://$host$request_uri; } if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } #引用当前的组,后面需要用到 location /{ proxy_pass http://blog_local; } #不加这个加载网页会不正常 location ~ .* { proxy_pass http://xd-project; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 配置完Nginx之后配置Windows的hosts文件这里推荐用dism++直接修改hosts文件需要修改的HOSTS文件NGINXTEC HOSTS CHANGE10.0.0.89 blog.nginx.test本次实验使用服务器IP列表MariaDB数据库服务器IP:10.0.0.92Nginx主控服务器:10.0.0.89Nginx从服务器1:10.0.0.90Nginx从服务器2:10.0.0.91重启Nginx服务器,并在Windows的浏览器上浏览刚才搭建好的网站安装的时候需要注意一点,安装选择数据库的参数文件是这样的数据库IP地址:10.0.0.92,数据库用户名:typecho,数据库密码:typecho,数据库名:typecho_db下一步,网站链接使用https://blog.nginx.test不使用本链接会造成网页无法正常加载(这个决定服务器的文件外部文件引用,如果有错无法正确加载css和js文件,望悉知)另外两个从站可以从主站直接复制过去也可以另外安装,另外安装的网站在输入数据库信息之后提示数据存在选择保留原有数据继续安装。安装好后打开网站新建文章查看文章是否正常。 查看发布的文章是否正常 本次项目化实训一结束
2022年12月28日
7 阅读
0 评论
0 点赞
2022-12-28
Nginx配置正向代理
Nginx正向代理是和SOCKS5一样的类型的工具,Nginx的正向代理又称HTTP代理,工作在第七层可以通过Nginx的正向代理去访问某些不能被访问的网站。配置Nginx正向代理Nginx自带的正向代理模块不支持HTTPS正向代理,仅支持HTTP正向代理,所以这里需要编译第三方的正向代理模块。 yum -y install patch #下载第三方插件模块 cd /nginx-moduls wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/master.zip yum -y install unzip && unzip master.zip mv ngx_http_proxy_connect_module-master nginx-http-proxy cd / #下面的操作全部回车,默认就行 #查看做实验虚拟机的参数配置文件 nginx -V #复制看到的参数配置文件,如下(如果是用yum安装的和下面肯定一致) ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #安装编译环境 yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel gd gd-devel #创建用户,如果直接使用做实验的机器则不需要此操作 useradd -s /sbin/nologin nginx #安装依赖库1 必装 sudo yum install -y libxml2-devel.x86_64 #安装依赖库2 必装 sudo yum install -y libxslt-devel.x86_64 #下载Nginx源码包 wget https://nginx.org/download/nginx-1.22.1.tar.gz tar -xvf nginx-1.22.1.tar.gz #进入解压好的源码包 cd nginx-1.22.1/ #配置插件包,使用Nginx 1.22.1以及1.23以上的需要用102101文件,不然会报错 patch -p1 < /nginx-moduls/nginx-http-proxy/patch/proxy_connect_rewrite_102101.patch #下面编写Nginx的配置文件内容,准备编译(下面是已经准备好的配置文件) ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --add-module=/nginx-moduls/nginx-http-proxy --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #--------------------------------------------------------- #返回下面的参数就代表可以准备编译了 Configuration summary + using threads + using system PCRE library + using system OpenSSL library + using system zlib library nginx path prefix: "/etc/nginx" nginx binary file: "/usr/sbin/nginx" nginx modules path: "/usr/lib64/nginx/modules" nginx configuration prefix: "/etc/nginx" nginx configuration file: "/etc/nginx/nginx.conf" nginx pid file: "/var/run/nginx.pid" nginx error log file: "/var/log/nginx/error.log" nginx http access log file: "/var/log/nginx/access.log" nginx http client request body temporary files: "/var/cache/nginx/client_temp" nginx http proxy temporary files: "/var/cache/nginx/proxy_temp" nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp" nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp" nginx http scgi temporary files: "/var/cache/nginx/scgi_temp" #--------------分割----------------- #这里只要编译,不需要编译安装,所以不要make install,会出错的 #八个线程编译源码包 make -j8 #如果出现编译失败请删除之前的旧编译环境 #编译好了之后进入objs文件夹,里面有编译好的Nginx文件,复制到需要配置Nginx的服务器上 #停掉Nginx服务 systemctl stop nginx #复制Nginx文件到/usr/sbin/下 #配置可执行权限 chmod a+x /usr/sbin/nginx #配置查看Nginx配置文件有没有新编译的插件在上面 nginx -v #启动Nginx服务器 systemctl start nginx查看配置文件有没有刚才编译的插件 查看到Nginx正向代理插件安装成功了,下面配置Nginx配置文件 server { resolver 223.5.5.5 ipv6=off; resolver_timeout 5s; listen 880; proxy_connect; proxy_connect_allow 443 80; proxy_connect_connect_timeout 20s; proxy_connect_read_timeout 20s; proxy_connect_send_timeout 20s; location / { proxy_pass $scheme://$http_host$request_uri; } } 上面的配置文件配置完了重启Nginx服务器 systemctl restart nginx在另外一台Linux上打开网络,HTTP代理,输入以下参数HTTP代理IP地址10.0.0.113;端口880;设置完的结果截图 保存,使用curl命令试试能不能curl访问到一baiducurl http://baidu.com 经过测试,网站已经通过HTTP代理打开
2022年12月28日
22 阅读
0 评论
0 点赞
2022-12-28
Nginx实现服务器动静分离
Nginx可以实现动态和静态分离的操作,一般情况下用于Nginx分离PHP或者Nginx分离js脚本,通过请求的类型转发请求到应用服务器;本篇文章讲解使用Nginx配置PHP分离文件。PHP FastCGI配置分离的Nginx配置文件PHP服务器IP:10.0.0.99:9000Nginx服务器IP:10.0.0.113测试网站使用之前配置的blog服务器 location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 10.0.0.99:9000; } PHP独立服务器安装PHP7.3 #安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装完了查看版本 php -v #安装版本信息 PHP 7.3.33 (cli) (built: Dec 19 2022 14:30:27) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpm #防火墙放行端口9000 TCP firewall-cmd --add-port=9000/tcp --zone=public --permanent firewall-cmd --reload #可以关闭防火墙,在实际生产环境中间请勿随意关闭防火墙 #关闭SELINUX,不关闭所有服务只有OpenSSH服务是可以被访问的,其他的服务都无法通过网络访问 setenforce 0 #临时关闭SELINUX #安装mbstring yum -y install php-mbstring #在php.ini设置mbstring弃用 nano /etc/php.ini #在文件内加入这一行 extension=mbstring.so #保存重启PHP-FPM systemctl restart php-fpm修改Nginx的配置文件 upstream php-fastcgi { server 127.0.0.1:9000; server 10.0.0.113:9000; } server { listen 80; listen 443 ssl; server_name blog.nginx.test; alias /www/blog.nginx.test; index index.html index.htm index.php; ssl_certificate /cert/local.crt; ssl_certificate_key /cert/local.key; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:5m; ssl_session_timeout 5m; if ($scheme = http) { return 301 https://$host$request_uri; } if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass php-fastcgi; } #设置缓存3天 location ~* \.(js|css|jpg|gif|png|bmp|swf)$ { expires 3d; } } 重启Nginx服务后打开浏览器查看网站能不能正常打开 systemctl restart nginx浏览器打开网站
2022年12月28日
3 阅读
0 评论
0 点赞
2022-12-26
Nginx配置PHP网页(高级)
本篇为本系列教程第三个项目实战内容,本次内容需要配置Nginx,MariaDB,PHP7.3搭建Typecho网站。搭建之前先下载Typecho的安装包: >>>下载<<< CentOS下安装MariaDB #配置源 nano /etc/yum.repo.d/mariadb.repo #-----粘贴下部分----- [mariadb] name = MariaDB baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64 gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 #------------------- #清除当前缓存并重新生成 yum clean all yum makcahe #安装MariaDB数据库软件 yum -y install MariaDB-server MariaDB-client #启动mariadb以及设置开机自启 systemctl start mariadb && systemctl enable mariadb #--------------------分割------------------------- #初始化MariaDB服务 sudo mysql_secure_installation #初始化的选项 Enter current password for root (enter for none):<– 回车 Set root password? [Y/n] <– 设置root密码y New password: <– 设置root用户的密码(密码设置成
[email protected]
) Re-enter new password: <– 再输入一次你设置的密码 Remove anonymous users? [Y/n] <– 删除匿名用户y Disallow root login remotely? [Y/n] <–禁止远程root用户n Remove test database and access to it? [Y/n] <– 删除Test数据库y Reload privilege tables now? [Y/n] <– 重新加载权限表y #----------------------初始化完毕------------------ #使用root用户登录数据库 mysql -u root -p -h localhost -P 3306 #密码是
[email protected]
,刚才设置的 #设置typecho用户并配置本地登录,设置用户密码为typecho mysql> GRANT ALL PRIVILEGES ON *.* TO 'typecho'@localhost IDENTIFIED BY 'typecho' WITH GRANT OPTION; mysql > flush PRIVILEGES; #创建数据库(下面这一行需要输入分号) mysql> create database typecho_db; #查看数据库是不是创建了 MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | typecho_db | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> 安装PHP-FPM模块 #安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装完了查看版本 php -v #安装版本信息 PHP 7.3.33 (cli) (built: Dec 19 2022 14:30:27) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpm 不编译安装Nginx 1.22 yum -y install epel-release yum -y install nginx systemctl start nginx && systemctl enable nginx上传Typecho的安装包文件到CentOS,配置路径使用WinSCP工具上传到CentOS 下面对文件进行操作 cd /www/blog.nginx.test unzip typecho.zip Archive: typecho.zip inflating: LICENSE.txt creating: admin/ creating: admin/img/ inflating: admin/img/
[email protected]
inflating: admin/img/ajax-loader.gif inflating: admin/img/typecho-logo.svg inflating: admin/img/
[email protected]
inflating: admin/img/icons.png ........ #-------- ls admin index.php install install.php LICENSE.txt typecho.zip usr var #------------------------ cd /www chmod 777 blog.nginx.test/ 使用KeyManager签发一个SSL证书,域名为blog.nginx.test将证书名字改成local.crt,私钥文件名字改成local.key,上传到服务器的/cert目录下,设置cert目录权限为777配置Nginx网站配置文件 nano /etc/nginx/conf.d/blog.nginx.test.conf #------下面为Nginx网站配置文件 server { listen 80; listen 443 ssl; server_name blog.nginx.test; alias /www/blog.nginx.test; index index.html index.htm index.php; ssl_certificate /cert/local.crt; ssl_certificate_key /cert/local.key; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:5m; ssl_session_timeout 5m; if ($scheme = http) { return 301 https://$host$request_uri; } if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } #设置缓存3d location ~* \.(js|css|jpg|gif|png|bmp|swf)$ { expires 3d; } } #---------Nginx配置文件配置完毕重启Nginx服务器 systemctl restart nginx最后步骤 #安装mbstring yum -y install php-mbstring #在php.ini设置mbstring弃用 nano /etc/php.ini #在文件内加入这一行 extension=mbstring.so #保存重启PHP-FPM和Nginx服务器 systemctl restart php-fpm && systemctl restart nginx #设置上传目录权限 cd /网站目录 chmod 777 usr/uploads打开浏览器输入https://blog.nginx.test/install.php出现证书问题不需要管,证书是自签名的,自签名的证书一般不信任。安装Typecho 设置数据库参数(一开始设置的用户名密码和数据库名) 设置用户名和密码(密码设置成
[email protected]
) 设置完成后发布一个文章 查看数据库有没有出现数据表
2022年12月26日
16 阅读
0 评论
0 点赞
2022-12-26
Nginx配置PHP网页(初级)
Nginx作为Web服务器来讲,并不能处理动态请求,例如PHP网页,Nginx只能将请求转给PHP运行池,PHP运行池通过PHP解释器运行PHP语句。使用php-fpm(PHP FastCGI Process Manager: FastCGI进程管理器)安装PHP-FPM#安装运行环境 yum -y install gcc gcc-c++ #安装第三方软件源 yum -y install epel-release #安装软件包 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安装包管理器组件 yum -y install yum-utils #启用php7.3源 yum-config-manager --enable remi-php73 #安装PHP7需要的组件 yum -y install php php-mcrypt php-devel php-cli php-gd php-pear php-curl php-fpm php-mysql php-ldap php-zip php-fileinfo #安装完了查看版本 php -v #安装版本信息 PHP 7.3.33 (cli) (built: Dec 19 2022 14:30:27) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies #启动php-fpm,开机自启动 systemctl start php-fpm systemctl enable php-fpmPHP-FPM默认监听的FastCGI端口是9000 TCP在Nginx上设置PHP运行池 server { listen 80; server_name php.nginx.test; root /www/php.nginx.test; index index.html index.htm index.php; location ~ ^/.+\.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } location ~* \.(js|css|jpg|gif|png|bmp|swf)$ { expires 3d; } }创建一个PHP脚本,位置放到你们设置的Nginx网站的位置,本教程在/www/php.nginx.test/下 <?php echo("this is php website!"); ?>由于配置的域名实际并不存在,所以这里需要在hosts里面键入当前的域名,并重启Nginx服务127.0.0.1 php.nginx.test测试php网页是否正常,使用curl命令 curl http://php.nginx.test/index.php查看测试结果 PHP 配置完成
2022年12月26日
3 阅读
0 评论
0 点赞
2022-12-20
Nginx使用TCP代理实战项目
本篇是本系列第二篇实战内容小李是某网络公司的运维,由于近期新冠肺炎疫情的影响,该网络公司的程序员需要居家办公,由于生产环境各程序员需要在家里远程连接公司的生产环境机房里面的服务器,但是由于生产环境不能直接暴露在公网环境下,所以现需要连接生产环境服务器的SSH端口以及SOCKS服务端口项目需求分析:SOCKS默认端口:1080SSH默认端口:22目标服务器:10.0.1.1Nginx转发的服务器地址:10.0.0.113安装SOCKS5代理服务器#安装依赖 yum -y install gcc openldap-devel pam-devel openssl-devel wget http://jaist.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz tar -xvf ss5-3.8.9-8.tar.gz cd ss5-3.8.9/ ./configure make && make install #目前配置文件保留的位置 nano /etc/opt/ss5.conf #添加以下内容(配置方便不使用密码登录) { permit - 0.0.0.0/0 - 0.0.0.0/0 - - - - - permit u 0.0.0.0/0 - 0.0.0.0/0 - - - - - auth 0.0.0.0/0 - - auth 0.0.0.0/0 - u } #给SOCKS5可执行能力 chmod a+x /tc/init.d/ss5 #启动SOCKS5 service ss5 start 配置服务器防火墙 systemctl start firewalld systemctl enable firewalld firewall-cmd --add-port=8022/tcp --zone=public --permanent firewall-cmd --add-port=10808/tcp --zone=public --permanent firewall-cmd --reload配置Nginx的TCP转发文件 nano /etc/nginx/stream.d/ftp-ssh.conf upstream ssh_local { server 10.0.1.1:22; } server { listen 8022; proxy_pass ssh_local; } upstream socks_local { server 10.0.1.1:1080; } server { listen 10808; proxy_pass socks_local; }测试是否转发成功 测试SOCKS服务器是否能正常转发流量 因为软件显示的问题,实际的速度比这个要高
2022年12月20日
14 阅读
0 评论
0 点赞
2022-12-20
Nginx实现UDP流量转发
Nginx从1.9之后支持UDP/TCP 第四层流量转发,接上一次的转发TCP流量,本次转发UDP流量;本次转发8.8.8.8的DNS流量。Nginx转发8.8.8.8 53UDPStream配置文件 stream { upstream local_dns { server 8.8.8.8:53; } server { listen 53 udp; proxy_pass local_dns; } }重启Nginx服务 systemctl restart nginx测试本机有没有转发8.8.8.8的流量 使用Windows客户端测试是否转发流量
2022年12月20日
16 阅读
0 评论
0 点赞
2022-12-18
Nginx实现TCP流量转发
Nginx的功能非常强大,Nginx从1.9之后开始支持了TCP 以及UDP流量转发的功能,Nginx以前转发流量只能通过第七层的HTTP流量转发,不能直接通过第四层的流量转发,非常消耗服务器资源;这里就使用OpenSSH的22端口转发到8022端口上,Nginx配置TCP流量转发写在开头,stream插件的配置文件等级和http同级,因为http模块里面只能写网站配置文件的内容,stream只能写第四层流量转发的内容,两者不能混着写在一起。stream参数仅可以写TCP/UDP转发配置,http参数只能写网站配置文件参数。配置前先修改Nginx的主配置文件 nano /etc/nginx/nginx.conf #Nginx主配置文件 #省略上部分 stream { #引用外部文件 include /etc/nginx/stream.d/*.conf; }配置Nginx网站配置文件 nano /etc/ngixn/stream.d/192.168.197.141.conf #用之前的配置文件为基础修改配置文件 #Nginx配置文件部分 stream { upstream local_ssh{ server 127.0.0.1:22; } server { #注意一点,不能配置server_name在stream配置文件里面 listen 8022; proxy_pass local_ssh; } }测试8022是不是转发到了22端口上 实测,本地22端口被转发到了8022端口上Windows 10 tcping测试 测试已监听8022端口Windows10 OpenSSH测试8022端口 Windows10测试已成功
2022年12月18日
13 阅读
0 评论
0 点赞
2022-12-16
Nginx搭建WebDav服务器
WebDav是用超文本传输协议的方法在服务器上划出一个存储块,用户可以使用用户名和密码访问存储在WebDav上的文件;WebDav可以直接挂载到本地当本地磁盘使用,目前的苹果iCloud,谷歌Google 云盘以及微软的OneDrive都是以WebDav的形式挂载到客户端的Nginx配置WebDav由于之前安装的Nginx并不包含第三方插件的WebDav,所以这里需要自己编译安装WebDav插件,(无缝切换Nginx版本) #查看做实验虚拟机的参数配置文件 nginx -V #复制看到的参数配置文件,如下(如果是用yum安装的和下面肯定一致) ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #安装编译环境 yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel gd gd-devel #创建用户,如果直接使用做实验的机器则不需要此操作 useradd -s /sbin/nologin nginx #安装依赖库1 必装 sudo yum install -y libxml2-devel.x86_64 #安装依赖库2 必装 sudo yum install -y libxslt-devel.x86_64 #下载Nginx源码包 wget https://nginx.org/download/nginx-1.22.1.tar.gz tar -xvf nginx-1.22.1.tar.gz #下载WebDav环境包 mkdir -p /nginx-moduls/ #如果git不了就下载webdav插件包,复制到虚拟机再进行编译安装(插件包需要放在/nginx-moduls/nginx-webdav目录下面或者更改编译配置文件中间的–with-http_dav_module --add-module=/nginx-moduls/nginx-webdav参数,add-module是插件路径,如果目录不一样需要自己修改) git clone https://github.com/arut/nginx-dav-ext-module.git /nginx-moduls/nginx-webdav #编译Nginx cd nginx-1.22.1/ #复制下面的参数配置文件(已经调好配置文件了,添加了这一行–with-http_dav_module --add-module=/nginx-moduls/nginx-webdav ) ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log -–with-http_dav_module --add-module=/nginx-moduls/nginx-webdav --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' #可以编译了,注意,不要执行make install,如果执行了当前的Nginx服务会出现问题 make #停止当前Nginx服务,并备份当前Nginx的应用文件(一定要停止,不停止会报错) systemctl stop nginx mv /usr/sbin/nginx /usr/sbin/nginx.bak #进入objs文件目录,给编译好的nginx附上可执行 cd objs/ chmod a+x nginx cp nginx /usr/sbin/ #启动服务 systemctl start nginx #查看是否编译了WebDav功能 nginx -V接上操作,可以看见支持了WebDav 配置目录加密 yum -y install httpd-tools mkdir -p /user/dav-pasword/ htpasswd -c /user/dav-password/.auth_password user1 Password:123456网站配置文件(可设置HTTPS加密,这里不做示范) server { listen 80; #配置虚拟名称 server_name webdav.nginx.test; location / { #配置目录如果配置了访问路径需要把root改成alias root /www/webdav.nginx.test; #配置缓存位置 dav_methods PUT DELETE MKCOL COPY MOVE; #启用 WebDav 的一些扩展关键字用于支持应用访问 dav_ext_methods PROPFIND OPTIONS; #设置 WebDav 目录下新增文件的默认权限 dav_access user:rw group:rw all:r; #创建文件夹时自动创建路径上不存在的文件夹 create_full_put_path on; #设置报文最大长度便于文件传输,这里为8MB client_max_body_size 8m; #让 nginx 自动生成索引页面,避免 403 错误 autoindex on; #---------------分割--------------- #配置目录加密,同前面的目录加密方法一样 #设置登录页面名称 auth_basic "User Login"; auth_basic_user_file /user/dav-password/.auth_password; } } 重启Nginx服务器 systemctl restart nginx在上图配置的目录内创建几个文件夹 cd /www/webdav.nginx.test mkdir test1 test2 test3 test4 下面测试curl能不能正常获取401参数 使用WinSCP工具测试是否创建了WebDav 后面会提示让你输入用户名和密码,用户名和密码为之前创建的user1 123456 输入之后进入WebDav 此时测试一下能不能在WebDav内复制文件,我们从桌面拖动一个文件进去 查看上传结果 到服务器上查看这个文件是不是存在的 目前看到在服务器内该文件是存在的
2022年12月16日
29 阅读
0 评论
1 点赞
2022-12-15
Nginx配置目录加密访问
有些情况下Nginx服务器下面的东西是不能被其他用户随意访问的,所以一般的手段是对该目录进行加密,需要指定拥有密码的用户使用密码访问。Nginx配置加密目录首先配置加密文件 yum -y install httpd-tools mkdir -p /user/dir-pasword/ htpasswd -c /user/dir-password/.auth_password user1 Password:123456配置HTML文件 mkdir -p /www/password.nginx.test/ nano /www/password.nginx.test/index.html <html> <body><p>Password Test</p></body> </html>配置Nginx网站配置文件 server { listen 80; #如果需要配置SSL下面自行配置SSL,这里不做示范 #本次实验可以在之前的配置文件中间添加使用,也可以自己新建一个站点,新建站点需要添加hosts文件 server_name password.nginx.test; location /password { #这一行引号内的可以自定义,稍后会演示这个的用途 auth_basic "User Login"; auth_basic_user_file /user/dir-password/.auth_password; #如果上方的location后面是一个"/"那么填写root或者alias都没有问题,如果上面的是/password,那么这个访问的时候查找的是/www/password.nginx.test/pasword/index.html,而不是直接找对应的目录 alias /www/password.nginx.test/; index index.html index.htm; } } 重启Nginx服务,curl http://password.nginx.test/password 提示401被加密,浏览器访问该页面,看到设置提示User Login 登录后查看页面
2022年12月15日
12 阅读
0 评论
0 点赞
2022-12-13
使用Nginx搭建一个远程打印机服务器
本篇为本系列第一个实战项目,使用Nginx的443端口搭建一个打印机服务器,本文需要的软件有cups和Nginx以及一个签名签好的SSL证书,服务器为CentOS7,客户端为CentOS7本机 20H2cups(苹果公司开发的打印机服务器软件)安装cups yum -y install epel-release yum -y install cups systemctl start cups ss -ant #如果ss -ant之后能看到631端口被监听那就是启动了cups服务,打开浏览器访问cups管理面板,添加一个PDF打印机(因为没有实体打印机) yum -y install cups-pdf浏览器打开服务器IP地址+:631端口访问管理面板点击Printer,能显示打印机名称上面的打印机URL就是这台打印机的共享目录,这个复制好这是我的打印机共享目录http://127.0.0.1:631/printers/Cups-PDF然后打开Nginx,上传SSL证书,然后反向代理127.0.0.1:631,监听80端口然后开启强制HTTPS。 server { listen 80; listen 443 ssl; server_name 192.168.197.141; ssl_certificate /crt/192.168.197.141/192.168.197.141.crt; ssl_certificate_key /crt/192.168.197.141/192.168.197.141.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:5m; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #强制HTTPS跳转 if ($scheme = http) { return 301 https://$host$request_uri; } location / { proxy_pass http://127.0.0.1:631; } }打开CentOS的打印机管理工具,因为Linux的默认打印机协议是ipp,这里直接输入默认的ipp://192.168.197.141/printers/Cups-PDF共享路径即可访问共享(走SSL)因为Nginx反向代理了打印机,会自动HTTPS加密(还可以过CDN)(实际测试过可以过CloudFlare)因为cups本身就是HTTP原理。 输入上面的ipp://192.168.197.141/printers/Cups-PDF添加,驱动选择Generic->型号CUPS-PDF->应用然后查看打印机面板,已添加一台打印机
2022年12月13日
40 阅读
0 评论
0 点赞
2022-12-12
Nginx配置负载集群
Nginx的负载集群是基于的反向代理实现的,对主服务器的要求非常高,实际上使用反向代理的时候负载服务器要求最高,负载集群服务器决定了整个业务的资源分配和所有压力;Nginx配置负载集群Nginx的负载集群主要配置的是upstream组,upstream组里面为负载服务器。配置负载集群upstream配置文件 upstream stream_server { server 127.0.0.1:8080; server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; }这种情况下的负载集群只能在某个服务器down的情况下才可以切换服务器,而且也会造成一台服务器连接数爆满,其他的服务器空闲资源太多;而且没有权重设置所以upstream配置文件需要改成下面的样子(添加权重) upstream stream_server { server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; server 127.0.0.1:8083 weight=1; }weight=1为权重平分,也就是负载流量平均分配几台设备,通俗一点就是4个客户机访问服务,然后客户机的访问流量会平均分配给四台服务器;如果是8个客户机访问服务器,那就是每台服务器会承载2个用户的访问。如果出现硬件资源有差别的情况,则可以修改权重,假设上面的8080端口服务器性能很强,是其他几台服务器的7倍,那上面的权重可以修改成下面的样子 upstream stream_server { server 127.0.0.1:8080 weight=7; server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; server 127.0.0.1:8083 weight=1; }上面的为例,假设有10个并发请求,其中第一台服务器总共承载10个中间的7个,下面的三台分别承载1个请求。标记upstream组里面的服务器的状态为down。 upstream stream_server { server 127.0.0.1:8080 down; server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=1; server 127.0.0.1:8083 weight=1; }当第一台服务器被标记成down的时候,那这个服务器就默认不请求,只请求下面三台在线的设备。配置备份服务器,假设有三台负载均衡服务器,upstream文件的内容 upstream stream_server { server 127.0.0.1:8080 down; server 127.0.0.1:8081 backup; server 127.0.0.1:8082 weight=1; }上述配置文件配置第一台服务器down状态,第二台服务器为备份服务器,第三台为正常负载服务器。Nginx正确配置负载集群 upstream stream_server { #实际使用业务的时候需要使用ip_hash保证一个连接数在关闭之前都连接一台服务器 ip_hash; #节省时间,就配置两台服务器,并且不配置权重,配置权重的实验不太好演示,需要大量的连接数才可以测试出结果。 #注意,upstream组里面的web服务器负载集群必须是能正常访问的(不能正常访问是不能成功重启Nginx服务的) server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name upstream.nginx.test; client_max_body_size 1024M; #反向代理upstream组 location / { proxy_pass http://stream_server; proxy_set_header Host $host:$server_port; } }8080端口网页的HTML文件<html> <body><p>Server 1</p></body> </html>8081端口的网页的HTML文件<html> <body><p>Server 2</p></body> </html>然后就是贴出两个网站的Nginx配置文件8080网站配置文件 server { listen 8080; server_name 127.0.0.1; location /{ root /www/web1/; index index.html index.htm; } }8081网站配置文件 server { listen 8081; server_name 127.0.0.1; location / { root /www/web2/; index index.html index.htm; } }测试curl测试服务器请求,请求之后关闭对应的服务器后再次请求 然后关闭Server 2,再次请求 服务器已经切换到服务器1上配置强制HTTPS同前面的设置方法配置HTTPS,网站配置文件 #upstream组配置文件 upstream stream_server { #实际使用业务的时候需要使用ip_hash保证一个连接数在关闭之前都连接一台服务器 ip_hash; #节省时间,就配置两台服务器,并且不配置权重,配置权重的实验不太好演示,需要大量的连接数才可以测试出结果。 #注意,upstream组里面的web服务器负载集群必须是能正常访问的(不能正常访问是不能成功重启Nginx服务的) server 127.0.0.1:8080; server 127.0.0.1:8081; } #网站配置文件 server { listen 80; listen 443 ssl; server_name upstream.nginx.test; #设置SSL证书和SSL密钥的位置(绝对路径) ssl_certificate /crt/upstream.nginx.test/upstream.nginx.test.crt; ssl_certificate_key /crt/upstream.nginx.test/upstream.nginx.test.key; #设置超时5分钟 ssl_session_timeout 5m; #配置ssl_session缓存 ssl_session_cache shared:SSL:5m; #配置SSL协议1.1 1.2 1.3 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #设置强制HTTPS,注意Nginx下面的if语句的括号周围需要空格,不能顶格写 if ($scheme = http) { return 301 https://$host$request_uri; } location / { proxy_pass http://stream_server; } }测试HTTP会不会强制301到HTTPS以及直接测试HTTPS #使用curl命令的时候记得要加-k参数 curl -k https://upstream.nginx.test #修改完参数记得要重启Nginx systemctl restart nginx
2022年12月12日
13 阅读
0 评论
2 点赞
2022-12-12
Nginx反向代理的应用
Nginx反向代理一般情况下指代理服务器接受互联网上的连接请求,然后将请求的内容转发到目标服务器上,目标服务器上的请求再通过代理服务器返回到客户端;这种方式能让真正的业务服务器不能直接通过公网的方式请求到,只能通过代理服务器代理之后再请求服务器。Nginx设置反向代理首先设置一个HTML静态页面<html> <body><p>Test Nginx Proxy</p></body> </html>然后保存到/www/127.0.0.1/目录下,保存文件名为index.html设置网站配置文件 server { #端口设置成81,等会反向代理设置的时候代理成80端口 listen 81; #主机名可以设置成IP地址 server_name 127.0.0.1; location / { root /www/127.0.0.1/; index index.html index.htm; } } systemctl restart nginx #记住要重启Nginx才可以生效配置文件设置完之后使用curl命令获取页面参数 curl http://127.0.0.1:81这是curl之后的结果 下面设置反向代理的参数首先在hosts文件内设置一个域名对应的参数(等会要用到)设置一个根本不会撞到的域名 www.nginx.test nano /etc/hosts 127.0.0.1 www.nginx.test然后设置反向代理站的配置文件 server { listen 80; server_name www.nginx.test; location / { #设置反向代理 proxy_pass http://127.0.0.1:81; } }重启Nginx服务器,curl http://www.nginx.test 查看返回结果 查看返回结果可以看出,反向代理之后自动转发到127.0.0.1地址的80端口上,实现了服务器代理访问HTTP服务同理,在反向代理的时候开启强制HTTPS访问,网站虽然经过了反向代理,隐藏了真实的服务器IP地址,但是数据传输还是会以明文的方式传送到代理服务器上;将上述反向代理文件小改 server { #监听80端口和443端口 listen 80; listen 443 ssl; #设置网站的名称 server_name www.nginx.test; #设置SSL证书和SSL密钥的位置(绝对路径) ssl_certificate /crt/www.nginx.test/www.nginx.test.crt; ssl_certificate_key /crt/www.nginx.test/www.nginx.test.key; #设置超时5分钟 ssl_session_timeout 5m; #配置ssl_session缓存 ssl_session_cache shared:SSL:5m; #配置SSL协议1.1 1.2 1.3 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #设置强制HTTPS,注意Nginx下面的if语句的括号周围需要空格,不能顶格写 if ($scheme = http) { return 301 https://$host$request_uri; } location / { #设置反向代理 proxy_pass http://127.0.0.1:81; } }保存退出后重启Nginx服务 systemctl restart nginx使用curl命令尝试是否被强制301到HTTPS上 然后使用curl命令请求SSL页面(需要-k参数忽略安全性) curl -k https://www.nginx.testHTTPS请求结果
2022年12月12日
10 阅读
0 评论
0 点赞
2022-12-11
Nginx配置SSL并设置强制HTTPS
HTTPS(超文本安全传输协议)是现代网站常用的访问加密手段,使用范围非常广泛,各大银行网站,购物网站以及绝大部分涉及到核心商业利益的网站都使用了HTTPS协议;本文详细解释基于CentOS下使用Nginx搭建HTTPS网站。首先需要的软件 KeyManager (亚洲诚信) >>>下载软件<<< CentOS7 + Nginx首先签发一个SSL证书,打开KeyManager,然后点击创建证书,证书类型为服务器证书,名称填写localhost(因为没有实际的域名,不太好指定证书),其他的默认,点击创建证书 导出证书,导出类型为Nginx(pem) 导出之后上传到服务器里面,找到Nginx的网站配置文件 #在网站配置文件下面添加一条server参数 server{ #监听443端口(HTTPS监听的是443端口HTTP监听的是80端口) listen 80; listen 443 ssl; #服务器主机名 server_name localhost; #证书文件位置,以你上传的位置为准 ssl_certificate /crt/localhost/localhost_chain.crt; #证书密钥文件位置,以你上传的位置为准 ssl_certificate_key /crt/localhost/localhost_key.key; #设置超时5分钟 ssl_session_timeout 5m; #配置ssl_session缓存 ssl_session_cache shared:SSL:5m; #配置SSL协议 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #配置加密套件(这里给个通用写法,因为加密类型比较多)OpenSSL标准 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; #配置强制HTTPS if ($scheme = http) { #这一行的括号需要有空格,不然重启会报错 return 301 https://$host$request_uri; } location / { root /www/html; index index.html index.htm; } }编辑完毕之后重启Nginx服务,如果遇到报错就使用 systemctl status nginx #查看文件哪里报错了配置完重启不报错了那就测试功能是否正常 #使用curl命令请求本地页面,正确配置是301 curl http://localhost #使用curl -k因为证书是自己签名的,所以一般情况下不受信用的 curl -k https://localhost 现在可以看见HTTPS curl之后的网页
2022年12月11日
5 阅读
0 评论
0 点赞
2022-12-10
Nginx做重定向
重定向分为301重定向和302重定向301重定向是永久重定向,例如某论坛更换了域名,但是原来搜索引擎SEO优化只有原来的域名才有,新的域名没有SEO优化,重新更新优化需要时间,所以需要在原来的域名上做301永久重定向;在重定向之后原来的域名和URL都会被重定向到新的域名和URL上,这种操作在SEO优化里面是可以被允许的,或者301被用来强制HTTPS,在很多有重要服务的网站,没有SSL加密是很危险的事情,可能会导致信息泄露,所以可以在用户请求的时候判断是不是http协议请求的网站,如果条件成立就强制301到HTTPS的网站上。302是临时重定向,浏览器会认为请求的域名是临时的,所以不会直接回显重定向的域名和URL,所以一般用于临时的重定向,一般情况下浏览器认为的302重定向是不安全的;302重定向可能会被挟持URL,攻击者会修改302重定向的参数,将网站重定向到色情网站以及钓鱼网站或者诈骗网站,通常情况下在SEO权重里面,用到302重定向的网站会被搜索引擎认为是非法引用用来干扰搜索结果,通常情况下会被降权处罚。Nginx配置301重定向下面修改配置文件 server { #监听80端口 listen 80; #网站虚拟主机名 server_name www.123test.com; #location为访问的目录代理,/为域名后面不需要携带目录名 #假设是/test,那下面的curl测试就需要改成http://www.123test.com/test才可以访问到 location / { #这里使用return 301方式跳转到baidu #301的方式共有三种,这种是比较常用的一种方式 return 301 https://baidu.com; #默认文档,这里可要可不要 index index.html index.htm; } } #测试使用命令 curl http://www.123test.com本次使用域名来自前面文章做实验使用的域名,需要改hosts文件测试截图 Nginx设置302重定向修改配置文件 server { listen 80; server_name www.123test.com; location / { return 302 https://baidu.com; index index.html index.htm; } } #因为302和301的配置文件差不多,配置文件不做解释,直接跳过到下面测试环节使用curl http://www.123test.com测试是否能正常跳转
2022年12月10日
7 阅读
0 评论
0 点赞
2022-12-10
Nginx设置第一个网站
Windows还是Linux下的Nginx配置文件均相同,后期的学习与探究都在CentOS7上完成为方便配置以及增加可阅读性,CentOS安装GNOME桌面,使用桌面版配置Linux下默认的主配置文件在/etc/nginx/nginx.conf网站的配置文件在/etc/nginx/conf.d/*.conf如果是自己编译安装的Nginx,默认的主配置文件目录是根据自己编译安装的位置有关我前面教程编译安装位置/usr/local/nginx/conf/nginx.conf网站配置文件在程序安装目录下面的conf文件夹内为了方便起见,本文使用软件源安装的默认主配置文件位置和默认网站配置文件位置。Linux主配置文件添加索引引用网站配置文件(网站配置文件可以写在Nginx主配置文件下)(如果出现文件写在conf.d文件夹下的配置文件不生效的情况就把网站配置文件写在主配置文件下)user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { #include 为引用conf.d目录下的所有.conf类型引用到Nginx主配置文件下 #如果不知道填写在哪,那就把主配置文件下的所有http参数,仅输入下面参数 include /etc/nginx/conf.d/*.conf; }网站配置文件格式详解server { #监听ipv4的80端口和ipv6的80端口 listen 80; listen [::]:80; #下面一行设置域名,为访问该网站的域名,如果需要本地IP地址访问此网站可以不设置server_name参数 server_name www.123test.com; #root为网站文件存放的位置,需要设置成网站默认文件所在目录的绝对路径 root /www/html/; #设置访问网站默认文件,如果不填那就无法显示网页 index index.html; } #因为默认不存在/www/html目录,所以需要自己手动创建这个目录 cd / && mkdir www && cd /www && mkdir html && chmod 777 html && \ chmod 777 /www && cd /www/html nano index.html #在index.html下面输入 <html> <body> <h1>NO.1</h1> <h2>NO.2</h2> <h3>NO.3</h3> </body> </html> #输入完成index.html文件之后Ctrl+O保存,Ctrl+X退出 #重启Nginx服务器 systemctl restart nginx #需要关闭SELIUX,不然访问会报403错误 nano /etc/selinux/config #将SELINUX=enforcing改成SELINUX=disabled reboot #需要重启生效SELINUX 修改HOSTS文件,以生效server_name参数 nano /etc/hosts #添加下面条目 本机IP domain #我的配置文件 192.168.197.141 www.123test.com #打开终端输入 curl http://www.123test.com 接上代码参数,输入后得出结果
2022年12月10日
5 阅读
0 评论
0 点赞
2022-12-10
安装Nginx
CentOS7 带桌面安装Nginx使用包管理器直接安装Nginx#安装第三方软件源(可以用官方源) yum -y install epel-release #安装Nginx yum -y install nginx #启动Nginx systemctl start nginx编译安装Nginx cd / #下载官网的安装包(当前最新版) wget https://nginx.org/download/nginx-1.23.2.tar.gz #解压 tar -xvf nginx-1.23.2.tar.gz #进入目录 cd nginx-1.23.2 #安装编译需要的软件包 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel nano #创建Nginx需要的用户和组,等会需要用到 groupadd www useradd -g www www #配置编译参数 ./configure --user=www --group=www \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_realip_module \ --with-threads #编译并安装 make && make install #查看安装版本 /usr/local/nginx/sbin/nginx -V #添加连接,并设置systemctl启动 ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx #设置关键文件 nano /etc/init.d/nginx #填入下方内容 #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /usr/local/nginx/conf/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /usr/local/nginx/logs/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac #输完之后给这个文件上执行权限 chmod a+x /etc/init.d/nginx #把Nginx加入到chkconfig管理列表里面 chkconfig --add /etc/init.d/nginx chkconfig nginx on #启动服务 systemctl start nginx #设置开机自启 systemctl enable nginx #查看服务状态 systemctl status nginx #打开浏览器查看能不能访问Nginx的默认页 #浏览器输入localhost:80 Windows 下安装Nginx下载Nginx For Windows 下载后解压安装包,启动Nginx打开浏览器输入localhost查看默认页
2022年12月10日
11 阅读
0 评论
0 点赞
2022-12-10
Nginx概述
Nginx是一个HTTP和反向代理服务器,邮件代理服务器以及第四层流量(TCP/UDP)代理服务器。Nginx的优点 可以高并发连接;官方测试Nginx可以单服务端支撑5万多连接,在实际的生产环境中可以支撑2-4万并发连接数。 Nginx是个高性能的Web服务器,反向代理服务器,Nginx足够轻量,对比Apache来说,Nginx使用的硬件资源足够低,配合FastCGI(Nginx+PHP)的情况下,当前3万个并发连接下,Nginx消耗的内存不足300MB,加上64个进程的PHP-CGI(每个CGI消耗20MB的内存)消耗1280MB,整个Web服务消耗1.5GB左右的内存; 使用Nginx的国际大厂 Netfix网站服务器截图 Bilibili网站服务器截图(Tengine是阿里巴巴自己基于Nginx二次编译给淘宝和天猫应对双十一的优化版) Nginx的架构 nginx工作(worker)码包括核心和功能模块。 nginx的核心是负责维护严格的运行循环,并在请求处理的每个阶段执行模块代码的适当部分。 模块构成了大部分的演示和应用层功能。 模块读取和写入网络和存储,转换内容,执行出站过滤,应用服务器端包含操作,并在代理启动时将请求传递给上游服务器。nginx的模块化架构通常允许开发人员扩展一组Web服务器功能,而无需修改nginx内核。 nginx模块略有不同,即核心模块,事件模块,阶段处理程序,协议,可变处理程序,过滤器,上游和负载平衡器。nginx不支持动态加载的模块; 即在构建阶段将模块与核心一起编译。在处理与接受,处理和管理网络连接和内容检索相关的各种操作时,nginx在基于Linux,Solaris和BSD的操作系统中使用事件通知机制和一些磁盘I/O性能增强,如:kqueue,epoll, 和事件端口。 目标是为操作系统提供尽可能多的提示,以便及时获取入站和出站流量,磁盘操作,读取或写入套接字,超时等异步反馈。 对于每个基于Unix的nginx运行的操作系统,大量优化了复用和高级I/O操作的不同方法的使用。nginx架构的概述如下图所示 (来自网络)
2022年12月10日
4 阅读
0 评论
0 点赞
2022-12-01
RIP动态路由协议
以思科Packet Tracer为例下图制造了一个拓补图, 这个拓补图的地址表是设备均为三层交换机SW1 vlan 1 192.168.22.1/24G0/1 172.16.1.1/24G0/2 172.16.3.2/24SW2vlan 1 192.168.23.1/24G0/1 172.16.2.1/24G0/2 172.16.1.2/24SW3vlan 1 192.168.24.1/24G0/1 172.16.3.1/24G0/2 172.16.2.2/24上图所有交换机需要全部开启路由模式ip routing然后使用rip命令开启RIP动态路由router rip network IP段 #这里的IP地址段是路由器接口上IP所在的IP地址段,其他路由器的不需要开完之后查看路由表是否收敛 图片得知,头部显示R的为RIP动态收敛的路由表,解析RIP的收敛原理启用RIP路由协议的路由器或者三层交换机会对邻居三层开启RIP的设备发送广播报文,携带本机对外开放网段,lRIP动态路由协议最大支持设备数量为15个,超过就无法使用
2022年12月01日
8 阅读
0 评论
0 点赞
2022-11-30
NTFS分区三个重要参数的计算过程
分区总扇区数的计算进入分区0号扇区(WinHex点击一下分区自动跳转到0扇区)当前位置偏移到6291456(十进制偏移)扇区(大约是3GB大小的位置)*截图一张找到偏移之后的右侧ASCII字符串的$MFT(对应的Hex是24 00 4D 00 46 00 54),左侧24 00 4D 00 46 00 54下一行的开头为MFT的80属性,80属性向下第四行为簇流运行,下截图为例 如图所示 31 40 00 00 0C 分解第一个数字 31 后面的1代表 31 数字后1个字节 (这里指的是40)前面的3代表40后面三个字节(00 00 0C);这里读取的时候直接跳过一个字节读取连续三个字节的参数; 上图示范2:假设80属性下的簇流运行的参数为33 40 21 30 00 00 51 则这里直接跳过33后面三个字节之后读取连续三个字节参数;读取参数的方法,打开数据解释器,点击后面需要连续读取参数的第一个字节,查看数据解释器的32bit参数 此处的参数得知为786432然后从此处向下偏移12个扇区(十进制12)到$Bitmap文件位置,使用模板读取Bitmap文件大小 从上图得知,Bitmap的大小为491424字节计算簇大小,使用公式:簇大小 = $MFT文件位置 / 上图得到簇流运行参数 分区总扇区数 = Bitmap大小 8 簇大小 -1上图参数可直接计算簇大小的数值为:6291456 / 786432 = 8分区总扇区数 = 491424 8 8 - 1 = 31451135
2022年11月30日
5 阅读
0 评论
0 点赞
2022-11-26
硬盘SMART表参数详解
01(001)底层数据读取错误率 Raw Read Error Rate数据为0或任意值,当前值应远大于与临界值。 底层数据读取错误率是磁头从磁盘表面读取数据时出现的错误,对某些硬盘来说,大于0的数据表明磁盘表面或者读写磁头发生问题,如介质损伤、磁头污染、磁头共振等等。不过对希捷硬盘来说,许多硬盘的这一项会有很大的数据量,这不代表有任何问题,主要是看当前值下降的程度。 在固态硬盘中,此项的数据值包含了可校正的错误与不可校正的RAISE错误(UECC+URAISE)。注:RAISE(Redundant Array of Independent Silicon Elements)意为独立硅元素冗余阵列,是固态硬盘特有的一种冗余恢复技术,保证内部有类似RAID阵列的数据安全性。02(002)磁盘读写通量性能 Throughput Performance此参数表示硬盘的读写通量性能,数据值越大越好。当前值如果偏低或趋近临界值,表示硬盘存在严重的问题,但现在的硬盘通常显示数据值为0或根本不显示此项,一般在进行了人工脱机SMART测试后才会有数据量。03(003)主轴起旋时间 Spin Up Time主轴起旋时间就是主轴电机从启动至达到额定转速所用的时间,数据值直接显示时间,单位为毫秒或者秒,因此数据值越小越好。不过对于正常硬盘来说,这一项仅仅是一个参考值,硬盘每次的启动时间都不相同,某次启动的稍慢些也不表示就有问题。硬盘的主轴电机从启动至达到额定转速大致需要4秒~15秒左右,过长的启动时间说明电机驱动电路或者轴承机构有问题。旦这一参数的数据值在某些型号的硬盘上总是为0,这就要看当前值和最差值来判断了。 对于固态硬盘来说,所有的数据都是保存在半导体集成电路中,没有主轴电机,所以这项没有意义,数据固定为0,当前值固定为100。04(004)启停计数 Start/Stop Count这一参数的数据是累计值,表示硬盘主轴电机启动/停止的次数,新硬盘通常只有几次,以后会逐渐增加。系统的某些功能如空闲时关闭硬盘等会使硬盘启动/停止的次数大为增加,在排除定时功能的影响下,过高的启动/停止次数(远大于通电次数0C)暗示硬盘电机及其驱动电路可能有问题。 这个参数的当前值是依据某种公式计算的结果,例如对希捷某硬盘来说临界值为20,当前值是通过公式“100-(启停计数/1024)”计算得出的。若新硬盘的启停计数为0,当前值为100-(0/1024)=100,随着启停次数的增加,该值不断下降,当启停次数达到81920次时,当前值为100-(81920/1024)=20,已达到临界值,表示从启停次数来看,该硬盘已达设计寿命,当然这只是个寿命参考值,并不具有确定的指标性。 这一项对于固态硬盘同样没有意义,数据固定为0,当前值固定为100。05(005)重映射扇区计数 Reallocated Sectors Count/ 退役块计数 Retired Block Count数据应为0,当前值应远大于临界值。当硬盘的某扇区持续出现读/写/校验错误时,硬盘固件程序会将这个扇区的物理地址加入缺陷表(G-list),将该地址重新定向到预先保留的备用扇区并将其中的数据一并转移,这就称为重映射。执行重映射操作后的硬盘在Windows常规检测中是无法发现不良扇区的,因其地址已被指向备用扇区,这等于屏蔽了不良扇区。 这项参数的数据值直接表示已经被重映射扇区的数量,当前值则随着数据值的增加而持续下降。当发现此项的数据值不为零时,要密切注意其发展趋势,若能长期保持稳定,则硬盘还可以正常运行;若数据值不断上升,说明不良扇区不断增加,硬盘已处于不稳定状态,应当考虑更换了。如果当前值接近或已到达临界值(此时的数据值并不一定很大,因为不同硬盘保留的备用扇区数并不相同),表示缺陷表已满或备用扇区已用尽,已经失去了重映射功能,再出现不良扇区就会显现出来并直接导致数据丢失。 这一项不仅是硬盘的寿命关键参数,而且重映射扇区的数量也直接影响硬盘的性能,例如某些硬盘会出现数据量很大,但当前值下降不明显的情况,这种硬盘尽管还可正常运行,但也不宜继续使用。因为备用扇区都是位于磁盘尾部(靠近盘片轴心处),大量的使用备用扇区会使寻道时间增加,硬盘性能明显下降。 这个参数在机械硬盘上是非常敏感的,而对于固态硬盘来说同样具有重要意义。闪存的寿命是正态分布的,例如说MLC能写入一万次以上,实际上说的是写入一万次之前不会发生“批量损坏”,但某些单元可能写入几十次就损坏了。换言之,机械硬盘的盘片不会因读写而损坏,出现不良扇区大多与工艺质量相关,而闪存的读写次数则是有限的,因而损坏是正常的。所以固态硬盘在制造时也保留了一定的空间,当某个存储单元出现问题后即把损坏的部分隔离,用好的部分来顶替。这一替换方法和机械硬盘的扇区重映射是一个道理,只不过机械硬盘正常时极少有重映射操作,而对于固态硬盘是经常性的。 在固态硬盘中这一项的数据会随着使用而不断增长,只要增长的速度保持稳定就可以。通常情况下,数据值=100-(100×被替换块/必需块总数),因此也可以估算出硬盘的剩余寿命。 Intel固态硬盘型号的第十二个字母表示了两种规格,该字母为1表示第一代的50纳米技术的SSD,为2表示第二代的34纳米技术的SSD,如SSDSA2M160G2GN就表示是34nm的SSD。所以参数的查看也有两种情况: 50nm的SSD(一代)要看当前值。这个值初始是100,当出现替换块的时候这个值并不会立即变化,一直到已替换四个块时这个值变为1,之后每增加四个块当前值就+1。也就是100对应0~3个块,1对应4~7个块,2对应8~11个块…… 34nm的SSD(二代)直接查看数据值,数据值直接表示有多少个被替换的块。06(006)读取通道余量 Read Channel Margin这一项功能不明,现在的硬盘也不显示这一项。07(007)寻道错误率 Seek Error Rate数据应为0,当前值应远大于与临界值。 这一项表示磁头寻道时的错误率,有众多因素可导致寻道错误率上升,如磁头组件的机械系统、伺服电路有局部问题,盘片表面介质不良,硬盘温度过高等等。 通常此项的数据应为0,但对希捷硬盘来说,即使是新硬盘,这一项也可能有很大的数据量,这不代表有任何问题,还是要看当前值是否下降。08(008)寻道性能 Seek Time Performance此项表示硬盘寻道操作的平均性能(寻道速度),通常与前一项(寻道错误率)相关联。当前值持续下降标志着磁头组件、寻道电机或伺服电路出现问题,但现在许多硬盘并不显示这一项。09(009)通电时间累计 Power-On Time Count (POH)这个参数的含义一目了然,表示硬盘通电的时间,数据值直接累计了设备通电的时长,新硬盘当然应该接近0,但不同硬盘的计数单位有所不同,有以小时计数的,也有以分、秒甚至30秒为单位的,这由磁盘制造商来定义。 这一参数的临界值通常为0,当前值随着硬盘通电时间增加会逐渐下降,接近临界值表明硬盘已接近预计的设计寿命,当然这并不表明硬盘将出现故障或立即报废。参考磁盘制造商给出的该型号硬盘的MTBF(平均无故障时间)值,可以大致估计剩余寿命或故障概率。 对于固态硬盘,要注意“设备优先电源管理功能(device initiated power management,DIPM)”会影响这个统计:如果启用了DIPM,持续通电计数里就不包括睡眠时间;如果关闭了DIPM功能,那么活动、空闲和睡眠三种状态的时间都会被统计在内。0A(010)主轴起旋重试次数 Spin up Retry Count数据应为0,当前值应大于临界值。 主轴起旋重试次数的数据值就是主轴电机尝试重新启动的计数,即主轴电机启动后在规定的时间里未能成功达到额定转速而尝试再次启动的次数。数据量的增加表示电机驱动电路或是机械子系统出现问题,整机供电不足也会导致这一问题。0B(011)磁头校准重试计数 Calibration Retry Count数据应为0,当前值应远大于与临界值。硬盘在温度发生变化时,机械部件(特别是盘片)会因热胀冷缩出现形变,因此需要执行磁头校准操作消除误差,有的硬盘还内置了磁头定时校准功能。这一项记录了需要再次校准(通常因上次校准失败)的次数。 这一项的数据量增加,表示电机驱动电路或是机械子系统出现问题,但有些型号的新硬盘也有一定的数据量,并不表示有问题,还要看当前值和最差值。0C(012)通电周期计数 Power Cycle Count通电周期计数的数据值表示了硬盘通电/断电的次数,即电源开关次数的累计,新硬盘通常只有几次。 这一项与启停计数(04)是有区别的,一般来说,硬盘通电/断电意味着计算机的开机与关机,所以经历一次开关机数据才会加1;而启停计数(04)表示硬盘主轴电机的启动/停止(硬盘在运行时可能多次启停,如系统进入休眠或被设置为空闲多少时间而关闭)。所以大多情况下这个通电/断电的次数会小于启停计数(04)的次数。通常,硬盘设计的通电次数都很高,如至少5000次,因此这一计数只是寿命参考值,本身不具指标性。0D(013)软件读取错误率 Soft Read Error Rate软件读取错误率也称为可校正的读取误码率,就是报告给操作系统的未经校正的读取错误。数据值越低越好,过高则可能暗示盘片磁介质有问题。AA(170)坏块增长计数 Grown Failing Block Count(Micron 镁光)读写失败的块增长的总数。AB(171)编程失败块计数 Program Fail Block CountFlash编程失败块的数量。AC(172)擦写失败块计数 Erase Fail Block Count擦写失败块的数量。AD(173)磨损平衡操作次数(平均擦写次数) / Wear Leveling Count(Micron 镁光)所有好块的平均擦写次数。 Flash芯片有写入次数限制,当使用FAT文件系统时,需要频繁地更新文件分配表。如果闪存的某些区域读写过于频繁,就会比其它区域磨损的更快,这将明显缩短整个硬盘的寿命(即便其它区域的擦写次数还远小于最大限制)。所以,如果让整个区域具有均匀的写入量,就可明显延长芯片寿命,这称为磨损均衡措施。AE(174)意外失电计数 Unexpected Power Loss Count硬盘自启用后发生意外断电事件的次数。B1(177)磨损范围对比值 Wear Range Delta磨损最重的块与磨损最轻的块的磨损百分比之差。B4(180)未用的备用块计数 Unused Reserved Block Count Total(惠普)固态硬盘会保留一些容量来准备替换损坏的存储单元,所以可用的预留空间数非常重要。这个参数的当前值表示的是尚未使用的预留的存储单元数量。B5(181)编程失败计数 Program Fail Count用4个字节显示已编程失败的次数,与(AB)参数相似。B5(181)非4KB对齐访问数 Non-4k Aligned Access(Micron 镁光)B6(182)擦写失败计数 Erase Fail Count用4个字节显示硬盘自启用后块擦写失败的次数,与(AC)参数相似。B7(183)串口降速错误计数 SATA Downshift Error Count这一项表示了SATA接口速率错误下降的次数。通常硬盘与主板之间的兼容问题会导致SATA传输级别降级运行。B8(184)I/O错误检测与校正 I/O Error Detection and Correction(IOEDC)“I/O错误检测与校正”是惠普公司专有的SMART IV技术的一部分,与其他制造商的I/O错误检测和校正架构一样,它记录了数据通过驱动器内部高速缓存RAM传输到主机时的奇偶校验错误数量。 B8(184)点到点错误检测计数 End to End Error Detection CountIntel第二代的34nm固态硬盘有点到点错误检测计数这一项。固态硬盘里有一个LBA(logical block addressing,逻辑块地址)记录,这一项显示了SSD内部逻辑块地址与真实物理地址间映射的出错次数。 B8(184)原始坏块数 Init Bad Block Count(Indilinx芯片)硬盘出厂时已有的坏块数量。B9(185)磁头稳定性 Head Stability(西部数据)意义不明。BA(186)感应运算振动检测 nduced Op-Vibration Detection(西部数据)意义不明。BB(187)无法校正的错误 Reported Uncorrectable Errors(希捷)报告给操作系统的无法通过硬件ECC校正的错误。如果数据值不为零,就应该备份硬盘上的数据了。 报告给操作系统的在所有存取命令中出现的无法校正的RAISE(URAISE)错误。BC(188)命令超时 Command Timeout由于硬盘超时导致操作终止的次数。通常数据值应为0,如果远大于零,最有可能出现的是电源供电问题或者数据线氧化致使接触不良,也可能是硬盘出现严重问题。BD(189)高飞写入 High Fly Writes磁头飞行高度监视装置可以提高读写的可靠性,这一装置时刻监测磁头的飞行高度是否在正常范围来保证可靠的写入数据。如果磁头的飞行高度出现偏差,写入操作就会停止,然后尝试重新写入或者换一个位置写入。这种持续的监测过程提高了写入数据的可靠性,同时也降低了读取错误率。这一项的数据值就统计了写入时磁头飞行高度出现偏差的次数。BD(189)出厂坏块计数 Factory Bad Block Count(Micron 镁光芯片)BE(190)气流温度 Airflow Temperature这一项表示的是硬盘内部盘片表面的气流温度。在希捷公司的某些硬盘中,当前值=(100-当前温度),因此气流温度越高,当前值就越低,最差值则是当前值曾经到达过的最低点,临界值由制造商定义的最高允许温度来确定,而数据值不具实际意义。许多硬盘也没有这一项参数。BF(191)冲击错误率 G-sense error rate这一项的数据值记录了硬盘受到机械冲击导致出错的频度。C0(192)断电返回计数 Power-Off Retract Count当计算机关机或意外断电时,硬盘的磁头都要返回停靠区,不能停留在盘片的数据区里。正常关机时电源会给硬盘一个通知,即Standby Immediate,就是说主机要求将缓存数据写入硬盘,然后就准备关机断电了(休眠、待机也是如此);意外断电则表示硬盘在未收到关机通知时就失电,此时磁头会自动复位,迅速离开盘片。 这个参数的数据值累计了磁头返回的次数。但要注意这个参数对某些硬盘来说仅记录意外断电时磁头的返回动作;而某些硬盘记录了所有(包括休眠、待机,但不包括关机时)的磁头返回动作;还有些硬盘这一项没有记录。因此这一参数的数据值在某些硬盘上持续为0或稍大于0,但在另外的硬盘上则会大于通电周期计数(0C)或启停计数(04)的数据。在一些新型节能硬盘中,这一参数的数据量还与硬盘的节能设计相关,可能会远大于通电周期计数(0C)或启停计数(04)的数据,但又远小于磁头加载/卸载计数(C1)的数据量。 对于固态硬盘来说,虽然没有磁头的加载/卸载操作,但这一项的数据量仍然代表了不安全关机,即发生意外断电的次数。C1(193)磁头加载/卸载计数 Load/Unload Cycle Count对于过去的硬盘来说,盘片停止旋转时磁头臂停靠于盘片中心轴处的停泊区,磁头与盘片接触,只有当盘片旋转到一定转速时,磁头才开始漂浮于盘片之上并开始向外侧移动至数据区。这使得磁头在硬盘启停时都与盘片发生摩擦,虽然盘片的停泊区不存储数据,但无疑启停一个循环,就使磁头经历两次磨损。所以对以前的硬盘来说,磁头起降(加载/卸载)次数是一项重要的寿命关键参数。而在现代硬盘中,平时磁头臂是停靠于盘片之外的一个专门设计的停靠架上,远离盘片。只有当盘片旋转达到额定转速后,磁头臂才开始向内(盘片轴心)转动使磁头移至盘片区域(加载),磁头臂向外转动返回至停靠架即卸载。这样就彻底杜绝了硬盘启停时磁头与盘片接触的现象,西部数据公司将其称为“斜坡加载技术”。由于磁头在加载/卸载过程中始终不与盘片接触,不存在磁头的磨损,使得这一参数的重要性已经大大下降。这个参数的数据值就是磁头执行加载/卸载操作的累计次数。从原理上讲,这个加载/卸载次数应当与硬盘的启停次数相当,但对于笔记本内置硬盘以及台式机新型节能硬盘来说,这一项的数据量会很大。这是因为磁头臂组件设计有一个固定的返回力矩,保证在意外断电时磁头能靠弹簧力自动离开盘片半径范围,迅速返回停靠架。所以要让硬盘运行时磁头保持在盘片的半径之内,就要使磁头臂驱动电机(寻道电机)持续通以电流。而让磁头臂在硬盘空闲几分钟后就立即执行卸载动作,返回到停靠架上,既有利于节能,又降低了硬盘受外力冲击导致磁头与盘片接触的概率。虽然再次加载会增加一点寻道时间,但毕竟弊大于利,所以在这类硬盘中磁头的加载/卸载次数会远远大于通电周期计数(0C)或启停计数(04)的数据量。不过这种加载/卸载方式已经没有了磁头与盘片的接触,所以设计值也已大大增加,通常笔记本内置硬盘的磁头加载/卸载额定值在30~60万次,而台式机新型节能硬盘的磁头加载/卸载设计值可达一百万次。C2(194)温度 Temperature温度的数据值直接表示了硬盘内部的当前温度。硬盘运行时最好不要超过45℃,温度过高虽不会导致数据丢失,但引起的机械变形会导致寻道与读写错误率上升,降低硬盘性能。硬盘的最高允许运行温度可查看硬盘厂商给出的数据,一般不会超过60℃。 不同厂家对温度参数的当前值、最差值和临界值有不同的表示方法:希捷公司某些硬盘的当前值就是实际温度(摄氏)值,最差值则是曾经达到过的最高温度,临界值不具意义;而西部数据公司一些硬盘的最差值是温度上升到某值后的时间函数,每次升温后的持续时间都将导致最差值逐渐下降,当前值则与当前温度成反比,即当前温度越高,当前值越低,随实际温度波动。C3(195)硬件ECC校正 Hardware ECC RecoveredECC(Error Correcting Code)的意思是“错误检查和纠正”,这个技术能够容许错误,并可以将错误更正,使读写操作得以持续进行,不致因错误而中断。这一项的数据值记录了磁头在盘片上读写时通过ECC技术校正错误的次数,不过许多硬盘有其制造商特定的数据结构,因此数据量的大小并不能直接说明问题。 C3(195)实时无法校正错误计数 On the fly ECC Uncorrectable Error Count这一参数记录了无法校正(UECC)的错误数量。 C3(195)编程错误块计数 Program Failure block Count(Indilinx芯片)C4(196)重映射事件计数 Reallocetion Events Count数据应为0,当前值应远大于临界值。 这个参数的数据值记录了将重映射扇区的数据转移到备用扇区的尝试次数,是重映射操作的累计值,成功的转移和不成功的转移都会被计数。因此这一参数与重映射扇区计数(05)相似,都是反映硬盘已经存在不良扇区。 C4(196)擦除错误块计数 Erase Failure block Count(Indilinx芯片)在固态硬盘中,这一参数记录了被重映射的块编程失败的数量。C5(197)当前待映射扇区计数 Current Pending Sector Count数据应为0,当前值应远大于临界值。这个参数的数据表示了“不稳定的”扇区数,即等待被映射的扇区(也称“被挂起的扇区”)数量。如果不稳定的扇区随后被读写成功,该扇区就不再列入等待范围,数据值就会下降。 仅仅读取时出错的扇区并不会导致重映射,只是被列入“等待”,也许以后读取就没有问题,所以只有在写入失败时才会发生重映射。下次对该扇区写入时如果继续出错,就会产生一次重映射操作,此时重映射扇区计数(05)与重映射事件计数(C4)的数据值增加,此参数的数据值下降。C5(197)读取错误块计数(不可修复错误)Read Failure block Count(Indilinx芯片)C6(198)脱机无法校正的扇区计数 Offline Uncorrectable Sector Count数据应为0,当前值应远大于临界值。这个参数的数据累计了读写扇区时发生的无法校正的错误总数。数据值上升表明盘片表面介质或机械子系统出现问题,有些扇区肯定已经不能读取,如果有文件正在使用这些扇区,操作系统会返回读盘错误的信息。下一次写操作时会对该扇区执行重映射。 C6(198)总读取页数 Total Count of Read Sectors(Indilinx芯片)C7(199)Ultra ATA访问校验错误率 Ultra ATA CRC Error Rate这个参数的数据值累计了通过接口循环冗余校验(Interface Cyclic Redundancy Check,ICRC)发现的数据线传输错误的次数。如果数据值不为0且持续增长,表示硬盘控制器→数据线→硬盘接口出现错误,劣质的数据线、接口接触不良都可能导致此现象。由于这一项的数据值不会复零,所以某些新硬盘也会出现一定的数据量,只要更换数据线后数据值不再继续增长,即表示问题已得到解决。 C7(199)总写入页数 Total Count of Write Sectors(Indilinx芯片)C8(200)写入错误率 Write Error Rate / 多区域错误率 Multi-Zone Error Rate(西部数据)数据应为0,当前值应远大于临界值。 这个参数的数据累计了向扇区写入数据时出现错误的总数。有的新硬盘也会有一定的数据量,若数据值持续快速升高(当前值偏低),表示盘片、磁头组件可能有问题。 C8(200)总读取指令数 Total Count of Read Command(Indilinx芯片)C9(201)脱道错误率 Off Track Error Rate / 逻辑读取错误率 Soft Read Error Rate数据值累积了读取时脱轨的错误数量,如果数据值不为0,最好备份硬盘上的资料。 C9(201)TA Counter Detected(意义不明)C9(201)写入指令总数 Total Count of Write Command(Indilinx芯片)CA(202)数据地址标记错误 Data Address Mark errors此项的数据值越低越好(或者由制造商定义)。 CA(202)TA Counter Increased(意义不明)CA(202)剩余寿命 Percentage Of The Rated Lifetime Used(Micron 镁光芯片)当前值从100开始下降至0,表示所有块的擦写余量统计。计算方法是以MLC擦写次数除以50,SLC擦写次数除以1000,结果取整数,将其与100的差值作为当前值(MLC预计擦写次数为5000,SLC预计擦写次数为100000)。 CA(202)闪存总错误bit数 Total Count of error bits from flash(Indilinx芯片)CB(203)软件ECC错误数 Run Out Cancel错误检查和纠正(ECC)出错的频度。 CB(203)校正bit错误的总读取页数 Total Count of Read Sectors with correct bits error(Indilinx芯片)CC(204)软件ECC校正 Soft ECC Correction通过软件ECC纠正错误的计数。 CC(204)坏块满标志 Bad Block Full Flag(Indilinx芯片)CD(205)热骚动错误率 Thermal Asperity Rate (TAR)由超温导致的错误。数据值应为0。 CD(205)最大可编程/擦除次数 Max P/E Count(Indilinx芯片)CE(206)磁头飞行高度 Flying Height磁头距离盘片表面的垂直距离。高度过低则增加了磁头与盘片接触导致损坏的可能性;高度偏高则增大了读写错误率。不过准确地说,硬盘中并没有任何装置可以直接测出磁头的飞行高度,制造商也只是根据磁头读取的信号强度来推算磁头飞行高度。 CE(206)底层数据写入出错率 Write Error RateCE(206)最小擦写次数 Erase Count Min(Indilinx芯片)CF(207)主轴过电流 Spin High Current数据值记录了主轴电机运行时出现浪涌电流的次数,数据量的增加意味着轴承或电机可能有问题。 CF(207)最大擦写次数 Erase Count Max(Indilinx芯片)D0(208)主轴电机重启次数 Spin Buzz数据值记录了主轴电机反复尝试启动的次数,这通常是由于电源供电不足引起的。 D0(208)平均擦写次数Erase Count Average(Indilinx芯片)D1(209)脱机寻道性能 Offline Seek Performance这一项表示驱动器在脱机状态下的寻道性能,通常用于工厂内部测试。 D1(209)剩余寿命百分比 Remaining Life %(Indilinx芯片)D2(210)斜坡加载值 Ramp Load Value这一项仅见于几年前迈拓制造的部分硬盘。通常数据值为0,意义不明。 D2(210)坏块管理错误日志 BBM Error Log(Indilinx芯片)D3(211)写入时振动 Vibration During Write写入数据时受到受到外部振动的记录。 D3(211)SATA主机接口CRC写入错误计数 SATA Error Count CRC (Write)(Indilinx芯片)D4(212)写入时冲击 Shock During Write写入数据时受到受到外部机械冲击的记录。 D4(212)SATA主机接口读取错误计数 SATA Error Count Count CRC (Read)(Indilinx芯片)DC(220)盘片偏移量 Disk Shift硬盘中的盘片相对主轴的偏移量(通常是受外力冲击或温度变化所致),单位未知,数据值越小越好。DD(221)冲击错误率 G-sense error rate与(BF)相同,数据值记录了硬盘受到外部机械冲击或振动导致出错的频度。DE(222)磁头寻道时间累计 Loaded Hours磁头臂组件运行的小时数,即寻道电机运行时间累计。DF(223)磁头加载/卸载重试计数 Load/Unload Retry Count这一项与(C1)项类似,数据值累积了磁头尝试重新加载/卸载的次数。E0(224)磁头阻力 Load Friction磁头工作时受到的机械部件的阻力。E1(225)主机写入数据量 Host Writes由于闪存的擦写次数是有限的,所以这项是固态硬盘特有的统计。Intel的SSD是每当向硬盘写入了65536个扇区,这一项的数据就+1。如果用HDTune等软件查看SMART时可以自己计算,Intel SSD Toolbox已经为你算好了,直接就显示了曾向SSD中写入过的数据量。E2(226)磁头加载时间累计 Load 'In'-time磁头组件运行时间的累积数,即磁头臂不在停靠区的时间,与(DE)项相似。E3(227)扭矩放大计数 Torque Amplification Count主轴电机试图提高扭矩来补偿盘片转速变化的次数。当主轴轴承存在问题时,主轴电机会尝试增加驱动力使盘片稳定旋转。这个参数的当前值下降,说明硬盘的机械子系统出现了严重的问题。E4(228)断电返回计数 Power-Off Retract Cycle数据值累计了磁头因设备意外断电而自动返回的次数,与(C0)项相似。E6(230)GMR磁头振幅 GMR Head Amplitude磁头“抖动”,即正向/反向往复运动的距离。E7(231)温度 Temperature温度的数据值直接表示了硬盘内部的当前温度,与(C2)项相同。 E7(231)剩余寿命 SSD Life Left剩余寿命是基于P/E周期与可用的备用块作出的预测。新硬盘为100;10表示PE周期已到设计值,但尚有足够的保留块;0表示保留块不足,硬盘将处于只读方式以便备份数据。E8(232)寿命余量 Endurance Remaining寿命余量是指硬盘已擦写次数与设计最大可擦写次数的百分比,与(CA)项相似。 E8(232)预留空间剩余量 Available Reserved Space(Intel芯片)对于Intel的SSD来说,前边05项提到会保留一些容量来准备替换损坏的存储单元,所以可用的预留空间数非常重要。当保留的空间用尽,再出现损坏的单元就将出现数据丢失,这个SSD的寿命就结束了。所以仅看05项意义并不大,这一项才最重要。这项参数可以看当前值,新的SSD里所有的预留空间都在,所以是100。随着预留空间的消耗,当前值将不断下降,减小到接近临界值(一般是10)时,就说明只剩下10%的预留空间了,SSD的寿命将要结束。这个与(B4)项相似。E9(233)通电时间累计 Power-On Hours对于普通硬盘来说,这一项与(09)相同。 E9(233)介质磨耗指数 Media Wareout Indicator(Intel芯片)由于固态硬盘的擦写次数是有限的,当到达一定次数的时候,就会出现大量的单元同时损坏,这时候预留空间也顶不住了,所以这项参数实际上表示的是硬盘设计寿命。Intel的SSD要看当前值,随着NAND的平均擦写次数从0增长到最大的设计值,这一参数的当前值从开始的100逐渐下降至1为止。这表示SSD的设计寿命已经终结。当然到达设计寿命也不一定意味着SSD就立即报废,这与闪存芯片的品质有着很大的关系。注:Total Erase Count全擦写计数是指固态硬盘中所有块的擦写次数的总和,不同规格的NAND芯片以及不同容量的SSD,其最大全擦写次数均有所不同。F0(240)磁头飞行时间 Head Flying Hours / 传输错误率 Transfer Error Rate(富士通)磁头位于工作位置的时间。 富士通硬盘表示在数据传输时连接被重置的次数。F1(241)LBA写入总数 Total LBAs WrittenLBA写入数的累计。 F1(241)写入剩余寿命 Lifetime Writes from Host自硬盘启用后主机向硬盘写入的数据总量,以4个字节表示,每写入64GB字节作为一个单位。F2(242)LBA读取总数 Total LBAs ReadLBA读取数的累计。某些SMART读取工具会显示负的数据值,是因为采用了48位LBA,而不是32位LBA。 F2(242)读取剩余寿命 Lifetime Reads from Host自硬盘启用后主机从硬盘读取的数据总量,以4个字节表示,每读取64GB字节作为一个单位。FA(250)读取错误重试率 Read Error Retry Rate从磁盘上读取时出错的次数。FE(254)自由坠落保护 Free Fall Protection现在有些笔记本硬盘具有自由坠落保护功能,当硬盘内置的加速度探测装置检测到硬盘位移时,会立即停止读写操作,将磁头臂复位。这个措施防止了磁头与盘片之间发生摩擦撞击,提高了硬盘的抗震性能。这个参数的数据里记录了这一保护装置动作的次数。本文选自 >>>>https://www.cnblogs.com/xqzt/p/5512075.html>>> 镁光 >>>https://www.micron.com/-/media/client/global/documents/products/technical-note/solid-state-storage/tnfd22_client_ssd_smart_attributes.pdf>>>
2022年11月26日
12 阅读
0 评论
0 点赞
2022-11-19
A62完整复制品
德累斯顿艺术馆A62藏品完整复制品德语介绍翻译:使用真实性水平延伸到使用热处理的“弹簧”钢和23克拉镀金配件和装饰复制基于奥格斯堡的洛伦茨·赫尔姆施米德于 1485 年为蒂罗尔州西吉斯蒙德大公制作的原件,代表了15世纪后期德国盔甲师技能的巅峰之作 原网站已经无法正常访问,这里提供一个互联网档案馆的存档(需要科学上网)传送到历史页面 网站快照:
2022年11月19日
4 阅读
0 评论
0 点赞
2022-11-19
C#读写txt文件
C#下读写txt文本文件,库文件之类的在开发工具包里面都帮你自动集成了,不需要再去自己制作库Windows 10系统下面支持五种编码方式:ANSI,UTF-8,UTF-16LE,UTF-16BE,UTF-8 BON一般情况下,Windows默认的编码保存方式为ANSI,UTF8需要手动另存为编码方式。ANSI编码代表GB2312编码,储存中文字符串可以使用这个C#一次性读取一个txt文件的所有内容,并使用messagebox输出 string Read_Text=File.ReadAllText("xxx.txt"); /*带编码方式读取文本文件*/ string Read_Text=File.ReadAllText("xxx.txt", Encoding.ASCII); string Read_Text=File.ReadAllText("xxx.txt", Encoding.UTF-8); MessageBox.Show(Read_text);读取文件内容里面所有行,返回数组 string[] Read_All_Lines=File.ReadAllLines("xxx.txt"); //带编码方式读取文件 string[] Read_All_Lines=File.ReadAllLines("xxx.txt", Encoding.ASCII); 写入文本文件 string Write_Text="Test_Write_Text"; File.WriteAllText("xxx.txt", Write_Text); //此方法重复写入会覆盖之前的文件,下方使用代码与上方一样,WriteAllText的方式会覆盖文件 //设置写入编码方式 File.WriteAllText("xxx.txt", Write_Text, Encoding.UTF-8);删除一个txt文件 File.Delete("xxx.txt");数组的方式写入txt文件string[] Write_Text={"Line1","Line2","Line3","Line4"}; File.WriteAllLines("xxx.txt", Write_Text, Encoding.ASCII); 本网站参考博文 https://www.cnblogs.com/eniac12/p/4398310.html
2022年11月19日
4 阅读
0 评论
0 点赞
1
2