LAMP(Linux + Apache + MySQL + PHP)长期以来一直是搭建网站的经济实用之选。但随着 Igor Sysoev 开发的 Nginx 服务器渐渐火热起来,LNMP(Linux + Nginx + MySQL + PHP)成为了一个新的选择。

Nginx 服务器比 Apache 服务器更小,运行时消耗资源也少一些,并发性能更高。另外,其配置文件也比 Apache 更简明易懂。不过,目前它的中文文档还不太完整,也不够新,比起 Apache 的文档来说还有些简陋,所以对于像我这种英文不熟的人来说读起来未免困难。不过,如果熟悉 Apache,上手应该也不会很困难。

在本文中,我将以亲身实践的经历,讲一讲从安装 CentOS 6 开始的 LNMP 服务器配置全过程。

VPS 用户可以跳过系统安装和初始配置步骤

安装 CentOS 6

为了节省资源,我选择了 CentOS 6 Minimal 64 位版,刻光盘或通过 U 盘安装。

下载 CentOS选择镜像站

具体安装过程不再详述,只需注意安装语言选择英语,时区选择“Asia/Chongqing”或“Asia/Shanghai”,并注意为 root 设置强密码即可。另外,在虚拟机上安装时,最好将网络连接设置为桥接方式(Bridged Adapter)。

连接网络

刚安装好的 CentOS 还没有正确连接到网络,我们需要进行设置。一般来说,在服务器上都不使用 DHCP 服务,故以下为例:

IP:       192.168.1.253
Netmask:  255.255.255.0
Gateway:  192.168.1.1
DNS:      61.139.2.69 218.6.200.139
Hostname: www.mysite.com

设置 IP 地址等,编辑 /etc/sysconfig/network-scripts/ifcfg-eth0:

DEVICE="eth0"
HWADDR="08:00:27:E8:5E:86"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=none
IPADDR=192.168.1.253
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

这里需要注意的有:NM_CONTROLLED 设为 no 以拒绝其他网管软件的管理,ONBOOT 设为 yes 以开机启动,BOOTPROTO 设为 none 以禁用 DHCP。

设置 DNS 服务器,编辑 /etc/resolv.conf:

nameserver 61.139.2.69
nameserver 218.6.200.139

设置主机名称,编辑 /etc/sysconfig/network,:

NETWORKING=yes
HOSTNAME=www.mysite.com

编辑 /etc/hosts,在此文件下方添加一行:

192.168.1.253    www.mysite.com

最后,执行命令 service network restart 重启网络连接。

另外,新安装的 CentOS 默认防火墙没有开放 80 端口。请编辑 /etc/sysconfig/iptables,加入以下行,然后执行命令 service iptables restart 重启防火墙:

-A INPUT -p tcp --dport 80 -j ACCEPT

安装必备软件包和设置自动校时

执行以下命令安装必备软件包:

yum -y install wget vim sudo screen crontabs ntpdate

设置每早 6:00 对时,编辑计划任务文件 /etc/crontab,添加一行,:

0 6 * * * root /usr/sbin/ntpdate time.nist.gov > /dev/null

**Update(11/06/2012): **在命令的最后加上 > /dev/null 可以隐藏命令输出的信息(但不包括错误信息),这可以让你不会在每次对时后都收到一封邮件,而一旦出现错误时你仍可知晓。如果添加 &> /dev/null 则会隐藏所有输出,包括错误信息。

最后,执行命令 service crond start 启动计划任务。

配置 SSH

要进行远程管理,需要配置 SSH。为了提高安全性,我们需要更改 SSH 服务的默认端口,并另行建立新的账户,并禁止 root 远程登录。

如果使用的是 VPS 或独立主机,只能通过 SSH 远程操作时,进行此步时一定要多加小心。更改端口或禁用 root 时,一定要先测试以新的端口和账户能否顺利登录,才能去掉原来的默认端口并禁用 root。这能避免意外情况导致无法再登录服务器。

