简 · 单

在 Ubuntu 上搭建 LEMP 环境

本文翻译自《 How To Install Linux, nginx, MySQL, PHP (LEMP) stack on Ubuntu 12.04 》一文,并进行了一些修改。

什么是 LEMP

LEMP 是一组开源的 Web 服务器套件,包括 Linux、nginx、MySQL 和 PHP,而套件的名称是正是它们名称首字母的缩写。

注:本教程的操作步骤需要用户有服务器的 root 权限。

第一步 通过 apt-get 更新

在进行安装之前,应当先对服务器进行更新,自动修复一些漏洞以保护服务器。

执行如下命令进行更新:

1
sudo apt-get update

第二步 安装 MySQL

MySQL 是一个强大的数据库管理系统,用于组织和检索数据。虽然在被 Oracle 收购之后,由于某些已知或未知的原因人们渐渐的远离它,但它现在依然还是很流行的数据库系统。

安装 MySQL 需要在终端中输入如下命令:

1
sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

在安装过程中,MySQL 会要求设置 root 密码。

安装完成之后,使用如下命令来激活它:

1
sudo mysql_install_db

完成之后执行下面的命令来对 MySQL 进行设置:

1
sudo /usr/bin/mysql_secure_installation

执行之后会提示要求输入当前 root 密码。

1
2
Enter current password for root (enter for none):
OK, successfully used password, moving on...

输入之后会提示是否修改 root 密码,如果不更改则输入 N 进行下一步。

之后会是一些简单的问题,全部回车或输入 y 完成。之后 MySQL 会重新加载和应用新的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

MySQL 安装完成之后,那么就可以在之后安装 PHP。

第三步 安装 nginx

安装完 MySQL,就可以执行如下命令在服务器上继续安装 nginx。

1
sudo apt-get install nginx

安装完成之后 nginx 是没有启动的,需要输入如下指令让它启动:

1
sudo service nginx start

可以在浏览器中输入服务器的 IP 地址访问,确认 Web 服务器 nginx 是否安装完成并且启动。如果 nginx 的默认页面,就表示 nginx 正在运行。

第四步 安装 PHP

在终端输入这些命令即可安装 PHP-FPM:

1
sudo apt-get install php5-fpm

第五步 配置 PHP

输入下面的命令来打开 php.ini 文件:

1
sudo nano /etc/php5/fpm/php.ini

查找 cgi.fix_pathinfo=1,将值修改成 0

/etc/php5/fpm/php.ini
1
cgi.fix_pathinfo=0

默认值有一定的安全风险,所以将它设置为 0。详情可参考《nginx文件类型错误解析漏洞》一文。

修改之后,保存并退出。

接着需要对 php5-fpm 的配置做些修改,打开 www.conf 文件:

1
sudo nano /etc/php5/fpm/pool.d/www.conf

查找 listen = 127.0.0.1:9000,并修改为 /var/run/php5-fpm.sock

/etc/php5/fpm/pool.d/www.conf
1
listen = /var/run/php5-fpm.sock

保存并退出,之后重启 php-fpm

1
sudo service php5-fpm restart

第六步 配置 nginx

在终端打开默认的虚拟主机文件:

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

请参考原文件对下面的部分进行修改:

/etc/nginx/sites-available/default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server {
listen 80;

root /usr/share/nginx/www;
index index.php index.html index.htm;

server_name example.com;

location / {
try_files $uri $uri/ /index.html;
}

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}

上面的部分对原文件进行了如下修改:

  • index 行添加 index.php
  • server_name 更改为你的域名或 IP 地址。(替换配置文件中的 example.com
  • 修改 location ~ \.php$ { 内容为正确的配置。

保存并退出。

第七步 创建一个 PHP 信息页面

我们可以快速查看 PHP 配置的所有细节。

在这之前,首先需要创建一个新文件:

1
sudo nano /usr/share/nginx/www/info.php

添加下面的内容:

1
2
3
<?php
phpinfo();
?>

保存并退出,然后重启 nginx

1
sudo service nginx restart

之后访问 http://youripaddress/info.php 即可看到 nginx 和 php-fpm 配置的详细信息。

现在已经完成了在服务器上配置 LEMP。