在 Ubuntu 16.04 下配置 Nginx + PHP 7.0 + MySQL 环境

之前我用 lnmp.org 的一键安装包来配置 web 服务器,一直懒得去动,对 nginx 的配置也是一知半解。买了新的 vps 之后需要重新配置服务器环境,趁这个机会让我手动一个个安装它们并且熟悉熟悉吧。

部署vps时候我选了Ubuntu 16.04系统,所以以下操作均基于这个系统进行。

由于当时我是用root账户登录的,所以代码前面没有sudo,如果在Ubuntu桌面版安装的话记得每条命令之前加上sudo

更新软件列表并升级各种软件

apt-get update && apt-get -y upgrade

卸载Apache

apt-get remove apache2

安装nginx,PHP7.0和php7.0-fpm

直接用apt一键安装,一般都不需要下载源码编译

apt-get -y install nginx php7.0 php7.0-fpm

检查nginx和php7.0-fpm服务运行情况

systemctl status nginx
systemctl status php7.0-fpm

如无异常它应该会出现绿色的 active (running) 的提示,输入 q 可退出界面
正常情况两个服务都应该是 active (running)

安装MySQL

apt-get -y install mysql-server mysql-client

安装时候会出现紫色背景的界面设置MySQL的root账户的密码,建议设置一个复杂的密码

安装完MySQL之后最好运行一次安全配置向导,通过该向导可以检查root账户的密码、禁止MySQL的远程访问、移除匿名用户和测试的数据表等等
安全配置向导命令

mysql_secure_installation

按提示操作即可

安装 phpMyAdmin

通过 phpMyAdmin 可以方便地通过 web 操作 MySQL 数据库,这里同样能用 apt-get 来安装它

apt-get -y install phpmyadmin

安装过程中它会有两个选项问你的web服务器是 Apache 还是 libhttpd ,这里我们两个都不是,随便选一个。

安装好之后,phpMyAdmin 位于 /usr/share/phpmyadmin 目录里,我们配置 nginx 时候只要将一个网站根目录指向这里就可以访问 phpMyAdmin 了

上传你的网站

首先我们可以指定一个专门放网站的目录,方便操作,这里我用的是 /var/www ,先用mkdir命令把文件夹创建出来

mkdir /var/www

这里我配置两个站点,一个是我的博客(基于 Typecho ),一个是 phpMyAdmin 程序,两个都是基于 PHP 语言的程序

博客的话,首先在 /var/www 目录中创建一个文件夹存放博客的源码,这里我用的是 blog

mkdir /var/www/blog

然后把博客根目录的文件放到 blog 文件夹中,这里我用的是 Filezlia 直接上传

Filezlia 连接vps的时候是利用sftp登录的,一般来说登录的是 root 用户,所以在root用户下上传的文件的所有者是 root。而 nginx 默认是用 www-data 用户身份运行的,没有权限写入所有者是root的文件。所以如果不改变文件所有者的话,可能会出现博客程序无法在线修改主题的源码,无法上传文件等情况,因此我们需要将网站所有的文件的所有者更改为 www-data ,直接运行带 -R(Recursion)参数的 chown 命令:

chown -R www-data:www-data /var/www

以后每次上传网站文件之后,都可以运行一下这个命令,保证 php 对网站的文件都可写,避免出现各种奇奇怪怪的问题。这同时也体现了把网站目录放一个文件夹下的优势——一条简单的命令就能更改全部文件的所有者了。

网站文件放好之后,我们就可以开始修改nginx配置(其实并没有什么先后顺序),配好之后网站就可以访问啦!

修改 Nginx 配置

第二步安装nginx php7.0 php7.0-fpm的时候,一个基本的php服务器就已经搭建起来了,但我们还没有配置好,所以它暂时并不能按照我们的预期去运行。

首先我们理解一下 lnmp 架构的网站服务器处理请求的过程。一般来说,我们的预期是,当nginx收到的请求是指向一个静态文件的时候,nginx会将相应的文件返回给客户端,当nginx收到的请求指向php脚本时,nginx会将请求转向php7.0-fpm中处理,将处理结果返回给客户端。

对于 nginx 来说,所有的配置都在 /etc/nginx/nginx.conf 文件中完成,打开 nginx.conf 我们可以在文件底部发现

