IPTV 与互联网融合

前言

依赖

  • 需要一个能够刷 OpenWrt 的路由器(需具有数据包镜像和 udpxy 功能/插件)用于抓包和后续的使用,因为其功耗较低且价格比较便宜 Newifi D2 拼多多 100 以下就可以拿下
  • 能够正常播放节目的 IPTV 机顶盒,如果自己家里都没有能用的那就没有融合一说了

环境

因为不同地区网络环境不同,我这里是四川电信,但是可能在同一个省环境都会不一样,所以并不一定在其他地区可用。

设备型号软件
光猫TEWA-500E
主路由Newifi-D2Lean OpenWrt R9.6.1
AP腾达 AC6
网络结构拓扑图

无需电信 IPTV 机顶盒,也可在任何设备上通过 http 链接直接播放直播节目。下图分别为 PotPlayer(PC) 和 超级直播(Android) 播放节目效果图。

PC PotPlayer
Android 超级直播

iGMP 与 RTSP

在 IPTV 中常见的两种用于播放直播节目的协议分别为 IGMP 和 RTSP,他们之间的差异如下。

协议节目类型可用时间鉴权
IGMP直播长期强制
RTSP直播/回放/点播短期非强制

IGMP

网路群组管理协议(英语:Internet Group Management Protocol,缩写:IGMP)是用于管理网路协议多播组成员的一种通信协议,有时候我也会将其称为组播

在电信这边,组播地址通常很少变化,但是很重要的是它只能看直播不能看回放。又因为它的地址是内网地址,所以你必须要获取到电信的内网IP才能正常播放。我比较倾向于使用组播地址,因为电视节目回放有啥可看的,一般都是爱奇艺什么的了,而且最重要的是它的地址很少变化,这样就给不会倒腾的家人减少了很多麻烦。

原理上组播和广播(给网络里的所有人都发送一个消息)有点相似,但是组播会划分一个更小的范围,并且这个范围里面设备的名单会同时由客户端和主机端进行维护,路由器会根据不同的组别来转发不同的数据。

下面假装这个网络里面,有 3组 人正在分别在看 3个 节目。

IGMP1

正在收看 CCTV-251 的朋友说,这太假了。我想看点正能量的、让人血脉喷张的。然后请求换到 正在播放 CCTV-1 的 igmp://239.93.22.133:9260

IGMP2

路由器随后听到了这位朋友的呼唤,然后就将它放进了 CCTV-1 的组里。

IGMP3

通过上面的例子你大致能了解到 IGMP 协议的工作原理,可以简单的总结为 IGMP 就是 一对多,下面的一个例子则是和 IGMP 相反。

RTSP

实时流协议(Real Time Streaming Protocol,RTSP)是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。媒体服务器的客户端发布VCR命令,例如播放,录制和暂停,以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流,有时候我也会将其称为时移

原理上 RTSP 和常见的 HTTP 协议比较相似,也就是 一对一,下面这个图可以帮助你理解。

你在观看节目的时候,可以随意的后退暂停,也可以自己想看什么就看什么,不用加入别人的组,整个资源都被你一个人享用。就和你平时看爱奇艺,B站什么的没区别。

RTSP

正如上面的介绍一样,RTSP 的主要特点就是可以时移,也就是可以拖动进度条。而且大部分地区的 RTSP 地址都是公网 IP,甚至还可以在获取到地址后,不需要任何授权都可以直接正常播放。

所以网络上流传的 IPTV 直播源基本都是 RTSP 地址。不过四川电信这边 RTSP 有鉴权,必须要以电信的内网 IP 访问才行。

同时又因为有部分套餐的 IPTV 是没有回放权限的,所以电信应该还需要验证是谁在播放,这就让观看它成为了比较麻烦的事情(不同地区情况不同,这里只针对我所在的地区)。

目标

通过了我上面对 IGMP 和 RTSP 协议的介绍,相信你对他俩都有了一定的了解。接下来我将为你详细介绍本次教程的内容。

  • 适合本项目的硬件设备
  • 软件安装及环境配置
  • 抓包获取 IPTV 的 IGMP 和 RTSP 播放地址
  • 使用 igmpproxy 将所有 IGMP 数据转发到 IPTV 口
  • 使用 udpxy 将 IGMP 地址转换为 HTTP
  • 在电视盒子、手机和 PC 上正常播放
  • 在外欣赏自家 IPTV 直播源

你可以通过点击右侧边栏,来快速跳跃到你需要的章节或查阅你当前的浏览进度。

硬件

本章节会介绍你所需要的硬件设备,在抓包和使用融合网络时不可避免的会使用到,生活中平时少见的设备。

路由器

IPTV与互联网融合,的主要设备也就是路由器了。一款合适的路由器,可以和电脑一起直接走通整个教程。对于本教程而言,一个能够刷 OpenWrt 或 Lede 同时还能安装 igmpproxy 和 udpxy 最好还支持 交换机端口镜像 就完美了。当然也有一些教程是通过 Padavan 来实现的,但是我个人没有尝试过,这里就不做评价了。

igmpproxy和udpxy 截图
交换机端口镜像 截图

如果你目前没有具有此功能的路由器,我推荐你购买 新三 它还有其他的名字 新路由3、Newifi D2、Newifi 3、Newifi 3 D2。也都是同一款,得益于所谓的矿难,这款路由器目前淘宝、拼多多和转转之类的,100元以内都可以拿下,同时购买的时候推荐你加钱让卖家刷好 Breed 和我使用一样的硬件设备,这也能让你配置的时候少走一些弯路。

新三 照片

Breed 相当于 Android 里面的 Recovery,Windows 里面的 PE。可以让你在刷机的时候不会轻易翻车。

抓包工具

通过抓包获取 IPTV 的组播地址也是必不可少的一步。如果你的路由器没有 交换机端口镜像 的功能,你就需要淘宝单独购买一个 网络抓包工具,下图为 Amazon 搜索 Throwing Star LAN Tap 的外观图。

Throwing Star LAN Tap

动手能力比较强的朋友,也可以参考恩山无线论坛的这个帖子小白的IPTV折腾教程(1)—0元DIY抓包神器,利用两根网线和4个水晶头就可以做出一个具有同样功能的抓包工具。

不过我还是比较推荐刷一个具有 交换机端口镜像 功能的固件,毕竟直接就可以上手用。如果你是比较热门的机型,比如斐讯又或是我之前说到的 Newifi D2 或是其他搭载了 MT7621 芯片的路由器,应该都不难在恩山找到具有该功能的固件。

软件

下面列出了本次教程中所有需要的软件,我使用软件的版本,以及和下载链接。

设备软件名版本下载地址
PCWiresharkPortable 3.2.0Wireshark 官网
PCNotepad++7.8.2Notepad++ 官网
PCExcelMondo 2016 x86Office Tool Plus
PCXshell6.0.0032Netsarang 家庭/学校版
路由器OpenWRTR9.6.1橙子的个人博客/蓝奏云
路由器igmpproxy0.2.1-4固件自带
路由器udpxy2016-09-18-53e4672a75..4-1固件自带
路由器luci-app-udpxygit-19.146.62144-fd6fdb2-1固件自带

下面介绍了每个软件的用途。

软件名用途
Wireshark抓包获取 IPTV 播放地址
Notepad++抓包后数据整理
Excel抓包后数据整理
XshellSSH连接路由器
OpenWRT路由器固件
igmpproxy转发IGMP流量到指定端口
udpxyIGMP流量转HTTP

抓包

首先将来自光猫的互联网和往常一样连接到路由器的 WAN 口,将 ITV 口连接到路由器的 LAN 4 口,将 IPTV 盒子连接到路由器的 LAN 3 口,最后将 LAN 1 口连接至电脑。

抓包连线

随后配置路由器的流量镜像功能,将接有 IPTV 盒子的 LAN 3 口设置为 数据包镜像源端口,将接有电脑的 LAN 1 口设置为 数据包镜像监听端口。其他 VLAN 设置无需改动。

数据镜像设置

保存并应用设置后,即可在电脑上启动 Wireshark 并监听以太网接口,随后启动 IPTV 盒子。

启动 IPTV 盒子后,应不停的有数据显示在窗口中。然后使用 IPTV 盒子遥控器,进入直播随便播放一个节目,等节目可以正常播放的时候,即可在 Wireshark 中停止捕获。同时也可关闭 IPTV 盒子,接下来就是分析数据了。

如果你没有看到任何数据跳动,或者是特别少,应注意是否端口插错,或者是在设置流量镜像的地方有错。

分析抓包数据

因为不同地区的数据样式差异较大,我这里是四川电信,其他地区可供参考

获取地址

在过滤器栏输入

1http.request.uri contains “frameset_builder.jsp”

右键第一个请求,追踪流 – HTTP 流

Wireshark 1

再弹出的新窗口中查找

1igmp://

如果你找到了类似下图 igmp://239.93.22.133:9260 的连接,那么恭喜你,你的数据抓包已经完成了最重要的定位了!(不难发现旁边也获取到了 rtsp:// 开头的时移地址)

Wireshark 2

单击连接,主窗口就会自动定位到该请求。

Wireshark 3

单击展开该请求的完整内容,查看里面的内容是不是含有 igmp:// 之类的重要数据。

Wireshark 4

右键 Line-based text data 导出分组字节流,随便取个名字保存到你能找到的地方。

Wireshark 5

用 notepad++ 打开,查看是否显示正常(前几行都是回车,会一片空白往后滑一点)。

Wireshark 6

无法获取到地址

如果你在窗口中一个数据都未获取到,那么请检查数据镜像设置或网线位置是否有错。

如果你是四川省,请仔细检查是不是,在过滤的时候复制错了或漏了内容。

如果你非四川省,可以在过滤器中输入

1http

进行检索,一条一条的看,里面总会有 igmp:// 之类获取节目单的数据(我也是这样找出来的)。

格式化数据

开始格式化之前,建议保存好原始文件。

替换完毕后可以将名字带有 PIP 的删除,这是用于机顶盒画中画功能的,说白了就是降低了分辨率的,我们就留下正常的和高清的就行了。

M3U8

此格式文件可以在 PC 中直接使用 VLC media player 和 PotPlayer 打开并播放

查找目标

1.*ChannelName=”(.*)”,UserChannelID=”(.*)”,ChannelURL=”igmp://(.*)”,TimeShift=.*

替换为

1#EXTINF:-1, \1\r\nhttp://192.168.10.1:8888/udp/\3
M3U8 替换中

将文档中被格式化了的数据,复制到新文档,并在文档首行写入

1#EXTM3U

处理完毕后效果如图,最后将文件另存为 .m3u8 即可。

M3U8 替换完毕

超级直播

此文件可以在 Android 端的超级直播使用,电脑打开 在软件里面按返回时提示的网址,可以将自定义源上传至该软件。

查找目标

1.*ChannelName=”(.*)”,UserChannelID=”(.*)”,ChannelURL=”igmp://(.*)”,TimeShift=.*

替换为

1\1,http://192.168.10.1:8888/udp/\3

再次查找目标,删除空白行

1\n\s*\r

替换为空白

全选改文本所有内容后复制,在顶部 编码 – 编码字符集 – 中文 – GB2312,确认切换到该字符集。然后删除文本所有内容,并粘贴。最后将文件保存为 txt 即可。

超级直播中文本编码格式必须为 GB2312 否则中文会乱码

修改编码字符集

处理完毕后效果如图

超级直播效果图

获取 IPTV 内网地址

四川电信是 DHCP 获取,我在网上看很多地方都是 PPPOE 所以用户名和密码你们就需要自己翻翻 IPTV 的设置拉~

