LNMP:(linux + nginx + mysql + php)linux系统下的Nginx+Mysql+PHP网站服务器架构

Linux:是目前最流行的免费的操作系统,具有较高的稳定性和安全性

Nginx:是一个高性能的http和反向代理服务器

Mysql:是一个小型关系型数据库管理系统

PHP:是一种在服务器端执行的嵌入HTML文档的脚本语言

这四种软件均为免费开源软件,组合在一起,成为一个免费、高效、扩展性强的网站服务系统。

服务器环境:

操作系统:

Red Hat Enterprise Linux Server 5.4 内核版本: 2.6.18-164.el5

需要的软件:

Nginx-1.0.11.tar.gz

libevent-2.0.16-stable.tar.gz

mysql-5.5.15-linux2.6-i686.tar.gz

php-5.3.7.tar.bz2

pcre-6.6-2.el5_1.7.i386.rpm

pcre-devel-6.6-2.el5_1.7.i386.rpm

网络参数:

IP: 192.168.1.182/28 netmask:255.255.255.240 Gateway:192.168.1.190

配置步骤:

新建挂载点,挂载光盘

[root@localhost ~]# mkdir /mnt/cdrom/

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/

由于安装软件过程中需要解决软件间的依赖关系,所以需要配置yum工具

[root@localhost ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-server] 仓库名称

name=Red Hat Enterprise Linux server 仓库的描述

baseurl=file:///mnt/cdrom/Server 仓库对应的目录

enabled=1 启用该仓库

gpgcheck=1 进行签名检测

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release 密钥文件的位置

安装pcre 和pcre-devel 。pcre提供地址重写功能,pcre-devel提供开发所需的头文件和库文件。pcre系统已经默认安装,还需要安装pcre-devel 文件

[root@localhost ~]# yum install pcre-devel

安装pcre-devel后,重新读取库文件

[root@localhost ~]# ldconfig -v

libevent为事件触发库,可提高web服务器性能,系统中的libevent版本过低,为了使用新版本的libevent ,下面源码安装libevent 2.0

拆解libevent-2.0.16-stable.tar.gz 包到/usr/local/src/ 下

[root@localhost ~]# tar -zxvf libevent-2.0.16-stable.tar.gz -C /usr/local/src/

切换至libevent 的解压目录 /usr/local/src/libevent-2.0.16-stable/下,检测预编译环境

[root@localhost ~]# cd /usr/local/src/libevent-2.0.16-stable/

[root@localhost libevent-2.0.16-stable]# ./configure

编译libevent ,生成4类文件:头文件、库文件、可执行文件、说明文件

[root@localhost libevent-2.0.16-stable]# make

安装libevent,将上述4类文件存放到相应的位置

[root@localhost libevent-2.0.16-stable]# make install

libevent的默认安装路径为/usr/local,切换到/usr/local,下面有lib文件。但是这个lib文件位置为/usr/local/lib ,不是标准路径:/lib 或/usr/lib 。所以要在/etc/ld.so.conf.d 下新建 libevent.conf 文件(在/etc/ld.so.conf有说明),指明libevent库文件的位置。由于include位置为/usr/local/include,是标准路径,所以不用指明位置。

[root@localhost ~]# vim /etc/ld.so.conf.d/libevent.conf

/usr/local/lib ##libevent的库文件位置

重新加载库文件,查看libevent的库文件是否加载成功

[root@localhost ~]# ldconfig -v

[root@localhost ~]# ldconfig -pv |grep libevent

libevent_pthreads-2.0.so.5 (libc6) => /usr/local/lib/libevent_pthreads-2.0.so.5

libevent_openssl-2.0.so.5 (libc6) => /usr/local/lib/libevent_openssl-2.0.so.5

libevent_extra-2.0.so.5 (libc6) => /usr/local/lib/libevent_extra-2.0.so.5

libevent_core-2.0.so.5 (libc6) => /usr/local/lib/libevent_core-2.0.so.5

libevent-2.0.so.5 (libc6) => /usr/local/lib/libevent-2.0.so.5

libevent-1.1a.so.1 (libc6) => /usr/lib/libevent-1.1a.so.1

Nginx的搭建

拆解nginx压缩包

