前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【腾讯云的1001种玩法】AMH 4.2 升级Nginx与PHP实战练习与笔记

【腾讯云的1001种玩法】AMH 4.2 升级Nginx与PHP实战练习与笔记

原创
作者头像
ZNing
修改2017-06-19 19:18:20
1.7K0
修改2017-06-19 19:18:20
举报
文章被收录于专栏:ZNing·腾创库ZNing·腾创库

最近对AMH的系统比较感兴趣,特拿来了AMH 4.2来尝试下对其内核版本升级一下,并做了笔记供需要的同学参考。

前几天在对张宁网进行更新改版,配置SSL的时候碰见个问题:AMH面板自带的nginx所编译的OpenSSL版本过低导致有CVE2016-2107漏洞,对服务器运维十分危险。经过先期自我修复,并上报给AMH官方对漏洞进行临时处理与预警。官方也及时解决了此OpenSSL版本过低导致的AMH系列环境软件的隐患(虽然AMH官方处理速度还可以,不过态度有点那个,早先还以为是小白把80端口Listen了俩呢)。不过对于已经停止更新的AMH 4.2,这样的问题仍然存在。

于是,今天我突发奇想,何不装一个AMH 4.2来实战一波升级配置呢。说干就干。

[TOC]

关于AMH 4.2

AMH简介

先来看看AMH的介绍:

AMH 是国内首个开源的主机面板,使用APL开源软件协议。AMH 实现平台化架构设计,高可扩展灵活性,所有功能软件可选择定制下载安装。AMH 支持用户自由弹性组建运行环境与切换环境,您可以下载安装不同版本的WEB服务器、数据库、脚本软件自由组合创建您需要的运行环境。例如,您可以创建 LNMP、LAMP、LNMH、LNGX、LNAMP等不同WEB应用环境。(PHP环境支持所有PHP版本共存,包括PHP5.2、5.3、5.4、5.5、5.6、7.0)

看上去AMH还是很牛X的嘛。不过这介绍已经仅适用于AMH 5.x版本的了。那么AMH 4.2是什么情况呢?

AMH 4.2 为独立的一套LNMP/Nginx虚拟主机面板,安装请使用纯净系统。编译安装方式 (安装时间15至25分钟) AMH4.2 编译安装支持的系统: 支持目前 CentOS、Ubuntu、Debian 以下版本: CentOS 6 x64、CentOS 6 i386、CentOS 5 x64、CentOS 5 i386、Ubuntu 12 x64、Ubuntu 12 i386、Debian 6 x64 (squeeze)、Debian 6 i386 (squeeze)

实际安装AMH 4.2之后,我们看到其所带组件的情况如下:

Nginx:

代码语言:javascript
复制
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.4.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module

PHP:

代码语言:javascript
复制
[root@localhost ~]# /usr/local/php/bin/php -v
PHP 5.3.27p1 (cli) (built: Jun 23 2016 20:25:46)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

[root@localhost ~]# /usr/local/php/bin/php -i | grep configure
Configure Command =>  './configure'  '--prefix=/usr/local/php' '--enable-fpm' '--with-fpm-user=www' '--with-fpm-group=www' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--with-openssl' '--with-zlib' '--with-curl' '--enable-ftp' '--with-gd' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir' '--enable-gd-native-ttf' '--enable-mbstring' '--enable-zip' '--with-iconv=/usr/local/libiconv' '--with-mysql=/usr/local/mysql' '--without-pear'

MySQL:

代码语言:javascript
复制
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.34-log Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

本次任务

我们这次的目的是,将nginx升级到nginx 1.10.1,并解决OpenSSL引起的CVE2016-2107漏洞。同时将PHP升级到PHP 5.6.22。

准备工作

对yum库进行升级更新

代码语言:javascript
复制
# yum update -y

安装编译接下来几款软件时需要的依赖包

代码语言:javascript
复制
# yum -y install libxml2 libxml2-devel curl-devel openssl openssl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel

查看OpenSSL版本

代码语言:javascript
复制
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

这里,如果不是OpenSSL 1.0.2h或OpenSSL1.0.1t,则需要升级至上述版本。本服务器使用的是OpenSSL 1.0.1e,鉴于服务器情况,需要升级到OpenSSL1.0.1t。

升级/安装OpenSSL

代码语言:javascript
复制
# cd /usr/local/src/
# wget http://www.openssl.org/source/openssl-1.0.1t.tar.gz
# tar -zxvf openssl-1.0.1t.tar.gz
# cd  openssl-1.0.1t
# ./config shared zlib
# make && make install

#修改历史的OpenSSL文件设置备份
# mv /usr/bin/openssl /usr/bin/openssl.old
# mv /usr/include/openssl /usr/include/openssl.old

#设置软连接使其使用新的OpenSSL版本 刚刚安装的OpenSSL默认安装在/usr/local/ssl
# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
# ln -s /usr/local/ssl/include/openssl /usr/include/openssl

#更新动态链接库数据
# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
# ldconfig -v

再次检查OpenSSL版本信息.

代码语言:javascript
复制
# openssl version
OpenSSL 1.0.1t  3 May 2016

如果是OpenSSL 1.0.1t,则说明更新成功。

升级PHP

下载、编译与安装PHP 5.6.22

请先回到主目录

代码语言:javascript
复制
# cd

备份备份旧版本的php

代码语言:javascript
复制
# tar -zcvf /usr/local/php-old.tar.gz /usr/local/php/

下载php 5.6.22,并解压后进入该目录

代码语言:javascript
复制
# wget http://hk2.php.net/distributions/php-5.6.22.tar.gz
# tar -zxvf php-5.6.22.tar.gz
# cd php-5.6.22