这边也会使用到抓包的数据,应该就是前几个了,找到 Dynamic Host Configuration Protocol (Request) 请求,展开 Option: (60) Vendor class identifier 和Option: (12) Host Name 以及 Client MAC address 。都需要右键 – 复制 – 值 。

DHCP

如果你没有找到 DHCP 的数据包,可以通过 IPTV 盒子底部的贴纸查看。我这款盒子,最后一个就是 Option: (12) Host Name 当然了 MAC 地址上面也有,而 Option: (60) Vendor class identifier 我已经在上图给你了,就是 SCITV 。

IPTV盒子

接下来就开始路由器的设置了。

首先进入路由器设置 – 网络 – 交换机,将之前用于抓包的 数据包镜像 功能关掉。随后将插有 ITV 口的 LAN 4 在 VLAN 1 中设置为 untagged 。添加一个 VLAN 3 ,将 CPU (eth0) 设置为 tagged ,然后将 VLAN 3 的 LAN 4 设置为 untagged 。设置完毕后,效果如下图。

VLAN

进入路由器设置 – 网络 – 接口 – 添加新接口。命名为 IPTV 注意全部大写,接口协议为 DHCP 客户端 包括接口 VLAN:eth0.3 。设置如下图。

添加新接口

然后设置端口的 请求 DHCP 时发送的主机名 对应的就是之前获取的 Option: (12) Host Name,以及高级设置里面的 请求 DHCP 时发送的 Vendor Class 选项 也就是之前获取的 Option: (60) Vendor class identifier 即 SCITV,最后是 重设 MAC 地址 填入 Client MAC address 也就是你 IPTV 盒子的 MAC 地址。

还有不要勾选 使用内置的 IPv6 管理,使用网关跃点为 20 。

IPTV 接口设置

保存并应用设置后,再进入你的 WAN 接口设置,将它的 网络跃点设置为 10,否则你会无法正常使用互联网

进行到这里,你的 IPTV 接口应该就可以正常的获取到 10 开头的内网 IP 了。如果你不是四川的朋友,那么你地区的运营商可能是 PPPOE 验证或验证逻辑与我这里不同,如果你是四川的朋友,那么请你检查 之前抓包或者是在机顶盒上面看到的 Option: (12) Host Name 以及 Option: (60) Vendor class identifier 和 MAC 地址是否填写正确。如果你是通过抓包获取的数据,那应该不会有错,如果你是抄的机顶盒上面的,那么可能是因为你所在的地区与我的验证逻辑不同。

所以我强烈建议,还是通过抓包来分析 IPTV 盒子获得内网 IP 的全过程,因为不管你是 PPPOE 还是 DHCP 它都可以分析出来。

配置 igmpproxy 和 udpxy

使用 SSH 连接到路由器

修改配置文件时需要使用 SSH 连接到路由器进行修改,进入路由器设置 – 系统 – 管理权,在接口 lan 下设置端口为 22,同时打开 密码验证和允许 root 用户凭密码登录。

路由器SSH设置

下载 Xshell https://www.netsarang.com/zh/free-for-home-school/ ,官网提供了免费的供家庭和学校使用的版本,足够本次教程所用。

新建连接,名称随意,主机填上路由器的 IP。点击左侧连接中的用户身份验证,将方法设置为 Password 用户名为 root 密码则为登录 Web 端后台时的密码,我提供的固件默认是 password

30

安装 igmpproxy 和 udpxy

如果你的路由器使用的我提供的固件则无需安装,因为固件是自带该软件包的。

我建议在安装之前,在 Web 端后台的系统 – 备份/升级 中备份当前配置文件。因为我尝试了多个固件,在安装了 udpxy 后 Web 端就会无法正常使用,有很多报错。只有恢复到出厂设置才恢复正常。最后找到了一个自带 udpxy 的固件才解决我的问题。

使用 Xshell 连接到路由器后执行以下命令。

1opkg update && opkg install igmpproxy udpxy luci-app-udpxy

opkg update 是用来更新软件列表的,因为大陆对 OpenWrt 软件源地址连通性不佳,所以可能需要等很久或者是多次尝试。

查看命令返回的结果或查看系统 – 软件包中的已安装软件包中是否存在 igmpproxy udpxy luci-app-udpxy 来判断是否安装成功。

配置 igmpproxy

关于 igmpproxy 它主要是将所有来自 lan 的 IGMP 数据都传到 IPTV 接口去,为了防止组播的 udp 数据在 lan 里面乱串,影响网络效率。但是我这里在 lan 里面是无法播放 igmp:// 地址的数据的,我也不清楚是什么情况。而且据恩山网友测试,OpenWrt 的 igmpproxy 是失效的,如果有人在 lan 里面观看组播地址视频或者是使用 IPTV 盒子,都会导致局域网内的组播风暴,会导致网络堵塞。所以主要是后面的 udpxy 在起作用。

执行以下命令,一定要复制全一起粘贴进去然后再回车执行。

1 2 3 4 5 6 7 8 9 10 11 12echo “config igmpproxy option quickleave 1 config phyint option network IPTV option direction upstream list altnet 0.0.0.0/0 config phyint option network lan option zone lan option direction downstream” > /etc/config/igmpproxy

配置 udpxy

在路由器 Web 端设置 – 服务 – udpxy 中,勾选启动、Respawn、状态。将端口设置为 8888,将 Source IP/Interface 设置为 IPTV 接口的 ifname,也就是在路由器 Web 端设置 – 网络 – 接口 中 IPTV 接口图标下方的小字。在我这里为 eth0.3

udpxy

保存并应用后,打开 http://路由器IP:8888/status 查看 udpxy 运行是否正常。当你在播放视频的时候,这个页面也会显示正在播放客户端的 IP 与它的实时流量。

udpxy status

然后你就可以在 PotPlayer 和 VLC media player 播放之前处理好的连接了,可以直接打开 M3U8 播放列表,也可以播放一个单独的地址。

例如你获取的地址为 igmp://239.93.22.6:6666

那么使用 udpxy 转换后的地址为 http://192.168.10.1:8888/udp/239.93.22.6:6666

如果你仍然无法播放,请将下面的防火墙规则添加进 /etc/config/firewall

如果你会使用 vim 那么直接在 Xshell 里面修改即可,如果你不会可以在 Xshell 窗口中点击 新建文本传输(Ctrl+Alt+F),将该文本下载到本地使用 notepad++ 进行修改,再上传上去。请注意你的防火墙配置可能已经存在,请你仔细的排查每一个设置项。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22config rule option name ‘Allow-IGMP’ option target ‘ACCEPT’ option family ‘ipv4’ option src ‘iptv’ option proto ‘IGMP’ config rule option name ‘Allow-UDP-udpxy’ option target ‘ACCEPT’ option src ‘iptv’ option proto ‘udp’ option dest_ip ‘224.0.0.0/4’ config rule option name ‘Allow-UDP-igmpproxy’ option target ‘ACCEPT’ option family ‘ipv4’ option src ‘iptv’ option proto ‘udp’ option dest ‘lan’ option dest_ip ‘224.0.0.0/4’

如何在外播放家中 IPTV 源

首先需要公网 IP,你可以在 在路由器 Web 端设置 – 网络 – 接口中,查看 WAN 获得的 IP 是否与你在 https://ip.sb/ 看到的 IP 一致。如果不一致的话,可以向电信人工客服反映「我需要公网 IP」即可。

在路由器 Web 端设置 – 网络 – 防火墙 – 端口转发 中,添加协议为 tcp,外部区域为 wan,外部端口为 8888,内部 IP 地址为 192.168.10.1,内部端口为 8888 的规则即可。

端口转发

那么你在外要播放的话,只需要把路由器的 IP 地址换为你的公网 IP 即可。

例如你的本地播放地址为 http://192.168.10.1:8888/udp/239.93.22.6:6666

那么当你的公网 IP 为 125.60.90.40 时

你的互联网播放地址则为 http://125.60.90.40:8888/udp/239.93.22.6:6666

因为公网 IP 都在变,你可以使用 DDNS 也就是 动态 DNS 使用域名来防火,你可以使用路由器内自带的服务商。如果你和我一样将域名放置于 DNSPod 管理,也可以使用我制作的 DdnsWithDnspod 使用一个子域名来专供 IPTV 的播放。

结语

首先非常感谢各位前辈,我也是通过阅读现有的教程总结出来的。本文用了接近 5000 字,详细的介绍了有关 IPTV 与互联网的融合,希望能够对需要的朋友有帮助。因为本人能力有限,文中难免有一些问题也希望有发现的朋友能够及时的指出,我将感激不尽。

参考

恩山无线论坛@鲲翔 – IPTV融合进普通网络一般步骤

恩山无线论坛@footlog – K2P/K2 padavan双线接入,宽带+IPTV,udpxy+xupnpd详细设置

恩山无线论坛@lcsuper – 小白的IPTV折腾教程(3)—双网融合、IPTV共享

恩山无线论坛@kangtao022 – 最新四川南充电信IPTV组播地址,及整理出地址列表的方法!

恩山无线论坛@橙子_MAX – 【附固件】全网首发,新三OpenWRT路由器IPTV内网融合视频教程

橙子的个人博客 – IPTV内网融合,实现任意设备观看IPTV

恩山无线论坛@angelkyo – 四川电信DHCP抓包能获取到IP,但是抓不到option60信息

恩山无线论坛@wengmingao – 简单的的IPTV 0成本抓包!

恩山无线论坛@莫问归期 – 在openwrt里安装udpxy后主题界面就会乱

群晖用Jellyfin搭建媒体服务器

一、安装Jellyfin

1. 首先,打开群晖的Docker套件,然后点击“注册表”,并且搜索“jellyfin”,然后双击下载该镜像。

接下来会提示版本,我们默认选择“latest”就可以啦

2. 待镜像下载的功夫,我们先回到群晖的 File Station 在docker文件夹下新建“jellyfin”目录。

此目录建立的目的是为了后续将此文件夹装载到我们的容器中,我们jellyfin后续的一些缓存呀、配置呀、封面呀等等东西都会储存在这个文件夹中。

另外,下图所示的video文件夹是我们用于存放电影、剧集、音乐等源文件的地方,下面的步骤中也会装载到我们的容器中的。(当然文件夹的名字看你喜好,这里只做演示)

3. 接下来回到Docker中,单击“映像”,并双击我们的jellyfin映像。然后点击高级设置。

4. 映像的 [端口设置] 选项卡设置如下图:

  • 本地端口8920|容器端口8920
  • 本地端口8096|容器端口8096

这里的8096端口和8920端口,分别是用于jellyfin的http和https访问使用。我们演示用默认的端口,当然你也可以自定义。

5. 映像的 [卷] 选项卡,我们点击“添加文件夹”,并入下图设置。

这个步骤就是我们之前说的,将NAS的文件夹装载到容器中,video文件夹是用作媒体的储存,docker/jellyfin 指定了两次,是因为配置文件和缓存我们放在一起就可以啦。

6. 映像的 [高级设置] 选项卡,勾选“启动自动重新启动”

7. 上面的所有步骤都搞定之后,我们勾选“向导完成后运行此容器”,并点击“应用”

恭喜你,至此我们的jellyfin安装过程中的群晖NAS配置部分就已经全部完成。如下图所示,我们已经可以看到容器已经在运行啦。

二、 Jellyfin的设置

接下来,我们通过通过浏览器打开:内网的IP+8096端口 没错你看到的就是Jellyfin的初始化页面。我们按照我下图提示的步骤一步一步设置,并且一步一步点击“Next”就可以啦。过程很简单照做即可。