[root@localhost ~]# tar -zxvf nginx-1.0.11.tar.gz -C /usr/local/src/

创建系统组 nginx

[root@localhost ~]# groupadd -r nginx

创建系统帐号uginx ,使该帐号属于nginx组

[root@localhost ~]# useradd -r -g nginx -s /bin/false -M nginx

切换到/usr/local/src/ nginx-1.0.11 下,检测预编译环境

[root@localhost ~]# cd /usr/local/src/nginx-1.0.11/

./configure \

--prefix=/usr \

--sbin-path=/usr/sbin/nginx \

--conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--user=nginx \

--group=nginx \

--with-http_ssl_module \

--with-http_flv_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/tmp/nginx/client/ \

--http-proxy-temp-path=/var/tmp/nginx/proxy/ \

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

--with-pcre

编译并安装

[root@localhost nginx-1.0.11]# make && make install

创建目录/var/tmp/nginx,否则nginx将无法启动。启动Nginx

[root@localhost nginx-1.0.11]# mkdir /var/tmp/nginx

[root@localhost nginx-1.0.11]# nginx

查看nginx是否启动成功

[root@localhost nginx-1.0.11]# netstat -tupln |grep 80 查看端口80 是否启动

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5685/nginx: master

mysql的搭建

此mysql软件包为绿色软件,不是源代码,故拆解位置在/usr/local/mysql下,若是源代码则应拆解在/usr/local/src下

[root@localhost ~]# tar -zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local/

切换到/usr//local/mysql-5.5.15-linux2.6-i686/,查看INSTALL-BINARY文件内容

[root@localhost ~]# cd /usr//local/mysql-5.5.15-linux2.6-i686/

[root@localhost mysql-5.5.15-linux2.6-i686]# vim INSTALL-BINARY

按照里面的步骤来详细配置mysql

groupadd mysql 创建组mysql

useradd -r -g mysql mysql 创建系统帐号mysql,加入mysql组

cd /usr/local 进入/usr/local

ln -s mysql-5.5.15-linux2.6-i686 mysql 为该目录设置软连接,方便使用

cd mysql

chown -R mysql . 更改所有文件的所有者为mysql

chgrp -R mysql . 更改所有文件的所属组为mysql

scripts/mysql_install_db --user=mysql 以mysql的身份执行scripts/mysql_install_db脚本

chown -R root . 再将所有文件的所有者改为root

chown -R mysql data 其中要将data目录及其子文件的所有者改为mysql

cp support-files/my-medium.cnf /etc/my.cnf

bin/mysqld_safe --user=mysql & 启动mysql 数据库,3306 端口

如果想使用service mysqld restart ,来启动数据库,则需要在/etc/init.d下要有名为mysqld 的脚本,执行下面指令,创建/etc/init.d/mysqld脚本

cp support-files/mysql.server /etc/init.d/mysqld

[root@localhost mysql]# service mysqld start

Starting MySQL.. [ OK ]

[root@localhost mysql]# netstat -tupln |grep 3306

tcp 0 0 :::3306 :::* LISTEN 6324/mysqld

设置mysqld开机自启动

[root@localhost mysql]# chkconfig mysqld on

[root@localhost mysql]# chkconfig --list |grep mysql

mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

系统启动时,自动调用库文件,位置有/lib /usr/lib ,但是现在mysql的数据库文件位置在/usr/local/mysql/lib,编辑/etc/ld.so.conf文件,该文件指明包含ld.so.conf.d/下的所有.conf文件。在/etc/ld.so.conf.d/ 下新建mysql.conf文件,指明mysqld 的lib 文件的位置

[root@localhost mysql]# vim /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib 指明mysql的库文件位置

重新加载mysql的库文件,并查看是否加载成功

[root@localhost mysql]# ldconfig -v

[root@localhost mysql]# ldconfig -pv |grep mysql

libtcmalloc_minimal.so.0 (libc6) => /usr/local/mysql/lib/libtcmalloc_minimal.so.0

libmysqlclient.so.18 (libc6) => /usr/local/mysql/lib/libmysqlclient.so.18

libmysqlclient.so (libc6) => /usr/local/mysql/lib/libmysqlclient.so

