CentOS安装Tengine(Nginx)和PHP环境,编译附加模块 发表于 2024-07-07 更新于 2025-05-12
河南
技术集 Linux 运维 Web CentOS安装Tengine(Nginx)和PHP环境,编译附加模块 FoxHui 2024-07-07 2025-05-12 安装Tengine 编译和安装 因为Tengine是阿里优化的Nginx,并发能力较好,但是安装和使用方式和Nginx是一模一样的,先去Tengine官网找最新版的连接,截至本文最新版本为3.1.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 安装必要工具,若已有跳过这一步 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.0cd tengine-3.1.0 # 生成Makefile文件并编译安装 ./configure make make install
中途可能会出现以下报错,执行dnf install pcre-devel
之后再从./configure
重新开始执行
1 2 3 4 ./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创建一个配置文件,一定要在这个目录里
1 vim /usr/lib/systemd/system/nginx.service
然后点i键进入编辑模式,将下面的内容复制按Shift+Insert粘贴进去,其中/usr/local/nginx
是你Nginx的安装路径,若你没有在编译安装时使用--prefix
修改路径则直接用这个就行
1 2 3 4 5 6 7 8 9 10 11 12 [Unit] Description =NginxAfter =network.target remote-fs.target nss-lookup.target[Service] Type =forkingExecStart =/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confExecReload =/usr/local/nginx/sbin/nginx -s reloadExecStop =/usr/local/nginx/sbin/nginx -s stop[Install] WantedBy =multi-user.target
然后按Esc,输入:wq
保存并退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 重载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
1 2 3 4 5 6 7 8 9 10 11 12 13 # 确保为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
重新开始执行
1 2 3 configure: error: Package requirements (libxml-2.0 >= 2.9.0) were not met: Package 'libxml-2.0', required by 'virtual:world', not found
若出现其他的报错,只要不是兼容,大概率是缺运行库,根据下面方法自己进行排查
1 2 3 4 5 6 7 # 比如上面的报错告诉你缺少libxml dnf search libxml # 然后寻找给你列出的前几个里面,找到一个最贴近的结尾为devel的安装即可 dnf install libxml2-devel # 若系统没有这个库,则尝试换源或者升级系统,不想升级就去github找源码手动编译安装,没有的这个问题普遍存在在老版本的CentOS上
接下来复制配置文件
1 2 3 4 5 6 7 8 9 # 复制预设配置文件 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管理
1 vim /usr/lib/systemd/system/php8.service
然后把下面的粘贴进去,php8
根据自己的实际情况可以更改
1 2 3 4 5 6 7 8 9 10 11 [Unit] Description =php-fpmAfter =network.target[Service] Type =forkingExecStart =/usr/local/php8/sbin/php-fpm -y /usr/local/php8/etc/php-fpm.conf -c /usr/local/php8/php.iniExecStop =/usr/local/php8/sbin/php-fpm stop[Install] WantedBy =multi-user.target
然后按Esc,输入:wq
保存并退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 重载systemctl systemctl daemon-reload # 开启自启动(禁用改成disable ) systemctl enable php8 # 开启 systemctl start php8 # 关闭 systemctl stop php8 # 重启 systemctl restart php8
连接到Nginx 使用TCP9000的方法比较简单,但是效率不高,这里主要教的是使用unixsock的方式连接,这样效率比较高,大部分生产环境中也是这样配置的,如宝塔面板的php配置,我们先打开Nginx的配置文件
1 vim /usr/local/nginx/conf/nginx.conf
在server{}
块中找到类似以下内容,按下i键进入编辑模式,将前面的#
注释去掉,并且如下将fastcgi_param
中的/scripts$fastcgi_script_name
改为$document_root$fastcgi_script_name
1 2 3 4 5 6 7 8 9 ... #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连接,你可以
1 2 3 4 5 6 7 8 9 10 11 # 把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的配置文件
1 vim /usr/local/php8/etc/php-fpm.d/www.conf
然后将listen = 127.0.0.1:9000
和listen.backlog = 511
改为下面的样子,第二个记得把前面的;
注释去掉
1 2 3 4 5 6 7 ... listen = /dev/shm/php8.sock ; Set listen(2) backlog. ; Default Value: 511 (-1 on FreeBSD and OpenBSD) listen.backlog = -1 ...
以及下拉后的下面三行前面的;
注释去掉
1 2 3 4 5 ... listen.owner = nobody listen.group = nobody listen.mode = 0660 ...
然后修改nginx的配置文件
1 vim /usr/local/nginx/conf/nginx.conf
将刚才修改的那一部分的127.0.0.1:9000
改为以下的样子,以及配置文件第一行的#user nobody
前的#
注释去掉
1 2 3 4 5 6 7 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,再次访问你的服务器即可
1 2 3 # 重启php和nginx systemctl restart php8 systemctl restart nginx
编译php模块 由于我们安装的是一个纯净版的php,没有任何模块,所以在使用时缺什么模块需要根据所缺安装,比如我要使用typecho,提示我缺少mbstring模块,我们就以这个为例子,首先php的源码文件夹不要删,cd进去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 安装必要工具 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
就可以了
1 2 3 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
1 2 # 就是上面复制得到那个php.ini vim /usr/local/php8/php.ini
在文档中下部分找到一堆extension=
的位置,按i进入编辑模式,添加一行
1 extension =/usr/local/php8/lib/php/extensions/no -debug-non-zts-20200930 /mbstring.so
保存退出,重启php即可