选择语言
设置默认用户名和密码
这里暂不添加媒体库,直接点击Next
选择语言和国家
保持默认,直接Next
点击Finish完成初始化

经过上面一顿猛如虎的操作之后,初始化也就完成了。接下来继续

1. 点击右上角的图标,接着点击“媒体库”,点击“添加媒体库” 。

2. 选择类容类型,这里根据你的片源的类型。选择语言和国家。最后点击那个文件夹的+号 来绑定媒体文件夹。

3. 在弹出的页面中,选择/video 就可以啦。记得这个文件夹不?没错就是我们上面步骤中装载到映像里的哟~别搞错

4. 回到主页,就可以看到你刚刚添加的媒体库了。但是如果里面还没有看到影片?那么确定你把影片已经放到NAS的video文件夹中了。如果还是没看到?不要紧,我们点击“刷新元数据”就可以啦。

5. 电影是加载出来了,但是没有封面怎么办?点击影片的“识别”,并录入电影名字就可以选择封面咯。

最后~以下是播放页面。各种浏览器都可以愉快的播放。另外安卓有客户端。苹果嘛再等等。

用群晖WebStation搭建另一个youtube-dl的webui汉化版下载youtube视频

项目地址:https://github.com/oldiy/youtube-dl-webui-cn

下载地址:https://github.com/oldiy/youtube-dl-webui-cn/archive/master.zip

群晖安装WebStation

之后会多出一个web文件夹,下载后上面的项目,解压放到web文件夹里

打开 webstation,如图设置

新建虚拟主机,如图设置

修改配置文件,如图设置

打开网页 http://<群晖IP>:260 即可下载

本项目可以放到任何linux服务器上使用,如果遇到不能下载问题,直接更新目录下的youtube-dl文件即可。

用群晖玩游戏?没错!快使用Docker自建一个web版的dos游戏库!

DOS游戏网页版项目:https://github.com/rwv/chinese-dos-games

官方体验地址:https://dos.zczc.cz/

目前发现一个问题,载入游戏时候部分下载软件会监控下载,自动拦截载入游戏,所以遇到这种问题时,请关闭下载软件的监视功能,或者设置你的网站域名为不监视即可!如果遇到这种情况不能进入游戏,可以关闭下载软件监控后,按ctrl+F5 强制刷新网页即可!

该项目可以在web页面运行dos游戏,后来没事做放到docker里面来跑,也成功了,只是源文件包含1900个左右的游戏,大小36G左右,由于太大做成docker不现实,所以fork出来精简了一部分,只保留了40多个经典的DOS游戏,现在已经上传到docker hub,喜欢怀旧的小伙伴可以去玩耍一下了!支持存档!

好了,我也不会说话,下面开始群晖使用教程

群晖打开注册表,搜索oldiy

找到dosgame-web-docker双击下载

之后到镜像内双击安装,如图操作

映射端口——应用即可

如果群晖有防火墙,记得防火墙放行端口262

之后打开网页  http://<群晖IP or 域名>:262

开始玩耍吧!

到这里已经足够普通玩家体验了!

高级内容请继续


如果你觉得40多个游戏不够玩,或者有收集癖好,那么我提供一下完整的游戏下载列表,大家可以自己把游戏下载之后,放到docker里面

现在讲一下方法,游戏文件保存在docker容器的 /app/static/games 里面

首先我们需要把games目录拷贝到你的群晖里

那么讲一下用法吧,以下教程全部在群晖内实现

首先ssh登录群晖

1sudo -i

获取管理员权限

1docker ps

列出全部docker容器

记住dosgame-web-docker的ID 前4位

回到群晖,新建一个文件夹

右键属性

查看文件夹真实地址,并记住

回到SSH

1docker cp 2197:/app/static/games /volume1/docker/dosgame

输入以上命令,拷贝容器内文件到本机

回到群晖查看文件,具体文件作用看图

打开群晖docker,容器关闭,然后编辑,映射一个目录,如下图

应用后,重启容器就可以了

群晖NAS能做什么?

一、NAS是什么
NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上具备资料存储功能的装置,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的设备提供文件共享和数据备份等功能。

二、关于群晖(Synology)
群晖公司(Synology)于2000年创立于台湾,一家提供网络附加存储设备 (NAS)、IP 监控解决方案以及网络设备的企业。(黑群)常见的型号有:DS3615xs、DS3617xs、DS916+、DS918+等型号。

三、群晖能做什么
1、下载类:
①http、BT和电驴下载:安装Download Station套件。
※移动端:手机可装DS Get应用远程推送下载。

②迅雷远程下载:套件中心安装“玩物下载”,安装后在浏览器打开http://群晖:8283/owdl/index.html这个地址,在网页里添加下载。

③百度云下载:通过docker安装相应的容器来实现,经测试:百度超级会员可以满速,非超级会员下载比用百度自家的客户端要快多了。

④BitTorrent Sync(Resilio Sync)下载:BitTorrent Sync已改名Resilio Sync,可以直接在套件中心安装,传说中的神Key在手,资源我有,最新的电影、电视剧都可以通过它下载。

⑤Aria2下载:Docker装Aria2 With WebUI实现,可以批量下载115网盘,BT种子等。
※浏览器衍生玩法:火狐可装115助手、网盘助手、Aria2、Send to Aria2等拓宽Aria2的玩法;
※移动端:安卓手机可装Aria2App远程推送下载。

⑥91下载:91是神马?哈哈,作为老司机的你肯定懂的!

⑦人人影视下载:通过Docker安装容器实现,可下载人人影视的最新影视资源。

⑧FlexGet的RSS订阅:想全自动通过RSS订阅进行PT下载一定要看的!

2、RSS抓取类
①Selfoss:通过Docker安装容器实现,可以添加RSS源以web方式阅读。

3、影音娱乐类
①Audio Station:套件装Audio Station实现,用于远程在线播放群晖里的歌曲。
※手机/电视衍生玩法:手机装DS Audio应用在线听。

②Video Station:套件装Video Station实现,用于远程在线播放群晖里的视频;
※PC衍生玩法:在Windows系统安装DS Video应用在线看;
※手机/电视衍生玩法:安装DS Video的APP(有安卓手机版、苹果手机版、苹果ipad版和安卓TV版)在线看。

③Photo Station/Moments:套件装Photo Station/Moments实现,用于远程在线浏览群晖里的图片;
※PC衍生玩法:Windows安装DS Photo应用或网页登录Moments在线看;
※手机/电视衍生玩法:手机装DS Photo/Moments应用在线看。 

④Kodi:电视装Kodi应用通过Samba等方式,可以用海报浏览的方式显示并播放群晖里的视频。

⑤Youtube-DL:Docker装Youtube-dl实现,下载Youtube视频网站的视频。

⑥emby:一个相当于汇集Audio Station+Video Station+Photo Station+IPTV于一身的视频伺服中心。

4、办公类
①Cloud / Driver:套件中心安装Cloud / Driver实现,可让群晖与电脑、云盘、手机互相备份和同步数据。
※PC衍生玩法:电脑装Cloud / Driver,从此不用再把公司里的笔记本搬回家;
※移动端:手机装DS Cloud/Driver,主要用于同步手机里的照片和数据备份等。

②Note Station:套件装Note Station实现,可以理解为本地搭建版的印象笔记,完全免费;
※浏览器衍生玩法:谷歌浏览器装Synology Web Clipper和Synology Web Station;
※移动端:手机装DS Note。
③Surveillance Station:套件装Surveillance Station实现,可通过家里的摄像头(需要群晖支持的摄像头)实时监控家里的情况。
※移动端:手机装DS Cam。
④Active Backup for Business:可以把你的电脑、服务器以及ESXI虚拟机进行备份和还原。备份的过程中备份机不需要关机,可以保留多个备份版本并且不占用过多的存储空间。
⑤MailPlus Server邮箱系统:利用群晖搭建一个属于自己的邮箱系统,配合自己的域名开设一个“企业邮箱”。

5、网站搭建类
①博客系统:可以利用群晖WebStation套件,架设Wordpress、Typecho、Zblog等博客系统源代码进行安装,建立个人网站或者博客;
②论坛系统:架设Discuz!、PHPWind、phpBB等论坛;
③CMS系统:架设帝国、织梦等内容管理系统;
④影视系统:架设米酷、海洋、苹果等影视系统;
⑤图书系统:架设Calibre等图书管理系统或者小说在线阅读系统;
⑥导航页:开设的网站多了,还有加上群晖自己的应用外网访问,记不住怎么办?可以搭建一个导航页!;
⑦网盘系统:利用群晖搭建一个属于自己的网盘系统,可以利用NAS的空间或者利用微软OneDrive网盘的空间,建立自己的下载站;
⑧小程序类:搭建微信小程序、QQ小程序、支付宝小程序、头条小程序、抖音小程序等等各种各类的小程序。

6、智能家居类
①HomeKit:苹果的智能家居系统;
②HomeAssistant:一款基于 Python 的智能家居开源系统。
③远程监控:添加USB摄像头或者网络摄像头,甚至添加一台安卓智能手机,都可以实现监控和录像的目的。

7、玩游戏类
①网络游戏:架设“传奇”、“御剑情缘”、“新蜀山”等等,拉上三五好友、几个同事、几个同学找回当年“江湖争霸”的雄风!
②休闲游戏:架设棋牌类等益智休闲游戏,无聊的时候打发时间。

在PVE下用 AdGuard Home搭建一个带广告过滤的私有DNS服务器及优化部署

很多人可能会问:AdGuard Home是干嘛用的?假如我们把整个互联网比喻成一个城市的供水,每个地区自来水厂提供的水质和你所在管网末端位置的不同,有些家庭会明智的选择使用前置净水器,可以解决管道中的二次污染、软化水质、阻止水垢、防止锈蚀、保护净水器,当然还有太阳能和燃气热水器等等,但最终享受干净水的是人。精致的家庭还会使用厨下式厨余垃圾处理器,而很多的家庭也许都不知道什么是前置净水器、什么是厨余处理器。互联网和供水一样,有大带宽和小带宽,有管网污染的问题,有被政府监控和被黑客偷窥的问题,还有烦人的广告问题,无论是视频前和视频中的广告,所以在入户光猫之后的主路由器上安装并使用私有DNS服务器(AdGuard Home),就可以有助于“清洗流量”。
       根据AdGuard Home 官网介绍,AdGuard Home 是一款全网广告拦截与反跟踪软件。在您将其安装完毕后,它将保护您所有家用设备,同时您不再需要安装任何客户端软件。随着物联网与连接设备的兴起,掌控您自己的整个网络环境变得越来越重要。
       简单的点讲就比如Google的8.8.8.8,阿里云的223.5.5.5,114的114.114.114.114,还有Cloudflare的1.1.1.1,这些都是提供DNS服务的公共DNS服务器。而AdGuard Home在给我们提供DNS服务的同时还提供去广告的功能,这就有点意思了吧~~

       博主是用PVE作为宿主机的环境,所以就在PVE系统里面安装了这个AdGuard Home,来看看怎么安装和使用吧。

一、安装教程

1、下载AdGuardHome_PVE-LXC.tar.gz镜像文件:打开下载地址https://dl.gxnas.com,进入“Proxmox-VE(PVE虚拟平台)”文件夹,找到“AdGuardHome_PVE-LXC.tar.gz”,右键复制下载链接到迅雷下载;

2、通过SSH工具(本教程采用WinSCP),把下载的“AdGuardHome_PVE-LXC.tar.gz”,上传到PVE系统下的“/var/lib/vz/template/cache”里面;