系统的头文件位置有:/usr/include/ /usr/local/include/ ,但是mysql的头文件位置在/usr/local/mysql/include,为非标准路径,系统无法调用,应该指明位置,使系统能够找到该位置。可在 /usr/include/ 或者 /usr/local/include/下 做符号连接

[root@localhost mysql]# cd /usr/include/

[root@localhost include]# ln -s /usr/local/mysql/include mysql

PHP配置

拆解php压缩包

[root@localhost ~]# tar -jxvf php-5.3.7.tar.bz2 -C /usr/local/src/

切换到 /usr/local/src/php-5.3.7/ 检测预编译环境

[root@localhost ~]# cd /usr/local/src/php-5.3.7/

[root@localhost php-5.3.7]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-fpm --with-openssl --with-libevent-dir=/usr/local --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-iconv-dir=/usr/local

编译 ,产生四类文件:头文件、库文件、可执行文件、说明文件,并将四类文件安装到相应的位置

[root@localhost php-5.3.7]# make

[root@localhost php-5.3.7]# make install

拷贝配置文件

[root@localhost ~]# cp /usr/local/src/php-5.3.7/php.ini-production /usr/local/php/etc/php.ini

切换至/usr/local/php下,创建php-fpm.conf文件

[root@localhost ~]# cd /usr/local/php

[root@localhost php]# cp etc/php-fpm.conf.default etc/php-fpm.conf

编辑php-fpm.conf,将以下几行的注释去掉,保存退出

error_log = log/php-fpm.log

pm.start_servers = 20

pm.max_requests = 500

pm.max_spare_servers = 35

pm.min_spare_servers = 5

pm.max_children = 50

启动fastcgi,并将fastcgi 设置为开机自启动

[root@localhost php]# /usr/local/php/sbin/php-fpm &

[1] 11526

[root@localhost php]# echo "/usr/local/php/sbin/php-fpm & ">> /etc/rc.local

修改 /etc/nginx/fastcgi.conf,修改一行数据

[root@localhost php]# vim /etc/nginx/fastcgi.conf

fastcgi_param SERVER_SOFTWARE nginxion;

切换到/etc/nginx, 保证两个文件相同:fastcgi.conf 和 fastcgi_params

[root@localhost nginx]# cd /etc/nginx

[root@localhost nginx]# cat fastcgi.conf > fastcgi_params

编辑nginx的配置文件 /etc/nginx/nginx.conf

[root@localhost nginx]# vim /etc/nginx/nginx.conf

server {

listen 192.168.1.182:80;

server_name www.bht.com;

access_log /var/log/access.log;

error_log /var/log/error.log;

location / {

root html;

index index.php index.html index.htm;

}

“location / ”表示可以读取/usr/html目录及其子目录中的index.php index.html index.htm 文件

将以下这几行前的注释去掉

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

include fastcgi_params;

}

