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仍占主導地位。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLFR1SshTMxQDO4MzMzEzXzYTO5QDN08CX48CX0AjMxAjMvwFduVWboNWY0RXYvwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.jpg)
這個來自俄羅斯的Web伺服器(Nginx)俨然已經成為了該領域的一匹黑馬,目前每天新增的一百萬網站中有超過100個網站使用Nginx。Nginx獲得的這些市場佔有率來自于其他Web伺服器,其中大部分是從Apache轉過來的。
據統計,
流量高的網站更喜歡使用,前1000個頂級網站中,有23.9%的網站使用的是Nginx。這包括許多廣為人知的網站,如Wordpress.com、Tumblr.com、Sourceforge.net、Archive.org和Dropbox.com等。
在俄羅斯,Nginx擁有55.2%的市場佔有率,在一些國家,Nginx甚至成為了首選伺服器。但是隻有1%的美國政府網站使用Nginx。
來看看典型Nginx網站背後使用的技術。
這些網站主要使用 PHP 作為伺服器端語言,約占 94.7% 。此外,在使用Ruby或JavaScript(伺服器端)的網站中,Nginx也占據了比較高的份額。盡管Nginx也能在Windows作業系統中很好地運作,但約99.1%的Nginx網站運作在類UNIX作業系統上。
另外,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目錄
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
測試:
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
# 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
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的連接配接
測試與mysql的連接配接