3、通过网页访问PVE后台,点击右上角“创建CT”;

4、创建:LXC容器,“一般”标签栏的输入以下信息:
主机名称:自己随便写
密码:自己设置
确认密码:同上
然后点下一步

5、点“模板”标签栏的“模版”下拉菜单,选择“AdGuardHome_PVE-LXC.tar.gz”,下一步;

6、“根磁盘“标签设置磁盘大小2G,下一步;

7、”CPU“标签设置1核,下一步;

8、”内存“标签设置内存1024M ,交换分区用默认的512,下一步;

9、”网络“标签的IPv4可以根据自己的内网设置静态IP(本教程内网是192.168.1.X的号段,所以设置192.168.1.2/24),IPv6设置DHCP,下一步;

10、“DNS”标签这里不需要设置,直接下一步;

11、“确认”标签,最后确认一下信息,如果正确无误就勾选左下角的“创建后启动”再点“完成”。

二、相关的设置
1、回到PVE系统的“数据中心”,找到刚刚建立的AdGuard容器,点它进入控制台,输入登录的用户名root,回车,再输入之前设置的密码,输入ip addr回车,检查一下显示的IP地址是否与刚才安装时设置的IP地址一致;

2、输入ping baidu.com,回车,检查容器能否连通外网;有外网IP地址返回的表示外网连接正常,按一下Ctrl+C结束测试。

3、在局域网电脑的浏览器地址栏输入刚才安装AdGuardHome设置的IP:3000(比如我的是192.168.1.2:3000);

4、开始配置;

5、网页管理界面,我们用默认的端口,不需要更改,下一步;

6、身份认证,需要自己设置用户名和密码,下一步;

7、下一步;

8、打开仪表盘;

9、主界面是这样的;

10、点最上面的菜单栏“设置”-“常规设置”,这四个选项根据自己要求设置(博主勾了1、2、4),然后拉到下面,点保存;

11、点最上面的菜单栏“设置”-“DNS设置”,上游DNS这栏输入(由于每个人使用的宽带不同,所以上游DNS使用哪个,请根据自己的情况填写,后面会讲):

tls://dns.google
tls://1.1.1.1
tls://1.0.0.1

然后拉到下面点应用,会看到系统提示“上游DNS已更新”;

12、点最上面的菜单栏“过滤器”,“添加过滤器”,名称随意设置,地址输入https://hosts.nfz.moe/127.0.0.1/full/hosts,点“添加过滤器”;

13、看到系统提示“网址添加成功”后,点打叉关掉提示;

14、点“检查更新”;

15、系统更新完成会提示“所有过滤器已更新到最新”;

三、更改网关/路由的DNS
由于每个人使用的网关/路由都各有不同,因此这里不做具体描述。请自行把内网的DNS主服务器IP地址设置成我们刚刚安装的AdGuardHome的内网IP地址,DNS副服务器设置为了其他公共的DNS服务器IP(拒绝使用运营商的DNS)。博主的网关是自己编译的软路由openwrt X64的版本,具体的设置如下,大家借鉴一下吧。

四、最后来看看效果如何

五、官方网站及项目地址
1、AdGuard官网:https://adguard.com/
2、AdGuardHome项目地址:https://github.com/AdguardTeam/AdGuardHome


AdGuard Home 优化部署

一、上游DNS设置

1、不使用ISP默认DNS的好处是可以避免ISP通过DNS分析和掌握你的上网行为。我们把上游DNS更换成DNS over TLS的:

tls://dns.adguard.com
tls://dns.quad9.net
tls://dns.google
tls://1.1.1.1
tls://1.0.0.1

2、当然,你也可以使用其他的公共DNS,不过国内公共的DNS暂不支持DNS over TLS(博主用的是223.5.5.5),比如:

223.5.5.5
223.6.6.6
114.114.114.114
114.114.115.115
119.29.29.29
119.28.28.28

3、如果你想启用ipv6的DNS,可以添加以下几个(但是启用ipv6后,不能过滤视频中的广告):

2409:8028:2000::1111
2409:8028:2000::2222
2620:0:ccc::2
2620:0:ccd::2

二、过滤器

虽然AdGuardHome内置了几条广告过滤规则,但在这些规则在中国感觉有点水土不服。如果要想完美的实现广告过滤,还需要自己添加规则。AdGuard Home 兼容 Adblock 过滤规则语法,你可以使用一些比较知名的 Adblock 过滤规则。目前好用的过滤规则还是有很多的,请酌情选择(1-4为系统自带的):

1、AdGuard Simplified Domain Names filter(系统自带)

https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt

2、AdAway(系统自带)

https://adaway.org/hosts.txt

3、hpHosts – Ad and Tracking servers only(系统自带)

https://hosts-file.net/ad_servers.txt

4、MalwareDomainList.com Hosts List(系统自带)

https://www.malwaredomainlist.com/hostslist/hosts.txt

5、hosts.nfz.moe

https://hosts.nfz.moe/127.0.0.1/full/hosts

6、EasyList China

https://easylist-downloads.adblockplus.org/easylistchina.txt

7、EasyPrivacy

https://easylist-downloads.adblockplus.org/easyprivacy.txt

8、CJX’s Annoyance List

https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt

9、CJX’s EasyList Lite

https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt

10、Adblock-Plus-Rule

https://raw.githubusercontent.com/xinggsf/Adblock-Plus-Rule/master/ABP-FX.txt

11、ChinaList

http://tools.yiclear.com/ChinaList2.0.txt

如果你觉得过滤得还不够,也可以在“自定义过滤器规则”按照以下过滤规则自己编写:

||example.org^ – 拦截 example.org 域名及其所有子域名
@@||example.org^ – 放行 example.org 及其所有子域名
127.0.0.1 example.org – 将会把 example.org(但不包括它的子域名)解析到 127.0.0.1
! 注释符号,表示这是一行注释
# 这也是注释符号,同样表示这是一行注释
/REGEX/ – 正则表达式模式

具体请参考《官方说明

三、配置文件调整

AdGuard Home 所有的参数配置都保存在一个名为 AdGuardHome.yaml 的配置文件中。这个配置文件默认路径通常为 AdGuard Home 二进制文件 AdGuardHome 所在的目录,比如:/root/AdGuardHome/AdGuardHome.yaml。这里我们只需调整以下两个参数,就是可以明显提升 AdGuard Home 的 QPS 能力。

ratelimit : DDoS 保护,客户端每秒接收的数据包数。默认值是 20,建议禁用该参数(将值改为 0)。
blockedresponsettl : TTL 缓存时间,默认值是 10,建议设置为 60 。

Proxmox Virtual Environment(PVE)完美的更改IP地址

一、在局域网的电脑浏览器输入PVE的IP地址登录后台,从左边的菜单找到“PVE”—“_Shell”菜单,进入网页版的ssh界面下;或者在主机的控制台下输入root密码后登录到ssh下;

二、输入以下命令回车:

vi /etc/network/interfaces

通过键盘上下左右移动到address这行的IP地址,按一次i进入修改状态,修改为新的IP地址,如果需要网关则修改gateway这行,修改完成确认无误后按一次ESC键输入:wq!回车保存退出。

三、输入以下命令回车:

vi /etc/issue

通过键盘上下左右移动到https://这行的IP地址,按一次i进入修改状态,修改为新的IP地址,端口8006不要改,修改完成确认无误后按一次ESC键输入:wq!回车保存退出。

四、输入以下命令回车:

vi /etc/hosts

通过键盘上下左右移动到第2行的IP地址,按一次i进入修改状态,修改为新的IP地址,修改完成确认无误后按一次ESC键输入:wq!回车保存退出。

五、重启PVE,完美解决!

查水表的原理,来了解一下

我们来假设一个案例,在一个月黑风高的晚上,小明在某论坛大肆批评政府,第二天小明刚一睡醒就听见咚咚咚,开门查水表,于是乎小明神秘消失了。

好了,再以网监的角度来看看:

一天,网监局的小红看到了一个网民在网上发了个大肆批判ZF的帖子,心想,这哥们胆子挺大啊?于是联系了那个网络公司,要求调取发帖人IP地址,IP调取结果为122.224.54.112,IPWHOIS登记的所有人为中国电信,好了,网监局小红联系了中国电信,要求查在2019-06-02 03:30使用122.224.54.112的人,之后中国电信乖乖的配合网监局,交出了小明的家庭地址,浙江省绍兴市XXXXXX ,然后水表就没了。

再切换会小明的角度:小明心想,老子明明用的是ADSL,动态IP,发完贴就断开了,怎么还tm被查到了,WTF?
老衲的解释:在各级ISP的日志服务器上都有留存日志,日志留存时间大概是6个月左右,在AAA服务器上留有你登录认证的用户名,时间,分配的IP地址。依靠这个就能找到谁在哪个时间段使用过哪个IP地址。

被拘留15天后的小明终于出来了,他心想,老子就要跟你们这群网监局的人干到底,小明就在网上找到了个代理VPN,继续上网发帖,继续在另一个网站上批评政府,这是个小网站啊,日志留存期内肯定查不到了,而且还挂了个VPN,第二天,小明又被查水表了。

以网监局的小红的角度再看看:诶呀?根据”与情控制系统”的报告,有人在某个小型网站发了个反ZF的文章,小红又火速要求网站提供发帖人IP地址,结果小红一看 175.45.176.11 这是尼玛是我大朝鲜IP啊,难不成是金三胖子发的帖子么?小红想了想,金三胖子不会说中文啊,于是,小红上报了此次事件,上级表示一定要查到,然后小红就去各大出口运营商调取路由日志了,于是小明发现,在2019年6月18日01:38,122.224.250.38链接到了175.45.176.11的某个端口,于是乎小红查了查122.224.250.38在那个时间段是属于谁的?一查,又是小明干的。

小红第二天火速赶往小明家,把正在看电视的小明抓捕归案。小明又被小红胖揍一顿。

小明心想:老子明明挂了VPN了啊,又在小型网站上发帖,怎么又尼玛被抓了。

其实他根本不知道:各级公安系统均配备了舆情控制系统,能采集几乎所有的国内网站的发帖信息,检测到关键字就被单独列出。而且单层VPN很不保险,查路由日志就查到了。

又是蹲了15天拘留。

小明肯定心里很不爽啊,于是苦修黑阔技术。同时中国电信也拒绝继续向小明提供服务,他换成了广电网络(二级ISP,出口IP都一样,几千人共用一个IP)之后又学会了一招,双层VPN/变换出口IP的VPN(就比如链接用175.45.176.11,但是访问网站的时候出口IP就变成了175.45.179.244,这样就没法靠路由日志查了),于是乎小明又继续批评ZF

网监局的小红看到后,这怎么又有人发帖了,查吧。一看,IP是175.45.179.244,这尼玛又是我大朝鲜的IP,是不是小明干的啊?但是没证据啊,于是又查了查路由日志,这回什么都没有,小红心想,这小明技术提高了啊。于是乎小红要求国内各大网络公司提供175.45.179.244这个IP的访问记录,于是某企鹅公司说了,这个IP登录过我们公司的服务,号码是12345668,小红又要求某企鹅公司提供这个号码的历史登录记录,于是乎小红看到了,看IP是二级ISP的,几千人共用一个ip啊,怎么办呢?小红又要求企鹅公司提供登录端口号,然后又同时根据二级ISP内网审计设备查到了登录该qq的内网IP,于是根据内网记录,查到了网络开户人就是小明。
小红火速赶到了小明的家,又把小明抓走了。这是小明的三进宫了,小红也表示很无奈,渐渐的,单身的小红和小明互相就有了好感(>.<尼玛)