server {

listen 192.168.1.182:80;

server_name bbs.bht.com;

access_log /var/log/access.log;

error_log /var/log/error.log;

location / {

root /usr/html/discuss;

index index.php index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

location ~ \.php$ {

root /usr/html/discuz;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

include fastcgi_params;

}

}

保存退出

重启nginx服务

[root@localhost html]# pkill -9 nginx 关闭nginx

[root@localhost html]# nginx

切换至/usr/html 产生php网页

[root@localhost html]# cd /usr/html

[root@localhost html]# vim index.php

<?php

phpinfo();

?>

如下图4-63所示,使用外部主机访问该web服务器,可以访问到php测试页面,说明nginx调用php成功

clip_p_w_picpath002

图4-63 调用PHP成功

测试mysql 与 PHP 的连通性

编辑/usr/html/index.php

[root@localhost html]# vim index.php

<?php

$link=mysql_connect('127.0.0.1','root','');

if ($link)

echo "connected"; 若连接数据库成功,则显示“connected”,否则显示“fail”

else

echo "fail";

?>

如图4-64所示,使用外部主机访问该web服务器,显示“connected”,说明php调用mysql成功

clip_p_w_picpath003

图 4-64 PHP调用Mysql数据库成功

搭建discuz论坛

上传Discuz_X2.5_SC_GBK.zip,解压该文件

[root@localhost ~]# unzip Discuz_X2.5_SC_GBK.zip

解压后产生两个文件夹:upload和 utility,将upload移动到/usr/html下,改名为discuss。

[root@localhost ~]# mv upload /usr/html/discuz

此时使用域名访问该discuss站点,出现安装向导,点击“我同意”。如图4-65

clip_p_w_picpath005

图 4-65 安装向导

进入下一步,开始安装,但是需要修复有红色“X”出的错误才可以继续。如右图 4-66和图4-67。

clip_p_w_picpath007

图4-66 开始安装

clip_p_w_picpath009

图4-67 需要修复标记的错误

切换至/usr/html/discuz目录下,安装要求,创建不存在的目录,修改文件的权限。

[root@localhost discuss]# cp -p config/config_global_default.php config/config_global.php

[root@localhost discuss]# cp -p config/config_ucenter_default.php config/config_ucenter.php

[root@localhost discuss]# chmod o+w config

[root@localhost discuss]# chmod -R o+w data/

[root@localhost discuss]# chmod o+w uc_client/

[root@localhost discuss]# chmod o+w uc_client/data/cache/

[root@localhost discuss]# chmod -R o+w uc_server

[root@localhost discuss]# chmod o+w config/config_global.php

[root@localhost discuss]# chmod o+w config/config_ucenter.php

修改上述错误后刷新网页,将不会出现错误提示,点击“下一步”开始安装。如图4-68所示。

clip_p_w_picpath011

图4-68

选择“全新安装Discuz!X”。如图4-69

clip_p_w_picpath013

图4-69全新安装Discuz

创建数据库,并为数据库和管理员设置密码。如图4-70

clip_p_w_picpath015

图4-70 数据库设置

为mysql数据库设置密码,新建上步骤中的数据库discuz

[root@localhost bin]# echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile 添加环境变量

[root@localhost bin]# source /etc/profile

[root@localhost bin]# mysqladmin -u root -p password "123" 设置密码

[root@localhost bin]# mysql -u root -p 登录mysql数据库

mysql> create database discuz; 创建数据库discuz

Query OK, 1 row affected (0.00 sec)

点击“下一步”,开始安装。如图4-71所示。

clip_p_w_picpath017

图4-71 正在安装discuz

安装完成后,输入域名则可以访问到discuz论坛。如图4-72所示。

clip_p_w_picpath019

图 4-72 安装成功

SNMP代理配置:

安装net-snmp软件,使该主机成为agent。由于安装需要依赖lm_sensors软件,所以使用yum工具解决依赖关系

[root@localhost ~]# yum install net-snmp -y

编辑配置文件/etc/snmp/snmpd.conf 。将第62 行的read字段对应的值改为all,表示可以访问所有的mib库;第85行定义“all”对应的mib是哪些;并设置配置沟通密码(团体名);设置陷阱,将陷阱信息发送至NMS(网络管理工作站)

[root@localhost ~]# vim /etc/snmp/snmpd.conf

62 access notConfigGroup "" any noauth exact all none none

85 view all included .1 80

50 rocommunity public

51 rwcommunity private

79 com2sec mynetwork 192.168.1.193/28 public

保存退出

启动snmp服务,并将snmp服务设置为开机自启动

[root@localhost ~]# service snmpd start 启动服务

Starting snmpd: [ OK ]

[root@localhost ~]# chkconfig snmpd on

查看snmp服务的端口号,有两个端口号:199和169

[root@localhost ~]# netstat -tupln |grep snmp

tcp 0 0 127.0.0.1:199 0.0.0.0:* LISTEN 12052/snmpd

udp 0 0 0.0.0.0:161 0.0.0.0:* 12052/snmpd

日志转发

编辑系统日志配置文件/etc/syslog.conf,将需要转发的日志发送到指定的日志服务器上。咋日志类型后面加 @日志服务器的地址 即可将日志发送到指定的日志服务器上。

[root@mail ~]# vim /etc/syslog.conf

*.info;mail.none;authpriv.none;cron.none @192.168.1.194

重启日志服务

[root@mail ~]# service syslog restart

Shutting down kernel logger: [ OK ]

Shutting down system logger: [ OK ]

Starting system logger: [ OK ]

Starting kernel logger: [ OK ]