CentOS安装Tengine(Nginx)和PHP环境,编译附加模块
安装Tengine
编译和安装
因为Tengine是阿里优化的Nginx,并发能力较好,但是安装和使用方式和Nginx是一模一样的,先去Tengine官网找最新版的连接,截至本文最新版本为3.1.0
# 安装必要工具,若已有跳过这一步
dnf install gcc gcc-c++ make curl
# 确保为root目录
cd
# 下载源码包
curl -o te.tar.gz -L https://tengine.taobao.org/download/tengine-3.1.0.tar.gz
# 解压
tar -zxvf te.tar.gz
# cd进入解压后的目录,我这里是tengine-3.1.0
cd tengine-3.1.0
# 生成Makefile文件并编译安装
./configure
make
make install
中途可能会出现以下报错,执行dnf install pcre-devel
之后再从./configure
重新开始执行
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
设置开机自启
为了更方便管理这里使用systemctl来管理,先使用vim创建一个配置文件,一定要在这个目录里
vim /usr/lib/systemd/system/nginx.service
然后点i键进入编辑模式,将下面的内容复制按Shift+Insert粘贴进去,其中/usr/local/nginx
是你Nginx的安装路径,若你没有在编译安装时使用--prefix
修改路径则直接用这个就行
[Unit]
Description=Nginx
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
然后按Esc,输入:wq
保存并退出
# 重载systemctl
systemctl daemon-reload
# 开启自启动(禁用改成disable)
systemctl enable nginx
# 开启
systemctl start nginx
# 重载配置文件
systemctl reload nginx
# 关闭
systemctl stop nginx
# 重启
systemctl restart nginx
安装PHP
编译和安装
先去PHP官网Download页面,点击侧栏Old archives可以看历史版本,找你你想要的版本,这里使用8.0.29
# 确保为root目录
cd
# 下载源码包
curl -o php.tar.gz -L https://www.php.net/distributions/php-8.0.29.tar.gz
# 解压
tar -zxvf php.tar.gz
# 生成Makefile文件并编译安装(指定到php8目录是防止未来安装其他版本的php方便区分)
./configure --enable-fpm --prefix=/usr/local/php8
make
make install
中途可能出现以下报错,执行dnf install libxml2-devel
之后再从./configure
重新开始执行
configure: error: Package requirements (libxml-2.0 >= 2.9.0) were not met:
Package 'libxml-2.0', required by 'virtual:world', not found
若出现其他的报错,只要不是兼容,大概率是缺运行库,根据下面方法自己进行排查
# 比如上面的报错告诉你缺少libxml
dnf search libxml
# 然后寻找给你列出的前几个里面,找到一个最贴近的结尾为devel的安装即可
dnf install libxml2-devel
# 若系统没有这个库,则尝试换源或者升级系统,不想升级就去github找源码手动编译安装,没有的这个问题普遍存在在老版本的CentOS上
接下来复制配置文件
# 复制预设配置文件
cp /usr/local/php8/etc/php-fpm.conf.default /usr/local/php8/etc/php-fpm.conf
cp /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf
# 复制php.ini
cp php.ini-production /usr/local/php8/php.ini
# 可以测试以下会不会有php版本输出
/usr/local/php8/sbin/php-fpm -v
开启开机自启
依然使用systemctl管理
vim /usr/lib/systemd/system/php8.service
然后把下面的粘贴进去,php8
根据自己的实际情况可以更改
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php8/sbin/php-fpm -y /usr/local/php8/etc/php-fpm.conf -c /usr/local/php8/php.ini
ExecStop=/usr/local/php8/sbin/php-fpm stop
[Install]
WantedBy=multi-user.target
然后按Esc,输入:wq
保存并退出
# 重载systemctl
systemctl daemon-reload
# 开启自启动(禁用改成disable)
systemctl enable php8
# 开启
systemctl start php8
# 关闭
systemctl stop php8
# 重启
systemctl restart php8
连接到Nginx
使用TCP9000的方法比较简单,但是效率不高,这里主要教的是使用unixsock的方式连接,这样效率比较高,大部分生产环境中也是这样配置的,如宝塔面板的php配置,我们先打开Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
在server{}
块中找到类似以下内容,按下i键进入编辑模式,将前面的#
注释去掉,并且如下将fastcgi_param
中的/scripts$fastcgi_script_name
改为$document_root$fastcgi_script_name
...
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
#}
...
按Esc输入:wq
保存并退出,到这时其实已经可以用了,但是使用的是TCP连接,你可以
# 把html的主页改掉名字或者删除
mv /usr/local/nginx/html/index.html /usr/local/nginx/html/index.html.bak
# 新建一个index.php
vim /usr/local/nginx/html/index.php
# 填入“<?php phpinfo(); ?>”后然后保存退出
# 重启php和nginx
systemctl restart php8
systemctl restart nginx
此时访问你的服务器大概率已经可以显示出php的信息界面了,接下来我们把TCP连接调整为unixsock连接,首先选取一个地方放sock文件,这里推荐放进/dev/shm
中,这个文件夹是在运行内存里,读写速度快效率更高,然后打开php-fpm的配置文件
vim /usr/local/php8/etc/php-fpm.d/www.conf
然后将listen = 127.0.0.1:9000
和listen.backlog = 511
改为下面的样子,第二个记得把前面的;
注释去掉
...
listen = /dev/shm/php8.sock
; Set listen(2) backlog.
; Default Value: 511 (-1 on FreeBSD and OpenBSD)
listen.backlog = -1
...
以及下拉后的下面三行前面的;
注释去掉
...
listen.owner = nobody
listen.group = nobody
listen.mode = 0660
...
然后修改nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
将刚才修改的那一部分的127.0.0.1:9000
改为以下的样子,以及配置文件第一行的#user nobody
前的#
注释去掉
location ~ \.php$ {
root html;
fastcgi_pass unix:/dev/shm/php8.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
然后重启nginx和php,再次访问你的服务器即可
# 重启php和nginx
systemctl restart php8
systemctl restart nginx
编译php模块
由于我们安装的是一个纯净版的php,没有任何模块,所以在使用时缺什么模块需要根据所缺安装,比如我要使用typecho,提示我缺少mbstring模块,我们就以这个为例子,首先php的源码文件夹不要删,cd进去
# 安装必要工具
dnf install autoconf
# 进入php源码文件夹的ext目录
cd /root/php-8.0.29/ext/
# 我们缺少mbstring模块(可以使用ls查看有没有你需要用的模块)
cd mbstring
# 通过phpize工具生成配置文件,/usr/local/php8是你的php安装目录
/usr/local/php8/bin/phpize
# 编译并安装,prefix是最后编译出来的so的输出位置,其实放哪都行,最后配置文件指向就可以了
./configure --with-php-config=/usr/local/php8/bin/php-config
make
make install
中途可能出现以下报错,执行dnf install oniguruma-devel
之后再从./configure
重新开始执行,如果是其他错误就dnf search
就可以了
configure: error: Package requirements (oniguruma) were not met:
Package 'oniguruma', required by 'virtual:world', not found
然后一般会输出在php安装目录下的lib/php/extensions/no-debug-non-zts-20200930/
文件夹中,可以自行打开检查一下,然后打开php的配置文件指向这个so
# 就是上面复制得到那个php.ini
vim /usr/local/php8/php.ini
在文档中下部分找到一堆extension=
的位置,按i进入编辑模式,添加一行
extension=/usr/local/php8/lib/php/extensions/no-debug-non-zts-20200930/mbstring.so
保存退出,重启php即可