Ubuntu18.04 搭建Apache+Nginx+Mysql+PHP+PHP-FPM 详细教程及错误分析
apache
apt-get install apache2 //装apache 在浏览器中输入localhost可以看到apache页面即成功
PHP
apt-get install php //默认安装php最新版 如果要用php-fpm,那就安装新版的 因为旧版的php-fpm不好搞
// 如果安装旧版本的php,不用对应的php-fpm,可以看看下面的内容
php安装时,如果直接使用apt-get install php5会报错,因为最新版到了7.2,但是我只想安装php的低版本,于是搜索到一篇文章Ubuntu 安装多版本PHP ,避免出错,我先存了个快照,再来尝试这个教程,幸好教程用着很成功。(在此之前请确保为国内源,apt-get update,apt-get upgrade,避免不必要的报错)
使用php -v检查安装成功与否
MySQL
apt-get install mysql-server //明明很简单的一条指令,却因为阿里源莫名奇妙的报错,啊啊啊啊,换源就好了
service mysql start //MySQL开启
mysql -uroot -p //输入密码,进入数据库操作界面
php-fpm
由于库里没有php5-fpm,而且大概百度了一下也没有看到解决办法,不想花过多时间的在这上面的我又切换成了php7.0,装了php7.0后按照上方的多版本教程切换就可以了,然后apt-get install php7.0-fpm,装上php7-fpm
nginx
接下来安装nginx,nginx和apache二者的默认端口都是80,先将apache关掉service apache2 stop
/etc/init.d/nginx start //开启nginx服务
/etc/init.d/nginx stop //停止nginx服务
/etc/init.d/nginx reload //重新加载配置文件
此外,二者的默认目录也是相同的,个人并不介意,所以配置文件中的默认目录、端口都没有修改。
关于nginx,如果不了解的可以看这个文章从0开始nginx详解,B站也有nginx课程,配置文件就不做过多解释了
apt-get install nginx //安装nginx
cp /etc/nginx/sites-enabled/default /etc/nginx/default.bak //做个备份,以防万一
vim /etc/nginx/sites-enabled/default //编辑配置文件
//编辑内容如下,去掉文件中的部分注释即可
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
/etc/init.d/nginx reload //编辑完成后,reload一下
以上是最基本的配置内容,更加详细的配置信息,可以看看这篇文章,其中对于nginx的灵活配置可以作为一个学习参考,具体怎么做、为什么这么做还需要自己去学习。
测试
cd /var/www/html //这是nginx和apache默认的主页路径
vim hello.php //新建一个php文件,写点测试信息,比如phpinfo,浏览器访问成功即证明环境搭建顺利
以上操作,是我自己实践可行的,如果你在操作过程中碰到什么问题,可以留言给我,一起交流一下。
配置个文件花了大半天,以下是配置时的详细心路历程,希望能给一些人提供帮助,可略过不看
由于没有了解过nginx,盲目的认为他与apache一样,安装很简单,随便在网上找教程安装nginx,但是总是在出问题(启动错误、启动正常PHP无法解析直接下载)。于是又花了大半天的时间,寻找错误的解决办法(百度具体问题、百度错误原因、查看官方文档、换搜索引擎查),但全都没有成功,我只知道是配置文件出了问题。此时,才想到百度nginx是什么,然后发现nginx竟然还有教程,在B站找到了nginx的教学视频,了解了下nginx的配置文件。
仔细看了nginx目录下有哪些文件,才发现nginx.conf并不如同网上所说那样,在某个文件夹中。打开nginx.conf,可以看到http块里,也并不是所有教程里讲的那样有一个server块,而是包含了sites-enable下的default文件,打开default文件,可以看到server块。
这一次,我没有习惯性地忽略掉那些注释英文,之前没看教程,注释似懂非懂的,看了教程后,仔细看注释就可以知道大概怎么做了。首先备份一份default文件到其他地方,一定不能放在sites-enable下(因为nginx.conf包含了她下面的所有文件)。接着去掉default文件的一些注释。
上面的fastcgi_pass,网上搜到的教程是要写两个,但是这样会报错
根据报错提示,输入jaurnalctl -xe,可以看到详细的错误信息,大意:57行重复
百度一下这个报错,果然是因为有两个fastcgi,需要注释一个,由于需要php-fpm,所以注释掉上面的,果然解决了php无法解析的问题
现在为止,环境就算搭好了
测试一下(提前创建好了一个只有id的数据表):
//测试代码 mysql.php
$server_name = 'localhost';
$user = 'root';
$passwd = 'passwd';
$database = 'test';//提前创建了一个数据库test,里面有张表t,表里只有一个字段id
$conn = mysqli_connect($server_name,$user,$passwd,$database);
if(! $conn){
die("wrong!".mysqli_error($conn));
}
echo 'successful!';
$sql = 'INSERT INTO t (id) VALUES (10)';
$result = mysqli_query($conn,$sql);
if(! $result){
echo 1;
die('wrong'.mysqli_error($conn));
}
echo 'successful * 2';
mysqli_close($conn);
?>
另外,要擅用/var/log/nginx/error.log,查看错误日志。