小明想:老子都用二级ISP了,也用双重VPN了,怎么又尼玛被抓了,wr!!

小明又没想到:首先二级ISP有更严格的内网审计功能,你要是直接登录QQ,他们的内网审计就能直接看到你登录的QQ帐号但是看不到你的聊天记录,因为加密的。某局实验室的设备可以直接看到你的聊天记录(有QQ的解密密钥,还能解飞信,YY之类的,毕竟中国的企业必须给WJ部门提供方便)。虽然是几千人共用一个IP,但是端口号是唯一的,可以通过端口号查内网路由日志。而且这种VPN甚至IPSecVPN能在某墙的干扰下变成纯明文VPN,因为windows系统中可能有bug,即使开启了必须加密也能链接成功,但是却没加密。这就是为什么有时候你开VPN上网,DNS都设置好了,还是打不开非死不可之类的网站。即使这些情况都没有,你也不能保证VPN服务商跟WJ部门没有合作的。而且电脑上有很多国产软件是和WJ部门有合作的,比如搜狗拼音,腾讯qq啊之类的,这些软件的特征是 开启时间长,可长时间驻留,每日必备。在你开全局VPN的时候,你的qq,搜狗拼音等也会被代理上,比如qq会断线重链,根据每个人的唯一码,很简单找到你。

是15天的拘留,小明很不爽啊,出来后苦苦学习黑阔技术,之后又学会了一招
小明用了个Linux LiveCD,把电脑网卡MAC都改了,然后破解了邻居的一个WiFi,然后用I2P作为前置代理链接上了TOR网络,然后继续发帖。第二天,咚咚咚,小明又被小红带走了。

网监局小红:还是有人发帖批评ZF啊,于是小红查了下发帖IP,是个欧洲的TOR出口,小红心想,这怎么办呢,TOR网络,不可能继续追查下去了。小红看了看发帖的用户名:laozishixiaoming,这个用户名。。。
然后百度谷歌搜索了下这个用户名,发现这个用户名注册过很多网站,于是乎联系这些网站要求提供IP,拿到IP后查AAA服务器记录,一看,是小明。于是小红气呼呼的奔向了小明家…………….
小明心想:又尼玛栽了。
小红说:想见我不要用这种方法吧?

总结:
这是社会工程学的一种手段,小明犯的致命错误就是用了自己的常用用户名发帖。

首先,要做到匿名发帖就要保证自己的电脑没有”后门”,这里的”后门”指不经自己授权就随意发送接受自己不想被发送或接收的数据。在这个条件下,腾讯qq,搜狗拼音,暴风影音,迅雷等就是”后门”。

其次要应用的安全,比如VPN总不能被干扰成明文了你还在网上狂吧? IP藏匿手段要好,最好用I2P+TOR代理。

最重要的也是要保证社会工程学的防御,很多发帖人就栽在这上面了……

这个故事的结局是:

小明被政府以高薪聘用成为网监局的一名专家,在职期间抓了无数中二,最后他和小红结了婚,从此他们过上了幸福的生活。。。(这是篇教大家如何泡网警妹子的攻略。)

CentOS 8.x编译安装Nginx1.16.x+MySQL8.0.x+PHP7.4.x 7.3.x 7.2.x 7.1.x 7.0.x 5.6.x 5.5.x 5.3.x 多版本全能环境

CentOS 8.x编译安装Nginx1.16.x+MySQL8.0.x+PHP7.4.x 7.3.x 7.2.x 7.1.x 7.0.x 5.6.x 5.5.x 5.3.x 多版本全能环境 | 系统运维

准备篇

一、防火墙配置

CentOS 8.x默认使用的是firewall作为防火墙,这里改为iptables防火墙。

1、关闭firewall:

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

systemctl mask firewalld

systemctl stop firewalld

yum remove firewalld

2、安装iptables防火墙

yum install iptables-services #安装

vi /etc/sysconfig/iptables #编辑防火墙配置文件

# sample configuration for iptables service

# you can edit this manually or use system-config-firewall

# please do not ask us to add additional ports/services to this default configuration

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT

-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT

-A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT

-A INPUT -p tcp -m state –state NEW -m tcp –dport 3306 -j ACCEPT

-A INPUT -j REJECT –reject-with icmp-host-prohibited

-A FORWARD -j REJECT –reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动

/usr/libexec/iptables/iptables.init restart #重启防火墙

二、关闭SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

setenforce 0 #使配置立即生效

三 、系统约定

软件源代码包存放位置:/usr/local/src

源码包编译安装位置:/usr/local/软件名字

四、下载软件包

1、下载nginx

http://nginx.org/download/nginx-1.16.1.tar.gz

2、下载MySQL

http://mirrors.sohu.com/mysql/MySQL-8.0/mysql-8.0.19.tar.gz

3、下载php

http://mirrors.sohu.com/php/php-7.4.4.tar.gz
http://mirrors.sohu.com/php/php-7.3.16.tar.gz
http://mirrors.sohu.com/php/php-7.2.29.tar.gz
http://mirrors.sohu.com/php/php-7.1.33.tar.gz
http://mirrors.sohu.com/php/php-7.0.33.tar.gz
http://mirrors.sohu.com/php/php-5.6.40.tar.gz
http://mirrors.sohu.com/php/php-5.5.38.tar.gz
http://mirrors.sohu.com/php/php-5.4.45.tar.gz
http://mirrors.sohu.com/php/php-5.3.29.tar.gz
http://museum.php.net/php5/php-5.2.17.tar.gz
http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz

4、下载cmake(MySQL编译工具)

https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4.tar.gz

5、下载pcre (支持nginx伪静态)

http://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

6、下载openssl(nginx扩展)

6.1下载最新稳定版本,适用于nginx扩展https

https://www.openssl.org/source/openssl-1.1.1e.tar.gz

6.2下载旧版本,适用于php5.6.x及其以下版本编译安装openssl扩展

https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz

7、下载zlib(nginx扩展)

http://www.zlib.net/zlib-1.2.11.tar.gz

8、下载libmcrypt(php扩展)

https://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz

9、下载yasm(php扩展)

http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

10、t1lib(php扩展)

http://download.freenas.org/distfiles/t1lib-5.1.2.tar.gz

11、下载gd库安装包

11.1适用于php 5.4.x及其以上版本

https://github.com/libgd/libgd/releases/download/gd-2.3.0/libgd-2.3.0.tar.gz

11.2适用于 php 5.3.x 5.2.x版本

https://jaist.dl.sourceforge.net/project/gd2/gd-2.0.35.tar.gz

12、libvpx(gd库需要)

https://github.com/webmproject/libvpx/archive/v1.8.2/libvpx-1.8.2.tar.gz

13、tiff(gd库需要)

http://download.osgeo.org/libtiff/tiff-4.0.7.tar.gz

14、libpng(gd库需要)

ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng16/libpng-1.6.37.tar.gz

15、freetype(gd库需要)

https://download.savannah.gnu.org/releases/freetype/freetype-2.10.1.tar.gz

16、jpegsrc(gd库需要)

http://distfiles.macports.org/jpeg/jpegsrc.v9d.tar.gz

17、Boost(编译mysql需要)

https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz

18、libzip(编译php需要)

https://libzip.org/download/libzip-1.2.0.tar.gz

19、rpcsvc-proto(编译MySQL需要)

https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz

20、oniguruma(编译安装php7.4.x需要)

https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz

21、curl库(编译php需要)

https://curl.haxx.se/download/curl-7.29.0.tar.gz

五、安装编译工具及库文件(使用yum命令安装)

yum install apr* autoconf automake bison bzip2 bzip2* cpp curl curl-devel fontconfig fontconfig-devel freetype-devel gcc gcc-c++ gd gd-devel gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libxml* libXaw-devel libXmu-devel libtiff libtiff* make openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet wget zlib-devel ncurses-devel libtirpc-devel gtk* ntpstat bison* sqlite-devel oniguruma libzip-devel

安装篇

以下是用putty工具远程登录到服务器,在命令行下面操作的

一、安装MySQL

1、安装rpcsvc-proto

cd /usr/local/src

tar zxvf rpcsvc-proto-1.4.tar.gz

cd rpcsvc-proto-1.4

./configure

make

make install

2、安装cmake

cd /usr/local/src

tar zxvf cmake-3.15.4.tar.gz

cd cmake-3.15.4

./configure

make

make install

3、安装MySQL

cd /usr/local/src

mkdir -p /usr/local/boost

cp boost_1_70_0.tar.gz /usr/local/boost

groupadd mysql #添加mysql组

useradd -g mysql mysql -s /bin/false #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系统

mkdir -p /data/mysql #创建MySQL数据库存放目录

chown -R mysql:mysql /data/mysql #设置MySQL数据库存放目录权限

mkdir -p /usr/local/mysql #创建MySQL安装目录

cd /usr/local/src #进入软件包存放目录

tar zxvf mysql-8.0.19.tar.gz #解压

cd mysql-8.0.19 #进入目录

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DINSTALL_DATADIR=/data/mysql -DMYSQL_USER=mysql -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EMBEDDED_SERVER=1 -DFORCE_INSOURCE_BUILD=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DWITH_BOOST=/usr/local/boost

make #编译

make install #安装

编译出错, 重新编译前要删除编译失败的文件,重新编译时,需要清除旧的对象文件和缓存信息。

make clean

rm -f CMakeCache.txt

rm -rf /etc/my.cnf #删除系统默认的配置文件(如果默认没有就不用删除)

cd /usr/local/mysql #进入MySQL安装目录

./bin/mysqld –user=mysql –initialize –basedir=/usr/local/mysql –datadir=/data/mysql #生成mysql系统数据库

–initialize表示默认生成密码, –initialize-insecure 表示不生成密码, 密码为空。

