php环境的配置对我来说真的有点迷惑,php官网上让我们自行编译,百度出来的是让我们使用apt安装,这两种方法我都试了,都是可行的。这里记录一下。
通过apt安装
apt install php php-cli php-common php-fpm php-mysql
执行这个命令的结果告诉我大概意思是配置过程出了问题,我就又执行了一次,这次说依赖出了问题,我看到里面有php8.1-xxx,我就灵机一动,把上面的命令改了改有执行了一次
apt install php8.1 php8.1-cli php8.1-common php8.1-fpm php8.1-mysql
结果反正成功了。接下来我打算安装nginx
apt install nginx
然后创建一个wordpress用的server配置,在/etc/nginx/sites-enabled/wordpress(通过拷贝/etc/nginx/sites-enabled/default),然后修改其中内容
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html/wordpress;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
}
}
说实话要不是default里面有php相关的配置,我估计我类似都不知道还有unix:/run/php/php8.1-fpm.sock这种写法,那肯定要走很多弯路,因为我只知道127.0.0.1:9000这种写法,而刚好通过apt安装的php8.1-fpm好像并不能通过127.0.0.1:9000来使用,不要问我怎么知道的,因为我刚开始就是用这种方法,不成功后,偶然看到有一句注释的# fastcgi_pass unix:/run/php/php7.4-fpm.sock,我就改成8.1试了试,没成想竟然真行:)
然后我在/usr/share/nginx/html/wordpress(wordpress是我创建的)里面创建了test.php
<?php phpinfo() ?>
然后要启动nginx了,systemctl start nginx,报错了,我用systemctl status nginx看状态,没启动成功,就去/var/log/nginx/error.log里去看报错,说是80端口被占用了。我蒙蔽了,新买的服务器,哪有占用80呀,执行netstat -plnt | grep 80,结果让我震惊呀,apache2用了80,我我我,无话可说。经过0.1s的思考我觉得应该是最初安装php环境时某一个包里面把apache带了进来。这肯定不行,我需要把apache2关掉,用systemctl stop apache2,在执行systemctl disable apache2(机器重启也不会启动这个服务了)。然后重新执行systemctl start nginx,成功了。访问https://wp.tangxuyang.cn/test.php正常了!
通过编译源码安装
参考了PHP: Nginx 1.4.x on Unix systems – Manual
- 下载源码,wget https://www.php.net/distributions/php-8.3.10.tar.gz
- 解压缩,tar xzvf php-8.3.10.tar.gz
- cd php-8.3.10
- 安装编译时依赖项,apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev zlib1g-dev,这句是在README.md中看到的
- 执行./configure –enable-fpm –with-mysqli –with-zlib。其实开关很多,我也不知道要用哪些,–enable-fpm和with-mysqli是php文档中写的。–with-zlib是因为我编译安装后运行wordpress时包错,说gzinflate函数未定义,网上说需要用–with-zlib重新编译。
- 然后执行/usr/local/sbin/php-fpm
然后配置nginx,使用fastcgi_pass 127.0.0.1:9000;
以上两种方式我都用过,也都成功了,wordpress可以运行。一个是用京东云,一个是本地虚拟机,操作系统都是ubuntu22.04。
发表回复