开始配置

代码语言:javascript
复制
# ./configure  --prefix=/usr/local/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-config-file-path=/etc --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --enable-zip --with-iconv=/usr/local/libiconv --with-mysql=/usr/local/mysql --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --without-pear --disable-fileinfo --enable-opcache

编译

代码语言:javascript
复制
# make && make install

出现如下所示内容,可判断是升级完毕:

代码语言:javascript
复制
Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
Installing PHP CLI binary:        /usr/local/php/bin/
Installing PHP CLI man page:      /usr/local/php/php/man/man1/
Installing PHP FPM binary:        /usr/local/php/sbin/
Installing PHP FPM config:        /usr/local/php/etc/
Installing PHP FPM man page:      /usr/local/php/php/man/man8/
Installing PHP FPM status page:   /usr/local/php/php/php/fpm/
Installing PHP CGI binary:        /usr/local/php/bin/
Installing PHP CGI man page:      /usr/local/php/php/man/man1/
Installing build environment:     /usr/local/php/lib/php/build/
Installing header files:           /usr/local/php/include/php/
Installing helper programs:       /usr/local/php/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php/php/man/man1/
  page: phpize.1
  page: php-config.1
/root/php-5.6.22/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers:           /usr/local/php/include/php/ext/pdo/

测试——非必须操作

代码语言:javascript
复制
# make test

可能需要加上执行权限

代码语言:javascript
复制
# chmod +x  /etc/init.d/php-fpm

额外的配置

在php-fpm.conf、php-fpm-template.conf、amh.conf三个文件中插入如下内容:

代码语言:javascript
复制
listen.owner = www
listen.group = www
listen.mode = 0660

三个文件的路径如下:

代码语言:javascript
复制
vim /usr/local/php/etc/php-fpm.conf
vim /usr/local/php/etc/php-fpm-template.conf
vim /usr/local/php/etc/fpm/amh.conf

另外,在php.ini文件中,也需要增加一点东西:

搜索[Pdo_mysql]标签,在其下方加入如下内容:

代码语言:javascript
复制
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so

注意,no-debug-non-zts-20131226这个需要看安装后给的Installing shared extensions,并确保这个路径内有pdo_mysql.so文件。

使升级的PHP生效

重启php

代码语言:javascript
复制
# amh php stop
# amh php start

如上述命令无效,可以执行如下命令

代码语言:javascript
复制
# killall php-fpm && /usr/local/php/sbin/php-fpm -y=/usr/local/php/etc/php-fpm.conf -c=/usr/local/php/etc/php.ini
# amh php start
# php-fpm

查看是否启动成功

代码语言:javascript
复制
# ps -aux | grep php

查看php版本

代码语言:javascript
复制
# /usr/local/php/bin/php -v

升级nginx

下载、编译与安装nginx 1.10.1

请先回到主目录

代码语言:javascript
复制
# cd

备份现有nginx运行程序与nginx配置文件。

代码语言:javascript
复制
# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.0622

下载nginx 1.10.1,并解压后进入该目录

代码语言:javascript
复制
# wget http://nginx.org/download/nginx-1.10.1.tar.gz
# tar -zxvf nginx-1.10.1.tar.gz
# cd nginx-1.10.1

重新编译nginx 1.10.1,这里我们参考新版AMH 5.x的configure,调整下编译的参数如下:

代码语言:javascript
复制
# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.1t --with-http_gzip_static_module  --with-http_v2_module --with-threads --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module

执行make,这里我们不选择make install,因为我们只需要替换执行文件。

代码语言:javascript
复制
# make

使升级的nginx生效

停止AMH相关应用:

代码语言:javascript
复制
# amh nginx stop

接下来,我们需要备份旧版本的nginx可执行文件并复制新的已经编译好的执行文件:

代码语言:javascript
复制
# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
# cp objs/nginx /usr/local/nginx/sbin/nginx

检测nginx文件版本及编译情况:

代码语言:javascript
复制
[root@localhost nginx-1.10.1]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1t  3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.1t --with-http_gzip_static_module --with-http_v2_module --with-threads --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module

启动nginx以及AMH相关应用:

代码语言:javascript
复制
# amh nginx start
# amh start

如果显示[OK] Nginx start,则说明nginx已经启动,升级成功。

升级完成确认

可以通过AMH 4.2后台的phpinfo查看升级后的结果,如图:

phpinfo检测到的PHP Version 为 5.6.22
phpinfo检测到的PHP Version 为 5.6.22

可以看到,phpinfo检测到的PHP Version 为 5.6.22。

当前服务器软体版本为nginx 1.10.1
当前服务器软体版本为nginx 1.10.1

搜索相关参数,可以找到当前服务器软体版本为nginx 1.10.1。本次升级圆满完成。

小结

本来PHP想升级到7.0.7的,结果一直都不行。感觉配置上可能是php-fpm和mysql的动态链接库出问题了。不过因为最近有考试,就没再弄。

另外也是由于上述最后一个原因,时间问题,并没有尝试升级AMH 4.2的MySQL。等有兴趣了再说吧。不过看了下AMH 4.2的安装脚本,感觉Linux集成环境的配置挺好玩的,等回头有空了研究下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于AMH 4.2
    • AMH简介
      • 本次任务
      • 准备工作
      • 升级PHP
        • 下载、编译与安装PHP 5.6.22
          • 额外的配置
            • 使升级的PHP生效
            • 升级nginx
              • 下载、编译与安装nginx 1.10.1
                • 使升级的nginx生效
                • 升级完成确认
                • 小结
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档