首先,建立一个新用户,并设置密码:

useradd -G wheel mysiteadmin
passwd mysiteadmin

然后,授予 sudo 权限,用 visudo 命令编辑 /etc/sudoers,添加 mysiteadmin 一行:

## Allow root to run any commands anywhere
root           ALL=(ALL)     ALL
mysiteadmin    ALL=(ALL)     NOPASSWD:ALL

CentOS 6 Minimal 默认已经安装了 SSH,如果没有安装,请执行 yum install openssh-server。

编辑 SSH 配置文件 /etc/ssh/sshd_config,将原来的“# Port 22”改为以下两行,将 4671 改为你想要的端口号,注意不要与现有软件使用的端口相冲突:

Port 22
Port 4671

然后在此文件中搜索“PermitRootLogin yes”,改为“PermitRootLogin no”。

接着在防火墙上开放新的 SSH 端口,编辑 /etc/sysconfig/iptables,加入如下一行,然后执行命令 service iptables restart 重启防火墙:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 4671 -j ACCEPT

最后用新的账户和端口登录服务器,测试无问题后,去掉 SSH 配置文件和 iptables 规则中的 22 端口。

至此,系统的安装和初始配置已告完成。可以开始安装 Nginx + MySQL + PHP 了。

安装 LNMP

首先感谢军哥(Licess)制作的原版 LNMP 一键安装包。

你可以根据自己的喜好,选择我修改过的定制版 LNMP 一键安装包(lnmp0.7-james-20121206.7z),也可以选择 LNMP.org 提供的原版安装包。

下载 LNMP 一键安装包定制版下载 LNMP.org 原版

我修改过的定制版本与原版有以下不同:

  1. 更新 Nginx 1.2.4,原版为 0.8
  2. 更新 MySQL 5.5.27,原版为 5.1
  3. 更新 PHP 5.4.9,原版为 5.2
  4. 由于 PHP 5.4 已包含 PHP-FPM 及 PDO-MySQL,故去掉原版中的安装步骤
  5. 优化 Nginx 配置文件,便于设置域名是否使用 www 前缀、URL Rewrite、上传目录安全防护等

安装过程比较漫长,故安装前请用 screen -S lnmp 创建新会话,一旦出现网络不稳定导致 SSH 断线等情况,只需用 screen -r lnmp 命令返回会话即可,不会造成安装过程中断。安装完成后,用 exit 命令退出会话。如果系统没有安装 screen,请执行 yum install screen 命令。

将下载到的 LNMP 安装包通过 WinSCP、FTP 等直接上传到服务器的 /home 目录下。如果使用原版安装包,则可以直接通过 wget 命令直接下载到服务器上。下载好后,便可以开始解压安装了:

7z e lnmp0.7-james-20121206.7z
cd lnmp0.7-james
./sh centos.sh | tee lnmp.log (Debian、Ubuntu 系统则相应选择 debian.sh 和 ubuntu.sh)

然后,根据提示输入域名和 MySQL root 密码,提示“Press any key to start…”后按任意键开始安装。

根据服务器配置及网络连接速度不同,安装过程可能会持续 30-60 分钟不等。

安装完成后,可以试试能否访问。用 /root/lnmp {start stop reload restart kill status} 即可控制 LNMP 的运行。

要安装 ionCube、eAccelerator、Pure-FTPd、VSFTPd 等,可以参见 LNMP.org 的安装说明

延伸阅读:
详细了解 Linux 的网络连接设置:鸟哥的 Linux 私房菜 – 连上 Internet
详细了解 Linux 计划任务:鸟哥的 Linux 私房菜 – 例行性工作排程 (crontab)
设置更安全的 SSH 登录:设置 SSH 通过密钥登录
了解 PHP 上传相关设置:PHP 上传文件故障排除
了解为 LNMP 配置添加版本控制:用 Subversion 管理网站程序