介绍

LNMP 由以下四个部分构成:

  • Linux 是运行下面三个软件的操作系统。
  • Nginx 是一款面向性能设计的 HTTP 服务器,相较于 Apache、lighttpd 具有占有内存少,稳定性高等优势。
  • MySQL 是一款性能高、成本低、可靠性好的数据库。
  • PHP 是目前常用于编写网页的脚本语言。

本文将一步一步搭建 LNMP 服务。

Step 0:准备工作

你需要一台16.04及以上版本的 Ubuntu 主机,并执行以下命令确保系统及软件源为最新

sudo apt update
sudo apt upgrade

一旦完成升级,就可以开始进行 LNMP 环境的搭建了。

Step 1:安装Nginx

为了让来访者能看见我们的网页,我们要先安装 Nginx。

在此过程中我们安装的软件都将来自 Ubuntu 官方的软件源,这意味着我们可以使用apt软件包管理器进行安装。

安装 Nginx:

sudo apt install nginx

在 Ubuntu16.04 上,Nginx 安装完成后会自动运行。

安装完成后,在浏览器上访问你的IP,不出意外的话应该会显示类似这样的欢迎页面:

如果你看到了这个页面,说明 Nginx 已经安装好并能正常工作了。

Step 2:安装 MySQL

现在我们有了一个简易的 web 服务器,我们还需要一个数据库来保存我们的数据。

通过执行以下命令安装 MySQL:

sudo apt install mysql-server

安装过程中 MySQL 会要求你设置数据库 root 密码。

Step 3:安装 PHP

我们现在已经安装了 Nginx 来为我们提供 web 服务,并安装了 MySQL 来存储和管理我们的数据。但是我们还没有任何可以生成动态内容的东西。 我们使用 PHP 来实现这一目的。

由于 Nginx 不像其他 web 服务器那样包含原生的 PHP 处理,所以我们需要安装 php-fpm。我们会告诉 Nginx 将 PHP 请求传递给这个软件进行处理。

我们还将安装php-mysql,这将允许 PHP 与我们的数据库进行通信。安装将会拉取必要的 PHP 核心文件。

通过执行以下命令安装:

sudo apt install php-fpm php-mysql

现在 PHP 组件已经安装好了,为了安全考虑,我们需要改动一个小设置。

打开php-fpm的配置文件:

sudo nano /etc/php/7.0/fpm/php.ini

我们要找的参数是cgi.fix_pathinfo,这个参数设置默认是以分号(;)注释掉的,并且默认值为1,我们去掉注释,并把值改为0:cgi.fix_pathinfo=0,保存并退出。

这是一个非常不安全的设置,因为它告诉 PHP 如果找不到请求的 PHP 文件,就尝试执行它可以找到的最接近的文件。这将允许用户执行本不应该或不允许被执行的脚本。

现在,我们需要重启下 PHP 解析器:

sudo systemctl restart php7.0-fpm

这个改变就会即时生效。

Step 4:配置 Nginx 解析 PHP

现在我们所有需要的组件都已经安装好了,唯一还要更改的配置就是告诉 Nginx 使用我们的 PHP 解析器来处理动态内容。

打开默认的 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/default

不出意外的话,你的配置文件去掉注释后应该长这样:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

我们需要做一些改动。

  • 首先,我们需要将index.php添加为index指令的第一个值,以便默认请求index.php
  • 我们可以修改server_name指令来指向我们的服务器域名或 IP 地址。
  • 对于实际的PHP处理,我们只需要通过从每行前面删除井号(#)来取消注释处理 PHP 请求的配置。这个代码块位于location ~\.php$,包含fastcgi-php.conf的代码片和与php-fpm关联的套接字。
  • 我们还将使用相同的方法取消处理.htaccess文件的代码块。 Nginx不处理这些文件。 如果这些文件中的任何一个文件碰巧在文档根目录中,则不应将其提供给访问者。

做完改动后应该是这个样子:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name 服务器域名或IP;

    location / {
        try_files $uri $uri/ =404;
    }

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

    location ~ /\.ht {
        deny all;
    }
}

做完改动后就可以保存并关闭文件了。

通过以下命令测试配置文件是否正确:

sudo nginx -t

如果没有问题的话,应该返回如下结果:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果报错了的话,请在下一步前检查你的配置。

通过以下命令重启 Nginx 服务:

sudo systemctl reload nginx

Step 5:创建一个测试页面

此时你的 LNMP 环境就完全搭建好了,我们可以测试一下 Nginx 能否正确通过 PHP 解析器解析.php文件。

在网站根目录新建一个测试 PHP 文件:

sudo nano /var/www/html/info.php

填入以下代码:

<?php
phpinfo();

保存并关闭文件。

现在,你可以通过域名或 IP 来访问你的网页了:

http://服务器域名或IP/info.php

你应该能看见一个由 PHP 生成的服务器信息页面:

至此,LNMP环境搭建就已经完成了。

——参考:DigitalOcean: How To Install LEMP stack in Ubuntu 16.04

标签: linux

已有 2 条评论

  1. 一条命令集成LNMP: wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp

    想要你这个小挂件(纠结.emoji)

    1. syf syf

      一键安装的脚本之前也用过,确实很方便,但是后来我觉得有三个缺点:

      一是这种脚本一般都是从源码编译 php、mysql 等软件包,编译速度慢易出错,跟系统集成不好(例如有的没有注册服务没法用 service 等工具管理状态、软件包升级麻烦等等);
      二是安装的软件包位置不定,从 ubuntu 的 apt 源装的软件路径基本都是固定的、符合 linux 习惯,比如 nginx 网站资源在 /var/www 下,配置文件在 /etc/nginx 下,等等;
      三是之前貌似曝光过第三方一键安装脚本(不清楚是不是 lnmp 的),有植入挖矿程序的新闻。。。即使没有植入恶意程序,我也不太喜欢第三方程序来配置数据库这些重要的东西哈哈
      反正最后为了让所有东西都条理清楚些,能从官方软件源安装的我都从软件源安装,甚至包括 jdk 这些

      GoTop小挂件:https://github.com/NicoNicooooo/GoTop

添加新评论