天天看點

畢業設計之Web

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

配置步驟:

建立挂載點,挂載CD光牒

[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 -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$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

include fastcgi_params;

server_name bbs.bht.com;

root /usr/html/discuss;

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/html/discuz;

儲存退出

重新開機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成功

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824098cePr.png"></a>

圖4-63 調用PHP成功

測試mysql 與 PHP 的連通性

編輯/usr/html/index.php

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

if ($link)

echo "connected"; 若連接配接資料庫成功,則顯示“connected”,否則顯示“fail”

else

echo "fail";

如圖4-64所示,使用外部主機通路該web伺服器,顯示“connected”,說明php調用mysql成功

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824100CBMO.png"></a>

圖 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

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824101Yt2p.jpg"></a>

圖 4-65 安裝向導

進入下一步,開始安裝,但是需要修複有紅色“X”出的錯誤才可以繼續。如右圖 4-66和圖4-67。

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824103Yc74.jpg"></a>

圖4-66 開始安裝

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824105lysF.jpg"></a>

圖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所示。

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824106OWS0.jpg"></a>

圖4-68

選擇“全新安裝Discuz!X”。如圖4-69

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824107NXoK.jpg"></a>

圖4-69全新安裝Discuz

建立資料庫,并為資料庫和管理者設定密碼。如圖4-70

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824109QM20.jpg"></a>

圖4-70 資料庫設定

為mysql資料庫設定密碼,建立上步驟中的資料庫discuz

[root@localhost bin]# echo "PATH=$PATH:/usr/local/mysql/bin" &gt;&gt;/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&gt; create database discuz; 建立資料庫discuz

Query OK, 1 row affected (0.00 sec)

點選“下一步”,開始安裝。如圖4-71所示。

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824111wvOX.jpg"></a>

圖4-71 正在安裝discuz

安裝完成後,輸入域名則可以通路到discuz論壇。如圖4-72所示。

<a href="http://5645432.blog.51cto.com/attachment/201304/13/5635432_1365824112inJj.jpg"></a>

圖 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 <b>all</b> 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

<b>日志轉發</b>:

編輯系統日志配置檔案/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 ]

本文轉自 gjp0731 51CTO部落格,原文連結:http://blog.51cto.com/guojiping/1177442