天天看點

lnmp×××全過程

                                       Nginx的簡介        

        Nginx(發音同 engine x)是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,并在一個BSD-like 協定下發行。由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點是占有記憶體少,并發能力強,事實上nginx的并發能力确實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站使用者有:新浪、網易、 騰訊,另外知名的微網志Plurk也使用nginx。

學習nginx的必要性(http://news.netcraft.com/)

據w3techs網站調查結果顯示,

Nginx 的市場佔有率已經從今年年初的 5.9% 增長到了 10% ,成為增長最快的 Web 伺服器。

目前Apache仍占主導地位。

lnmp×××全過程

這個來自俄羅斯的Web伺服器(Nginx)俨然已經成為了該領域的一匹黑馬,目前每天新增的一百萬網站中有超過100個網站使用Nginx。Nginx獲得的這些市場佔有率來自于其他Web伺服器,其中大部分是從Apache轉過來的。

據統計,

流量高的網站更喜歡使用

,前1000個頂級網站中,有23.9%的網站使用的是Nginx。這包括許多廣為人知的網站,如Wordpress.com、Tumblr.com、Sourceforge.net、Archive.org和Dropbox.com等。

lnmp×××全過程

在俄羅斯,Nginx擁有55.2%的市場佔有率,在一些國家,Nginx甚至成為了首選伺服器。但是隻有1%的美國政府網站使用Nginx。

來看看典型Nginx網站背後使用的技術。

這些網站主要使用 PHP 作為伺服器端語言,約占 94.7%

此外,在使用Ruby或JavaScript(伺服器端)的網站中,Nginx也占據了比較高的份額。盡管Nginx也能在Windows作業系統中很好地運作,但約99.1%的Nginx網站運作在類UNIX作業系統上。

lnmp×××全過程

另外,80.6%的Nginx網站使用HTTP壓縮,而Apache和微軟IIS網站的這一資料分别為40.2%和28%。

一:在 internet 網上下載下傳各個源碼的包,在此我使用以下的源碼程式

作業系統的版本 red hat 企業版 5 2.6.18-164.el5

版本号:nginx-1.0.11.tar.gz官方網站 http://nginx.org/en/download.html

版本号:mysql-5.0.81.tar.gz 源碼包

官方網站 www.msql.com 社群版和伺服器版

版本号:php-5.3.7.tar 官方網站 www.php.net

二:必要的編譯環境

Development Libraries 開發的庫檔案

Development Tools  開發的工具

Legacy Software Development 傳統的開發工具

X Software Development 圖形化的軟體開發工具

GNOME Software Development gnome桌面下的軟體開發工具

KDE Software Development kde桌面下的軟體開發工具

說明:若沒有的話需要使用yum來進行安裝, yum groupinstall 包名稱

具體步驟

一:

1:安裝pcre-devel 的開發環境使得nginx支援位址重寫

[root@zzu ~]# cd /mnt/cdrom/Server/

[root@zzu Server]# rmp -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm

2:上傳各個源碼包到linux的/root目錄

lnmp×××全過程

3:安裝nginx 的源碼包

groupadd -r nginx 增加nginx的組

useradd -r -g nginx -s /bin/false -M nginx 增加nginx的使用者

[root@zzu ~]# tar -zxvf nginx-1.0.11.tar.gz -C /usr/local/src/ 解壓源碼到相應的檔案

[root@zzu src]# ll

total 12

drwxrwxrwx 39 7155 wheel 4096 Feb 7 23:54 mysql-5.0.81

drwxr-xr-x 9 1001 1001 4096 Feb 7 23:10 nginx-1.0.11

drwxr-xr-x 16 1000 1000 4096 Feb 8 02:29 php-5.3.7

[root@zzu src]# cd nginx-1.0.11/

[root@zzu 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@zzu nginx-1.0.11]# make 編譯

[root@zzu nginx-1.0.11]# make install  安裝

編寫Nginx 的控制腳本,實作對nginx的友善管理

#!/bin/bash

#

# nginx - this script starts and stops the nginx daemon

# chkconfig: - 85 15

# description: Nginx is an HTTP(S) server, HTTP(S) reverse \

# proxy and IMAP/POP3 proxy server

# processname: nginx

# config: /etc/nginx/nginx.conf

# config: /etc/sysconfig/nginx

# pidfile: /var/run/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -

`

options=`$nginx -V 2>&1 | grep 'configure arguments:'`

for opt in $options; do

if [ `echo $opt | grep '.*-temp-path'` ]; then

value=`echo $opt | cut -d "=" -f 2`

if [ ! -d "$value" ]; then

# echo "creating" $value

mkdir -p $value && chown -R $user $value

fi

done

}

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

make_dirs

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

[ $retval -eq 0 ] && rm -f $lockfile

restart() {

configtest || return $?

stop

sleep 1

start

reload() {

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

force_reload() {

restart

configtest() {

$nginx -t -c $NGINX_CONF_FILE

rh_status() {

status $prog

rh_status_q() {

rh_status >/dev/null 2>&1

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

restart|configtest)

reload)

rh_status_q || exit 7

force-reload)

force_reload

status)

rh_status

condrestart|try-restart)

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

為此腳本賦予執行權限:

[root@zzu nginx-1.0.11]# chmod +x /etc/rc.d/init.d/nginx

[root@zzu nginx-1.0.11]# chkconfig --add nginx

[root@zzu nginx-1.0.11]# chkconfig nginx on

[root@zzu nginx-1.0.11]# service nginx start

測試:

lnmp×××全過程

4:安裝mysql 的源碼包

#useradd –M –s /sbin/nologin mysql 添加mysql使用者,如果安裝系統時候已經裝過mysql會提示使用者已存在,建議在安裝前先解除安裝掉系統自帶的mysql,解除安裝完成後必須重新開機,否則新裝的mysql會無法啟動,提示錯誤資訊3306端口被占有

#tar zxvf mysql-5.0.81.tar.gz -C /usr/local/src

#cd /usr/local/src/mysql-5.0.81

#./configure --prefix=/usr/local/mysql

#make

#make install

安裝完成。

配置mysql

#cp support-files/my-medium.cnf /etc/my.cnf 複制主配置檔案

#/usr/local/mysql/bin/mysql_install_db --user=mysql 初始化

#chown -R root:mysql /usr/local/mysql

#chown -R mysql /usr/local/mysql/var

#vim /etc/ld.so.conf.d/mysqld.conf 對庫檔案進行連接配接

/usr/local/mysql/lib 增加該行

#ln -s /usr/local/mysql/include /usr/include/mysql 對頭檔案進行連接配接

#/usr/local/mysql/bin/mysqld_safe --user=mysql & 背景安全啟動 (如果顯示啟動并且卡住不動按回車)

#cp support-files/mysql.server /etc/init.d/mysqld 複制啟動腳本

#chmod +x /etc/init.d/mysqld 賦予腳本執行權限

#chkconfig --add mysqld 添加到系統自動啟動服務中

#chkconfig mysqld on 預設啟動mysql

#chkconfig --list mysqld 檢視mysql在什麼級别啟動或者關閉

# vim /etc/profile

lnmp×××全過程

# echo $PATH    設定系統全局的環境變量PATH值,友善使用mysql資料庫指令

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

#Service mysqld start

4:安裝php的源碼包

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

[root@zzu ~]# cd /usr/local/src/

[root@zzu src]# cd php-5.3.7/

[root@zzu php-5.3.7]#./configure \

--prefix=/usr/local/php \

--with-mysql=/usr/local/mysql \

--with-openssl \

--enable-fpm \

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--enable-mbstring \

--with-config-file-path=/etc/php \

--with-config-file-scan-dir=/etc/php \

--with-iconv=/usr/local

[root@zzu php-5.3.7]# make

[root@zzu php-5.3.7]# make install

為php提供配置檔案:

[root@zzu php-5.3.7]# cp php.ini-production /etc/php/php.ini

為php-fpm提供Sysv init腳本,并将其添加至服務清單:

[root@zzu php-5.3.7]# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm

[root@zzu php-5.3.7]# chkconfig --add php-fpm

[root@zzu php-5.3.7]# chkconfig php-fpm on

為php-fpm提供配置檔案:

[[email protected]]#cp/usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

編輯php-fpm的配置檔案:

[root@zzu php-5.3.7]# vim /usr/local/php/etc/php-fpm.conf

配置pm.的相關選項為你所需要的值

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers = 2

pm.max_spare_servers = 8

接下來就可以啟動php-fpm了:

[root@zzu php-5.3.7]# service php-fpm start

Starting php-fpm done

二、整合nginx和php

1、 編輯/etc/nginx/nginx.conf,啟用如下選項:

[root@zzu ~]# vim /etc/nginx/nginx.conf

lnmp×××全過程

2、編輯/etc/nginx/fastcgi_params,将其内容更改為如下内容:

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;

并在所支援的首頁面格式中添加php格式的首頁,類似如下:

location / {

            root   html;

            index  index.php index.html index.htm;

        }

而後重新載入nginx的配置檔案:

# service nginx reload

3、 在/usr/html建立index.php的測試頁面,測試php是否能正常工作:

<?php

phpinfo();

?>

測試與php的連接配接

lnmp×××全過程

測試與mysql的連接配接

lnmp×××全過程

繼續閱讀