看到这一行[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: LZrRpp40AG*-

记录下自动生成的mysql管理员root账号登录密码LZrRpp40AG*-

vi /usr/local/mysql/my.cnf #mysql 8.0.x默认没有配置文件,我们自己创建一个。

[client]

port=3306

socket=/tmp/mysql.sock

[mysqld]

port=3306

user = mysql

socket=/tmp/mysql.sock

tmpdir = /tmp

key_buffer_size=16M

max_allowed_packet=128M

default_authentication_plugin=mysql_native_password #设置加密方式为mysql_native_password,MySQL 8.0.x默认使用caching_sha2_password加密。

open_files_limit = 60000

explicit_defaults_for_timestamp

server-id = 1

character-set-server = utf8

federated

max_connections = 1000

max_connect_errors = 100000

interactive_timeout = 86400

wait_timeout = 86400

sync_binlog=0

back_log=100

default-storage-engine = InnoDB

log_slave_updates = 1

[mysqldump]

quick

[client]

# The following password will be sent to all standard MySQL clients

password=”my password”

[mysqld-8.0]

sql_mode=TRADITIONAL

[mysqladmin]

force

[mysqld]

key_buffer_size=16M

:wq! #保存退出

ln -s /usr/local/mysql/my.cnf /etc/my.cnf #添加到/etc目录的软连接

cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld #把Mysql加入系统启动

chmod 755 /etc/init.d/mysqld #增加执行权限

chkconfig mysqld on #加入开机启动

vi /etc/rc.d/init.d/mysqld #编辑

basedir=/usr/local/mysql #MySQL程序安装路径

datadir=/data/mysql #MySQl数据库存放目录

:wq! #保存退出

service mysqld start #启动

vi /etc/profile #把mysql服务加入系统环境变量:在最后添加下面这一行

export PATH=$PATH:/usr/local/mysql/bin

:wq! #保存退出

source /etc/profile #使配置立刻生效

下面这两行把myslq的库文件链接到系统默认的位置,这样你在编译类似PHP等软件时可以不用指定mysql的库文件地址。

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

ln -s /usr/local/mysql/include/mysql /usr/include/mysql

mkdir /var/lib/mysql #创建目录

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock #添加软链接

mysql -u root -p #输入之前生成的密码LZrRpp40AG*-回车

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER; #修改密码,NEVER表示密码永不过期

ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’ PASSWORD EXPIRE NEVER; #使用WITH mysql_native_password加密

#MySQL 8.0.x加密方式从mysql_native_password 更改为 caching_sha2_password,mysql8.0.x之前的客户端远程连接可能报错:authentication plugin caching_sha2

flush privileges; #刷新系统授权表

exit #退出mysql控制台

4、创建MySQL数据库、添加用户并授权

数据库名称:www.osyunwei.com

数据库用户名:osyunwei.com

数据库密码:osyunwei

授权osyunwei.com用户对www.osyunwei.com具有全部操作权限

继续在mysql控制台操作

mysql -u root -p #输入刚刚修改过的密码123456,回车

4.1、Create DATABASE IF NOT EXISTS www.osyunwei.com default charset utf8 COLLATE utf8_general_ci; #创建数据库

4.2、CREATE USER ‘osyunwei.com’@’localhost’ IDENTIFIED BY ‘osyunwei’; #创建用户

CREATE USER ‘osyunwei.com’@’127.0.0.1’ IDENTIFIED WITH mysql_native_password BY ‘osyunwei’; #加密方式为mysql_native_password

4.3、grant all privileges on www.osyunwei.com.* to ‘osyunwei.com’@’localhost’; #授权用户osyunwei.com对数据库www.osyunwei.com具有全部操作权限

grant all privileges on www.osyunwei.com.* to ‘osyunwei.com’@’127.0.0.1’; #授权用户

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION; #授权root用户具有全部数据库本地权限

4.4、MySQL5.7版本后要授权用户对所有数据库有SUPER权限,否则上一步对用户的授权只能连接但无任何操作权限。

grant SUPER on *.* to ‘osyunwei.com’@’localhost’ ; #授予用户对所有数据库有SUPER权限,否则只能连接无任何操作权限。

grant SUPER on *.* to ‘osyunwei.com’@’127.0.0.1’ ;

flush privileges; #刷新系统授权表

exit #退出mysql控制台

service mysqld restart #重启mysql数据库

二、安装Nginx

1、安装pcre

cd /usr/local/src

mkdir /usr/local/pcre

tar zxvf pcre-8.44.tar.gz

cd pcre-8.44

./configure –prefix=/usr/local/pcre

make

make install

2、安装openssl

cd /usr/local/src

mkdir /usr/local/openssl

tar zxvf openssl-1.1.1e.tar.gz

cd openssl-1.1.1e

./config  -fPIC shared  zlib –prefix=/usr/local/openssl

make

make install

3、安装zlib

cd /usr/local/src

mkdir /usr/local/zlib

tar zxvf zlib-1.2.11.tar.gz

cd zlib-1.2.11

./configure –prefix=/usr/local/zlib

make

make install

4、安装Nginx

groupadd www

useradd -g www www -s /bin/false

cd /usr/local/src

tar zxvf nginx-1.16.1.tar.gz

cd nginx-1.16.1

./configure –prefix=/usr/local/nginx –without-http_memcached_module –user=www –group=www –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-openssl=/usr/local/src/openssl-1.1.1e –with-zlib=/usr/local/src/zlib-1.2.11 –with-pcre=/usr/local/src/pcre-8.44

注意:–with-openssl=/usr/local/src/openssl-1.1.1e –with-zlib=/usr/local/src/zlib-1.2.11 –with-pcre=/usr/local/src/pcre-8.44指向的是源码包解压的路径,而不是安装的路径,否则会报错

make

make install

/usr/local/nginx/sbin/nginx #启动Nginx

设置nginx开机启动

vi /lib/systemd/system/nginx.service #添加以下代码

[Unit]

Description=The NGINX HTTP and reverse proxy server

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

ExecStartPre=/usr/local/nginx/sbin/nginx -t

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/bin/kill -s QUIT $MAINPID

ExecStartPost=/bin/sleep 0.1

PrivateTmp=true

[Install]

WantedBy=multi-user.target

:wq! #保存退出

/usr/local/nginx/sbin/nginx -s stop #停止

systemctl enable nginx.service #设置开机自启动

systemctl start nginx.service #启动

systemctl stop nginx.service #关闭

systemctl restart nginx.service #重启

systemctl reload nginx.service #重新加载配置文件

在浏览器中打开服务器IP地址,会看到下面的界面,说明Nginx安装成功。

扩展阅读:

Nginx配置txt、pdf、doc、xls等文件直接下载的方法

在nginx配置文件中添加以下代码

location / {

if ($request_filename ~* ^.*?\.(txt|pdf|doc|xls)$){

add_header Content-Disposition: ‘attachment;’;

}

}

三、安装php

(一):安装php依赖包

1、安装yasm

cd /usr/local/src

tar zxvf yasm-1.3.0.tar.gz

cd yasm-1.3.0

./configure

make

make install

2、安装libmcrypt

cd /usr/local/src

tar zxvf libmcrypt-2.5.8.tar.gz

cd libmcrypt-2.5.8

./configure

make

make install

3、安装libvpx

cd /usr/local/src

tar zxvf libvpx-1.8.2.tar.gz

cd libvpx-1.8.2

./configure –prefix=/usr/local/libvpx –enable-shared –enable-vp9

make

make install

4、安装tiff

cd /usr/local/src

tar zxvf tiff-4.0.7.tar.gz

cd tiff-4.0.7

./configure –prefix=/usr/local/tiff –enable-shared

make

make install

5、安装libpng

cd /usr/local/src

tar zxvf libpng-1.6.37.tar.gz #解压

xz -d libpng-1.6.37.tar.xz #先解压xz

tar xvf libpng-1.6.37.tar #再解压tar

或者

tar xvJf libpng-1.6.37.tar.xz #直接解压

cd libpng-1.6.37

./configure –prefix=/usr/local/libpng –enable-shared

make

make install

6、安装freetype

cd /usr/local/src

tar zxvf freetype-2.10.1.tar.gz

cd freetype-2.10.1

./configure –prefix=/usr/local/freetype –enable-shared

make

make install

7、安装jpeg

cd /usr/local/src

tar zxvf jpegsrc.v9d.tar.gz

cd jpeg-9d

./configure –prefix=/usr/local/jpeg –enable-shared

make

make install

8、安装GD库

8.1安装新版本libgd,适用于php5.4.x及其以上版本

cd /usr/local/src

tar zxvf libgd-2.3.0.tar.gz

cd libgd-2.3.0

./configure –prefix=/usr/local/libgd –enable-shared –with-jpeg=/usr/local/jpeg –with-png=/usr/local/libpng –with-freetype=/usr/local/freetype –with-fontconfig=/usr/local/freetype –with-xpm=/usr/lib64 –with-tiff=/usr/local/tiff

make

make install

8.2安装旧版本gd库,适用于php5.3x及其以下版本

cd /usr/local/src

tar zxvf gd-2.0.35.tar.gz

cd gd-2.0.35

./configure –prefix=/usr/local/gd –enable-shared –with-jpeg=/usr/local/jpeg –with-png=/usr/local/libpng –with-freetype=/usr/local/freetype –with-fontconfig=/usr/local/freetype –with-xpm=/usr/lib64 –with-tiff=/usr/local/tiff –with-vpx=/usr/local/libvpx

make

make install

9、安装t1lib

cd /usr/local/src

tar zxvf t1lib-5.1.2.tar.gz

cd t1lib-5.1.2

./configure –prefix=/usr/local/t1lib –enable-shared

make without_doc

make install

10、安装libzip

cd /usr/local/src

tar -zxvf libzip-1.2.0.tar.gz

cd libzip-1.2.0

./configure

make

make install

cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h

#拷贝文件,否则安装php可能会报错 /usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or dire

11、安装oniguruma #编译安装php7.4.x需要

cd /usr/local/src

tar -zxf oniguruma-6.9.4.tar.gz

cd oniguruma-6.9.4

./autogen.sh

./configure –prefix=/usr

make

make install

12、安装低版本openssl #适用于编译php5.6.x及其以下版本

CentOS 8.x默认的openssl版本太高,与php 5.6.x不兼容,需要降低openssl版本才能编译成功

which openssl #查询openssl目录,如/usr/include/openssl

openssl version #查看openssl版本

cd /usr/local/src

mkdir /usr/local/ssl

tar zxvf openssl-1.0.2k.tar.gz

cd openssl-1.0.2k

./config -fPIC  shared  zlib  –prefix=/usr/local/ssl

make

make install

mv /usr/bin/openssl   /usr/bin/openssl.old

mv /usr/include/openssl   /usr/include/openssl.old

mv /usr/lib64/libssl.so     /usr/lib64/libssl.so.old

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

ln -s /usr/local/ssl/include/openssl /usr/include/openssl

ln -s /usr/local/ssl/lib/libssl.so /usr/lib64/libssl.so

echo “/usr/local/ssl/lib” >> /etc/ld.so.conf

ldconfig -v #建立动态链接

openssl version

注意:带shared参数才能生成libssl.so动态链接库文件,安装curl时, –with-ssl=/usr/local/ssl 才能找到动态链接库,curl才能开启ssl模块

13、安装curl模块

cd /usr/local/src

mkdir /usr/local/curl

tar zxvf curl-7.29.0.tar.gz

cd curl-7.29.0

./configure –without-nss –prefix=/usr/local/curl –with-ssl=/usr/local/ssl

make

make install

(二):编译安装php

注意:如果系统是64位,请执行以下两条命令,否则安装php会出错。

\cp -frp /usr/lib64/libltdl.so* /usr/lib/

\cp -frp /usr/lib64/libXpm.so* /usr/lib/

1.53、安装php5.3.x

cd /usr/local/src

tar -zvxf php-5.3.29.tar.gz

cd php-5.3.29

./configure –prefix=/usr/local/php53 –with-config-file-path=/usr/local/php53/etc –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/gd –with-png-dir=/usr/lib –with-jpeg-dir=/usr/lib –with-freetype-dir=/usr/lib –with-iconv –with-zlib-dir=/usr/local/zlib –enable-xml –enable-magic-quotes –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curlwrappers –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

make #编译

make install #安装

cp php.ini-production /usr/local/php53/etc/php.ini #复制php配置文件到安装目录

#rm -rf /etc/php.ini #删除系统自带配置文件

#ln -s /usr/local/php53/etc/php.ini /etc/php.ini #添加软链接

cp /usr/local/php53/etc/php-fpm.conf.default /usr/local/php53/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

vi /usr/local/php53/etc/php-fpm.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

pid = run/php-fpm.pid #取消前面的分号

listen = 127.0.0.1:9053

:wq! #保存退出

设置 php-fpm开机启动

cp /usr/local/src/php-5.3.29/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php53-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php53-fpm #添加执行权限

chkconfig php53-fpm on #设置开机启动

vi /etc/rc.d/init.d/php53-fpm

prefix=/usr/local/php53

php_fpm_BIN=${exec_prefix}/sbin/php53-fpm

:wq! #保存退出

mv /usr/local/php53/sbin/php-fpm /usr/local/php53/sbin/php53-fpm

service php53-fpm start #启动

vi /usr/local/php53/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = OFF #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

1.55、安装php5.5.x

cd /usr/local/src

tar -zvxf php-5.5.38.tar.gz

cd php-5.5.38

export LD_LIBRARY_PATH=/usr/local/libgd/lib

./configure –prefix=/usr/local/php55 –with-config-file-path=/usr/local/php55/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-vpx-dir=/usr/local/libvpx/ –with-zlib-dir=/usr/local/zlib –with-t1lib=/usr/local/t1lib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

make #编译

make install #安装

cp php.ini-production /usr/local/php55/etc/php.ini #复制php配置文件到安装目录

#rm -rf /etc/php.ini #删除系统自带配置文件

#ln -s /usr/local/php55/etc/php.ini /etc/php.ini #添加软链接到 /etc目录

cp /usr/local/php55/etc/php-fpm.conf.default /usr/local/php55/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

#ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf #添加软连接到 /etc目录

vi /usr/local/php55/etc/php-fpm.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

pid = run/php-fpm.pid #取消前面的分号

listen = 127.0.0.1:9055

:wq! #保存退出

设置 php-fpm开机启动

cp /usr/local/src/php-5.5.38/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php55-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php55-fpm #添加执行权限

chkconfig php55-fpm on #设置开机启动

vi /etc/rc.d/init.d/php55-fpm

prefix=/usr/local/php55

php_fpm_BIN=${exec_prefix}/sbin/php55-fpm

:wq! #保存退出

mv /usr/local/php55/sbin/php-fpm /usr/local/php55/sbin/php55-fpm

vi /usr/local/php55/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = Off #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

找到opcache.enable=0

修改为opcache.enable=1 #php支持opcode缓存

找到:opcache.enable_cli=1 #php支持opcode缓存

修改为:opcache.enable_cli=0

在最后一行添加:zend_extension=opcache.so #开启opcode缓存功能

:wq! #保存退出

1.56、安装php5.6.x

cd /usr/local/src

tar -zvxf php-5.6.40.tar.gz

cd php-5.6.40

export LD_LIBRARY_PATH=/usr/local/libgd/lib

./configure –prefix=/usr/local/php56 –with-config-file-path=/usr/local/php56/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-vpx-dir=/usr/local/libvpx/ –with-zlib-dir=/usr/local/zlib –with-t1lib=/usr/local/t1lib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

make

make install

如果编译错误,可以清理后在编译一次

make clean #清理

make #编译

cp php.ini-production /usr/local/php56/etc/php.ini #复制php配置文件到安装目录

#rm -rf /etc/php.ini #删除系统自带配置文件

#ln -s /usr/local/php56/etc/php.ini /etc/php.ini #添加软链接到 /etc目录

cp /usr/local/php56/etc/php-fpm.conf.default /usr/local/php56/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

#ln -s /usr/local/php56/etc/php-fpm.conf /etc/php-fpm.conf #添加软连接到 /etc目录

vi /usr/local/php56/etc/php-fpm.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

pid = run/php-fpm.pid #取消前面的分号

listen = 127.0.0.1:9056

:wq! #保存退出

设置 php-fpm开机启动

cp /usr/local/src/php-5.6.40/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php56-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php56-fpm #添加执行权限

chkconfig php56-fpm on #设置开机启动

vi /etc/rc.d/init.d/php56-fpm

prefix=/usr/local/php56

php_fpm_BIN=${exec_prefix}/sbin/php56-fpm

:wq! #保存退出

mv /usr/local/php56/sbin/php-fpm /usr/local/php56/sbin/php56-fpm

vi /usr/local/php56/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = Off #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

找到opcache.enable=0

修改为opcache.enable=1 #php支持opcode缓存

找到:;opcache.enable_cli=1 #php支持opcode缓存

修改为:opcache.enable_cli=0

在最后一行添加:zend_extension=opcache.so #开启opcode缓存功能

:wq! #保存退出

1.70、安装php7.0.x

cd /usr/local/src

tar -zvxf php-7.0.33.tar.gz

cd php-7.0.33

export LD_LIBRARY_PATH=/usr/local/libgd/lib

./configure –prefix=/usr/local/php70 –with-config-file-path=/usr/local/php70/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

make #编译

make install #安装

cp php.ini-production /usr/local/php70/etc/php.ini #复制php配置文件到安装目录

#rm -rf /etc/php.ini #删除系统自带配置文件

#ln -s /usr/local/php70/etc/php.ini /etc/php.ini #添加软链接到 /etc目录

cp /usr/local/php70/etc/php-fpm.conf.default /usr/local/php70/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

#ln -s /usr/local/php70/etc/php-fpm.conf /etc/php-fpm.conf #添加软连接到 /etc目录

vi /usr/local/php70/etc/php-fpm.conf #编辑

pid = run/php-fpm.pid #取消前面的分号

include=/usr/local/php70/etc/php-fpm.d/*.conf

:wq! #保存退出

cp /usr/local/php70/etc/php-fpm.d/www.conf.default /usr/local/php70/etc/php-fpm.d/www.conf

vi /usr/local/php70/etc/php-fpm.d/www.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

listen = 127.0.0.1:9070

:wq! #保存退出

设置 php-fpm开机启动

cp /usr/local/src/php-7.0.33/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php70-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php70-fpm #添加执行权限

chkconfig php70-fpm on #设置开机启动

vi /etc/rc.d/init.d/php70-fpm

prefix=/usr/local/php70

php_fpm_BIN=${exec_prefix}/sbin/php70-fpm

:wq! #保存退出

mv /usr/local/php70/sbin/php-fpm /usr/local/php70/sbin/php70-fpm

vi /usr/local/php70/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = Off #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

找到opcache.enable=0

修改为opcache.enable=1 #php支持opcode缓存

找到:;opcache.enable_cli=1 #php支持opcode缓存

修改为:opcache.enable_cli=0

在最后一行添加:zend_extension=opcache.so #开启opcode缓存功能

:wq! #保存退出

1.71、安装php7.1.x

cd /usr/local/src

tar -zvxf php-7.1.33.tar.gz

cd php-7.1.33

export LD_LIBRARY_PATH=/usr/local/libgd/lib

./configure –prefix=/usr/local/php71 –with-config-file-path=/usr/local/php71/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

make #编译

make install #安装

cp php.ini-production /usr/local/php71/etc/php.ini #复制php配置文件到安装目录

rm -rf /etc/php.ini #删除系统自带配置文件

ln -s /usr/local/php71/etc/php.ini /etc/php.ini #添加软链接到 /etc目录

cp /usr/local/php71/etc/php-fpm.conf.default /usr/local/php71/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

ln -s /usr/local/php71/etc/php-fpm.conf /etc/php-fpm.conf #添加软连接到 /etc目录

vi /usr/local/php71/etc/php-fpm.conf #编辑

pid = run/php-fpm.pid #取消前面的分号

include=/usr/local/php71/etc/php-fpm.d/*.conf

:wq! #保存退出

cp /usr/local/php71/etc/php-fpm.d/www.conf.default /usr/local/php71/etc/php-fpm.d/www.conf

vi /usr/local/php71/etc/php-fpm.d/www.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

listen = 127.0.0.1:9071

:wq! #保存退出

设置 php-fpm开机启动

cp /usr/local/src/php-7.1.33/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php71-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php71-fpm #添加执行权限

chkconfig php71-fpm on #设置开机启动

vi /etc/rc.d/init.d/php71-fpm

prefix=/usr/local/php71

php_fpm_BIN=${exec_prefix}/sbin/php71-fpm

:wq! #保存退出

mv /usr/local/php71/sbin/php-fpm /usr/local/php71/sbin/php71-fpm

vi /usr/local/php71/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = Off #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

找到opcache.enable=0

修改为opcache.enable=1 #php支持opcode缓存

找到:;opcache.enable_cli=1 #php支持opcode缓存

修改为:opcache.enable_cli=0

在最后一行添加:zend_extension=opcache.so #开启opcode缓存功能

:wq! #保存退出

1.72、安装php7.2.x

cd /usr/local/src

tar -zvxf php-7.2.29.tar.gz

cd php-7.2.29

export LD_LIBRARY_PATH=/usr/local/libgd/lib

./configure –prefix=/usr/local/php72 –with-config-file-path=/usr/local/php72/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

make #编译

make install #安装

cp php.ini-production /usr/local/php72/etc/php.ini #复制php配置文件到安装目录

rm -rf /etc/php.ini #删除系统自带配置文件

ln -s /usr/local/php72/etc/php.ini /etc/php.ini #添加软链接到 /etc目录

cp /usr/local/php72/etc/php-fpm.conf.default /usr/local/php72/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

ln -s /usr/local/php72/etc/php-fpm.conf /etc/php-fpm.conf #添加软连接到 /etc目录

vi /usr/local/php72/etc/php-fpm.conf #编辑

pid = run/php-fpm.pid #取消前面的分号

include=/usr/local/php72/etc/php-fpm.d/*.conf

:wq! #保存退出

cp /usr/local/php72/etc/php-fpm.d/www.conf.default /usr/local/php72/etc/php-fpm.d/www.conf

vi /usr/local/php72/etc/php-fpm.d/www.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

listen = 127.0.0.1:9072

:wq! #保存退出

设置 php-fpm开机启动

cp /usr/local/src/php-7.2.29/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php72-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php72-fpm #添加执行权限

chkconfig php72-fpm on #设置开机启动

vi /etc/rc.d/init.d/php72-fpm

prefix=/usr/local/php72

php_fpm_BIN=${exec_prefix}/sbin/php72-fpm

:wq! #保存退出

mv /usr/local/php72/sbin/php-fpm /usr/local/php72/sbin/php72-fpm

vi /usr/local/php72/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = Off #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

找到opcache.enable=0

修改为opcache.enable=1 #php支持opcode缓存

找到:;opcache.enable_cli=1 #php支持opcode缓存

修改为:opcache.enable_cli=0

在最后一行添加:zend_extension=opcache.so #开启opcode缓存功能

:wq! #保存退出

1.73、安装php7.3.x

1.73.1

cd /usr/local/src

tar -zvxf php-7.3.16.tar.gz

cd php-7.3.16

export LD_LIBRARY_PATH=/usr/local/libgd/lib

export PKG_CONFIG_PATH=”/usr/local/lib/pkgconfig/” #libzip库安装位置,否则安装php可能会报错

./configure –prefix=/usr/local/php73 –with-config-file-path=/usr/local/php73/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd –enable-pdo

make #编译

make install #安装

cp php.ini-production /usr/local/php73/etc/php.ini #复制php配置文件到安装目录

rm -rf /etc/php.ini #删除系统自带配置文件

ln -s /usr/local/php73/etc/php.ini /etc/php.ini #添加软链接到 /etc目录

cp /usr/local/php73/etc/php-fpm.conf.default /usr/local/php73/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

ln -s /usr/local/php73/etc/php-fpm.conf /etc/php-fpm.conf #添加软连接到 /etc目录

vi /usr/local/php73/etc/php-fpm.conf #编辑

pid = run/php-fpm.pid #取消前面的分号

include=/usr/local/php73/etc/php-fpm.d/*.conf

:wq! #保存退出

cp /usr/local/php73/etc/php-fpm.d/www.conf.default /usr/local/php73/etc/php-fpm.d/www.conf

vi /usr/local/php73/etc/php-fpm.d/www.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

listen = 127.0.0.1:9073

:wq! #保存退出

1.73.2、设置 php-fpm开机启动(有两种设置方法,选择一种即可)

1.73.2.1 #chkconfig方式

cp /usr/local/src/php-7.3.16/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php73-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php73-fpm #添加执行权限

chkconfig php73-fpm on #设置开机启动

vi /etc/rc.d/init.d/php73-fpm

prefix=/usr/local/php73

php_fpm_BIN=${exec_prefix}/sbin/php73-fpm

:wq! #保存退出

mv /usr/local/php73/sbin/php-fpm /usr/local/php73/sbin/php73-fpm

service php73-fpm start #启动php71-fpm

service php73-fpm stop #停止php71-fpm

1.73.2.2 #systemctl方式

vi /usr/lib/systemd/system/php73-fpm.service #编辑添加以下代码

[Unit]

Description=The PHP FastCGI Process Manager

After=syslog.target network.target

[Service]

Type=simple

PIDFile=/run/php-fpm.pid

ExecStart=/usr/local/php73/sbin/php73-fpm –nodaemonize –fpm-config /usr/local/php73/etc/php-fpm.conf

ExecReload=/bin/kill -USR2 $MAINPID

ExecStop=/bin/kill -SIGINT $MAINPID

[Install]

WantedBy=multi-user.target

:wq! #保存退出

mv /usr/local/php73/sbin/php-fpm /usr/local/php73/sbin/php73-fpm

systemctl enable php73-fpm.service #设置开机自启动

systemctl daemon-reload #重新加载systemctll

systemctl start php73-fpm.service #启动

systemctl stop php73-fpm.service #停止

systemctl restart php73-fpm.service #重启

1.73.3 配置php配置文件

vi /usr/local/php73/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = Off #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

找到opcache.enable=0

修改为opcache.enable=1 #php支持opcode缓存

找到:;opcache.enable_cli=1

修改为:opcache.enable_cli=0 #php支持opcode缓存

在最后一行添加:zend_extension=opcache.so #开启opcode缓存功能

:wq! #保存退出

1.74、安装php7.4.x

#恢复CentOS 8.x自带的openssl和curl默认高版本

#php7.4.x中这2个库需要使用CentOS 8.x自带的高版本进行编译–with-openssl  –with-curl

rm -rf /usr/lib64/libssl.so

mv /usr/lib64/libssl.so.old /usr/lib64/libssl.so

rm -rf /usr/include/openssl

mv /usr/include/openssl.old /usr/include/openssl

rm -rf /usr/bin/openssl

mv /usr/bin/openssl.old /usr/bin/openssl

cd /usr/local/src

tar -zvxf php-7.4.4.tar.gz

cd php-7.4.4

export LD_LIBRARY_PATH=/usr/local/libgd/lib #设置libgd库环境变量

export PKG_CONFIG_PATH=”/usr/local/lib/pkgconfig/” #设置libzip环境变量

./configure –prefix=/usr/local/php74 –with-config-file-path=/usr/local/php74/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-gd –with-jpeg=/usr/local/jpeg –with-freetype=/usr/local/freetype –with-xpm=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –with-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –with-openssl –enable-pcntl –enable-sockets –with-xmlrpc –with-zip –enable-soap –without-pear –with-gettext –enable-session –with-curl –enable-ctype –enable-mysqlnd –enable-pdo

make #编译

make install #安装

./configure –help #可以查看编译参数的写法

cp php.ini-production /usr/local/php74/etc/php.ini #复制php配置文件到安装目录

rm -rf /etc/php.ini #删除系统自带配置文件

ln -s /usr/local/php74/etc/php.ini /etc/php.ini #添加软链接到 /etc目录

cp /usr/local/php74/etc/php-fpm.conf.default /usr/local/php74/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

ln -s /usr/local/php74/etc/php-fpm.conf /etc/php-fpm.conf #添加软连接到 /etc目录

vi /usr/local/php74/etc/php-fpm.conf #编辑

pid = run/php-fpm.pid #取消前面的分号

include=/usr/local/php74/etc/php-fpm.d/*.conf

:wq! #保存退出

cp /usr/local/php74/etc/php-fpm.d/www.conf.default /usr/local/php74/etc/php-fpm.d/www.conf

vi /usr/local/php74/etc/php-fpm.d/www.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

listen = 127.0.0.1:9074

:wq! #保存退出

设置 php-fpm开机启动

cp /usr/local/src/php-7.4.4/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php74-fpm #拷贝php-fpm到启动目录

chmod +x /etc/rc.d/init.d/php74-fpm #添加执行权限

chkconfig php74-fpm on #设置开机启动

vi /etc/rc.d/init.d/php74-fpm

prefix=/usr/local/php74

php_fpm_BIN=${exec_prefix}/sbin/php74-fpm

:wq! #保存退出

mv /usr/local/php74/sbin/php-fpm /usr/local/php74/sbin/php74-fpm

vi /usr/local/php74/etc/php.ini #编辑配置文件

找到:disable_functions =

修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

找到:;date.timezone =

修改为:date.timezone = PRC #设置时区

找到:expose_php = On

修改为:expose_php = Off #禁止显示php版本的信息

找到:short_open_tag = Off

修改为:short_open_tag = ON #支持php短标签

找到opcache.enable=0

修改为opcache.enable=1 #php支持opcode缓存

找到:;opcache.enable_cli=1

修改为:opcache.enable_cli=0 #php支持opcode缓存

在最后一行添加:zend_extension=opcache.so #开启opcode缓存功能

:wq! #保存退出

#恢复openssl安装版本

mv /usr/bin/openssl /usr/bin/openssl.old

mv /usr/include/openssl /usr/include/openssl.old

mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

ln -s /usr/local/ssl/include/openssl /usr/include/openssl

ln -s /usr/local/ssl/lib/libssl.so /usr/lib64/libssl.so

ldconfig -v #建立动态链接

openssl version

四、配置nginx支持php

vi /usr/local/nginx/conf/nginx.conf

#修改/usr/local/nginx/conf/nginx.conf 配置文件,需做如下修改

user www www;  #首行user去掉注释,修改Nginx运行组为www www;必须与/usr/local/php/etc/php-fpm.conf中的user,group配置相同,否则php运行出错

index index.html index.htm index.php; #添加index.php

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9053;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

#取消FastCGI server部分location的注释,注意fastcgi_param行的参数,改为$document_root$fastcgi_script_name,或者使用绝对路径

/etc/init.d/nginx restart #重启nginx

service php71-fpm start #启动php71-fpm

说明:

fastcgi_pass 127.0.0.1:9000;中使用端口号来区分php版本,需要使用哪个php版本就修改为相应的端口。

9074对应的php版本是php7.4.x

9073对应的php版本是php7.3.x

9072对应的php版本是php7.2.x

9071对应的php版本是php7.1.x

9070对应的php版本是php7.0.x

9056对应的php版本是php5.6.x

9055对应的php版本是php5.5.x

9053对应的php版本是php5.3.x

五、多版本php共存总结

1、规划php安装路径

/usr/local/php53

/usr/local/php55

/usr/local/php56

/usr/local/php70

/usr/local/php71

/usr/local/php72

/usr/local/php73

/usr/local/php74

2、编译php参数

./configure –prefix=/usr/local/php53 –with-config-file-path=/usr/local/php53/etc –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/gd –with-png-dir=/usr/lib –with-jpeg-dir=/usr/lib –with-freetype-dir=/usr/lib –with-iconv –with-zlib-dir=/usr/local/zlib –enable-xml –enable-magic-quotes –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curlwrappers –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

./configure –prefix=/usr/local/php55 –with-config-file-path=/usr/local/php55/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-vpx-dir=/usr/local/libvpx/ –with-zlib-dir=/usr/local/zlib –with-t1lib=/usr/local/t1lib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

./configure –prefix=/usr/local/php56 –with-config-file-path=/usr/local/php56/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-vpx-dir=/usr/local/libvpx/ –with-zlib-dir=/usr/local/zlib –with-t1lib=/usr/local/t1lib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

./configure –prefix=/usr/local/php70 –with-config-file-path=/usr/local/php70/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

./configure –prefix=/usr/local/php71 –with-config-file-path=/usr/local/php71/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

./configure –prefix=/usr/local/php72 –with-config-file-path=/usr/local/php72/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd

./configure –prefix=/usr/local/php73 –with-config-file-path=/usr/local/php73/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-mysqlnd-compression-support –with-gd=/usr/local/libgd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –with-openssl=/usr/local/ssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-curl=/usr/local/curl –enable-ctype –enable-mysqlnd –enable-pdo

./configure –prefix=/usr/local/php74 –with-config-file-path=/usr/local/php74/etc –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –enable-gd –with-jpeg=/usr/local/jpeg –with-freetype=/usr/local/freetype –with-xpm=/usr/lib64 –with-zlib-dir=/usr/local/zlib –with-iconv –with-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –with-openssl –enable-pcntl –enable-sockets –with-xmlrpc –with-zip –enable-soap –without-pear –with-gettext –enable-session –with-curl –enable-ctype –enable-mysqlnd –enable-pdo

3、php开机启动设置

cp /usr/local/src/php-5.3.29/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php53-fpm

vi /etc/rc.d/init.d/php53-fpm

prefix=/usr/local/php53

php_fpm_BIN=${exec_prefix}/sbin/php53-fpm

mv /usr/local/php53/sbin/php-fpm    /usr/local/php53/sbin/php53-fpm

4、php监听端口设置

vi /usr/local/php53/etc/php-fpm.conf #编辑

user = www #设置php-fpm运行账号为www

group = www #设置php-fpm运行组为www

pid = run/php-fpm.pid #取消前面的分号

listen = 127.0.0.1:9053

5、nginx结合php

修改nginx站点配置文件

/usr/local/nginx/conf/nginx.conf

fastcgi_pass 127.0.0.1:9053;

根据之前php的设置,选择相应的端口,例如9053对应的php版本是php5.3.x

那么此站点的php版本就为php5.3.x

fastcgi_pass 127.0.0.1:9055;

根据之前php的设置,选择相应的端口,例如9055对应的php版本是php5.5.x

那么此站点的php版本就为php5.5.x

测试篇

cd /usr/local/nginx/html/ #进入nginx默认网站根目录

rm -rf /usr/local/nginx/html/* #删除默认测试页

vi index.php #新建index.php文件

<?php

phpinfo();

?>

:wq! #保存退出

chown www.www /usr/local/nginx/html/ -R #设置目录所有者

chmod 700 /usr/local/nginx/html/ -R #设置目录权限

后记:

CentOS 8.x + MySQL8.0.x + php 7.4组合建议使用系统自带的GD库进行编译,php驱动只有mysqli和mysqlnd驱动。

CentOS 8.x + MySQL8.0.x + php 7.3/7.2/7.1/7.0/5.6/5.5组合建议使用libgd-2.3.0进行编译,php驱动包括mysqli和mysqlnd

CentOS 8.x + MySQL8.0.x + php 5.3组合建议使用gd-2.0.35进行编译,php驱动只有mysqlnd

CentOS 8.x + MySQL8.0.x + php 5.4/5.2,此组合目前编译安装php存在问题,不推荐。

推荐:CentOS 8.x + MySQL8.0.x使用php 7.3/7.2/7.1/7.0/5.6/5.5组合最佳。

php各个小版本的安装过程相同,如php 7.3.10和php 7.3.16安装过程一样。

至此,CentOS 8.x编译安装Nginx1.16.x+MySQL8.0.x+PHP7.4.x 7.3.x 7.2.x 7.1.x 7.0.x 5.6.x 5.5.x 5.3.x 多版本全能环境教程完成。