include /etc/nginx/sites-enabled/*;

也就是说,在默认配置下,nginx 会自动导入 /etc/nginx/sites-enabled/ 目录里面所有的文件中的配置,并且这些文件中的配置是包含在 nginx.conf 的 http{} 里面

一般我们会把各个站点的 server 配置放在 sites-enabled 目录里面,这里我直接在 /etc/nginx/sites-enabled/default 文件中每个域名添加一个 server 配置

vim /etc/nginx/sites-enabled/default

如果还不会用vim编辑器的话,也可以用sftp登录上服务器把文件下载下来用其它文本编辑器编辑后再上传,不过相比直接用vim在vps上编辑要麻烦不少

推荐阅读:你真的了解如何将 Nginx 配置为Web服务器吗

"#"后的都是注释,可以随便删

# Default server configuration
#
server {
        # 监听80端口,若请求的域名下面都没有定义或者是直接用ip访问的话将交给这个server处理
    listen 80 default_server; 
    listen [::]:80 default_server;

    server_name _;
    return 400;# 默认我禁止了ip直接访问,不是设置的域名访问的话会直接返回400
}

# 配置 phpMyAdmin 
server {
    listen 80;
    server_name phpmyadmin.izgq.net;
    root /usr/share/phpmyadmin; 
    index index.php; 

    location ~ \.php$ {
        include fastcgi.conf; 
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

# 博客的配置,基本大同小异
server {
        listen 80;
        server_name blog.izgq.net;
        root /var/www/blog;
        index index.php;

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                include fastcgi.conf;
                include fastcgi_params;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

修改完后别忘了reload一下nginx服务使配置生效

service nginx reload

于是网站就愉快地开始工作啦

如果使用过程中由于缺少某些php扩展例如gd库然后PHP报错的话,像这样

apt-get install php7.0-gd

加个后缀安装即可

已有 16 条评论
  1. Kay Kay

    沙发.现在的typecho在PHP7下运行良好吗?

  2. 一切正常,我除了数据库连接信息之外什么都没改,可能如果以前用的是mysql扩展连接MySQL的话要改成Pdo_Mysql适配器。
    Like this:

    
    
    $db = new Typecho_Db('Pdo_Mysql', 'typecho_');
    $db->addServer(array (
      'host' => 'localhost',
      'user' => 'user',
      'password' => 'pass',
      'charset' => 'utf8mb4',
      'port' => '3306',
      'database' => 'typecho',
    ), Typecho_Db::READ | Typecho_Db::WRITE);
    
    
  3. 刚刚昨天用lnmpa搭建了下...不过没有用PHP7.....

    请教下.你用的SSL是哪里申请的?我在startssl申请了一个..但是貌似只能是一个..

    放在主域名上后就不能在二级域名上用了..烦躁...

    1. 嗯.我估计也是这个.这几天也有在关注
      不过这个貌似还在公测?时间不长?能申请几个域名呢?

      话说qing今天你回复还真的是很快啊

    2. 没有啊现在已经正式启用了,想申请几个就几个,续期的话可以通过脚本来实现

      正好看到邮件所以我就回复啦~~

    3. 那太好了...感谢...果然上你的网站有惊喜.被STARTSSL气死了..

      那问下.如果变动地址,比如从原先的xxx.com/blog换成虚拟主机blog.xxx.com

      在typecho里要更换什么?

    4. 我记得就只有 设置->基本设置->站点地址 要改的

    5. 兄弟请教下,我在自己的服务器上申请,没有80只有443端口可以通过验证么?
      还是说必须通过80跳转验证才可以?悲剧了..我的VPS只不过拿来做SS的...

    6. 我记得是要的

    7. 是要的。我用STARTSSL申请了多个。。原来可以申请多个SSL来着,我以为只有一个呢

      已经在用了

      不过我还是觉得你可以研究下黑苹果。。。

      从最早的REDHAT,到SLACKWARE,GENTOO,LFS..后来还是回到了WIN。。现在主用MAC。

      说实在的。。个人有点视觉党。哈哈

      对了问下。。我的DOKUWIKI每次提交修改都会返回页面到HTTP。。这个也要改地址重写么?

    8. 不清楚,应该是程序设置的问题吧

  4. 过来学习学习了

  5. 苟富贵 苟富贵

    托运人

添加新评论