Nginx網站服務php
Nginx是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服html
nginx相對於apache的優勢:前端
輕量級,比apache 佔用更少的內存及資源nginx
抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能web
Nginx 是一個安裝很是的簡單 , 配置文件很是簡潔(支持perl語法), Bugs 很是少的服務器: 正則表達式
Nginx 配置簡潔, Apache 複雜shell
Nginx 靜態處理性能比 Apache 高apache
nginx處理靜態文件好,耗費內存少vim
nginx的負載能力比apache高不少。後端
Nginx優於apache的主要兩點:1.Nginx自己就是一個反向代理服務器 2.Nginx支持7層負載均衡;Nginx可能會
apache支持更高的併發
nginx,配置文件簡潔,正則配置讓不少事情變得簡單運行效率高,佔用資源少,代理功能強大,很適合作前端響應服務器,Nginx併發性比較好,CPU內存佔用低
apache 相對於nginx 的優勢:
rewrite ,比nginx 的rewrite 強大
Apache在處理動態有優點;
通常來講,須要性能的web 服務,用nginx 。若是不須要性能只求穩定,那就apache
做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,體現更高的效率,在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品:
Apache 對 PHP 支持比較簡單,Nginx 須要配合其餘後端用
Apache 的組件比 Nginx 多
apache是同步多進程模型,一個鏈接對應一個進程;nginx是異步的,多個鏈接能夠對應一個進程
nginx處理動態請求的能力較弱,通常動態請求要apache去作,nginx只適合靜態和反向。
nginx沒有本身提供處理PHP的功能,須要經過第三方的模塊來提供對PHP進行FastCGI方式的集成。
Nginx(發音enginex)專爲性能優化而開發,其最知名的優勢是它的穩定性和低系統資源消耗,以及對HTTP併發鏈接的高處理能力(單臺物理服務器可支持30000~50000個併發請求)。正由於如此,大量提供社交網站、新聞資訊、電子商務以及虛擬主機等服務的企業紛紛選擇Ngnix來提供WEB服務。
2、Nginx的安裝及運行控制:
目前Nginx的最新穩定版本爲1.0.8,開發版本爲1.1.6,其安裝文件能夠從官方網站http://www.nginx.org下載,下面以穩定版爲例,介紹nginx的安裝和運行控制。
編譯安裝Nginx
1)安裝支持軟件:
Nginx的配置及運行須要pcre、zlib等軟件包的支持,所以應預先安裝這些軟件的開發包(devel),以便提供相應的庫和頭文件,確保Nginx的安裝順利完成。
[root@nginx ~]# yum -y install pcre-devel zlib-devel
2)建立運行用戶、組:
Nginx服務程序默認以nobody身份運行,建議爲其建立專門的用戶帳號,以便更準確地控制其訪問權限,增長靈活性、下降安全風險。
如:建立一個名爲nginx的用戶,不創建宿主目錄,也禁止登陸到shell環境。
[root@nginx ~]# useradd -M -s /sbin/nologin nginx
3)編譯安裝nginx:
釋放nginx源碼包
[root@nginx ~]# tar zfxv nginx-1.0.8.tar.gz
編譯前配置:
[root@nginx ~]# cd nginx-1.0.8
[root@nginx nginx-1.0.8]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
注:配置前能夠參考:./configure--help給出說明
編譯並安裝:
至此Nginx安裝完成,爲了使Nginx服務器的運行更加方便,能夠爲主程序nginx建立連接文件,以便管理員直接執行nginx命令就能夠調用Nginx的主程序。
[root@nginx nginx-1.0.8]# ln -s /usr/local/nginx/sbin/nginx/usr/local/sbin/
[root@nginx nginx-1.0.8]# ls -l /usr/local/sbin/nginx
Nginx的運行控制:
與apache的主程序httpd相似,Nginx的主程序也提供了」-t」選項用來對配置文件進行檢查,以便找出不當或錯誤的配置。配置文件nginx.conf默認位於安裝目錄下的conf/子目錄中。若要檢查位於其餘位置的配置文件,可以使用」-c」選項來指定路徑。
[root@nginx ~]# nginx -t
啓動、中止Nginx:
直接運行nginx便可啓動Nginx服務器,這種方式將使用默認的配置文件,若要改用其餘配置文件,需添加」-c配置文件路徑」選項來指定路徑。須要注意的是,若服務器中已安裝有httpd等其餘WEB服務軟件,應採起措施避免衝突。
經過檢查 Nginx程序的監聽狀態,或者在瀏覽器中訪問此WEB服務(默認頁面將顯示「Welcome to nginx!」),能夠確認Nginx服務是否正常運行。
或使用elinks瀏覽器(需安裝elinks軟件包。yum-y installelinks)【nss_compat_ossl 和elinks】
注意:要在防火牆上容許80端口的通訊。
中止Nginx服務:
#Killall -9 nginx
當Nginx進程運行時,PID號默認存放在logs/目錄下的nginx.pid文件中,所以若改用kill命令,也能夠根據nginx.pid文件中的PID號來進行控制。
爲了使Nginx服務的啓動、中止、重載等操做更加方便,能夠編寫Nginx服務腳本,並使用chkconfig和service工具來進行管理,也更加符合RHEL系統的管理習慣。
腳本內容以下:
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG -t &> /dev/null
if [ $? -eq 0 ]
then
$PROG
echo "Nginx service start success."
else
$PROG -t
fi
;;
stop)
kill -s QUIT $(cat $PIDF)
echo "Nginx service stop success."
;;
restart)
$0 stop
$0 start
;;
reload)
$PROG -t &> /dev/null
if [ $? -eq 0 ]
then
kill -s HUP $(cat $PIDF)
echo "reload Nginx config success."
else
$PROG -t
fi
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
截圖以下:
注:經過kill或killall命令發送HUP信號表示重載配置, 用新的配置開始新的工做進程
關閉舊的工做進程。QUIT信號表示退出進程,KILL信號表示殺死進程。經過」-s」選項指定信號種類。
添加爲系統服務。
[root@nginx ~]# chmod +x /etc/init.d/nginx
[root@nginx ~]# chkconfig --add nginx
這樣一來,就能夠經過nginx腳原本啓動、中止、重啓、重載Nginx服務器了。
3、配置文件nginx.conf:
在Nginx服務器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置這三大塊內容,配置語句的格式爲」關鍵字值;」(末尾以分號表示結束),以」#」開始的部分表示註釋。
1)全局配置
由各類配置語句組成,不使用特定的界定標記。全局配置部分包括運行用戶、工做進程數、錯誤日誌、PID存放位置等基本設置。
經常使用配置項:
usernobody; //運行用戶,Nginx的運行用戶實際是編譯時指定的nginx,若編譯時未指定則默認爲nobody
worker_processes 2; //指定nginx啓動的工做進程數量,建議按照cpu數目來指定,通常爲它的倍數
worker_cpu_affinity 00000001 00000010; //爲每一個進程分配cpu,上例中將2個進程分配到兩個cpu,固然能夠寫多個,或者將一個進程分配到多個cpu
worker_rlimit_nofile 102400; //這個指令是指當一個nginx進程打開的最多文件數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,可是nginx分配請求並非那麼均勻,因此最好與ulimit -n的值保持一致。(經過」ulimit –n 數值」能夠修改打開的最多文件數目)
error_loglogs/error.log; //全局錯誤日誌文件的位置
pidlogs/nginx.pid; //PID文件的位置
2)I/O事件配置:
使用」events {}」界定標記,用來指定Nginx進程的I/O響應模型,每一個進程的鏈接數等設置
events {
use epool;/ /使用epool模型,對於2.6以上的內核,建議使用epool模型以提升性能
worker_connections 4096; //每一個進程容許的最多鏈接數(默認爲1024),每一個進程的鏈接數應根據實際須要來定,通常在10000如下,理論上每臺nginx服務器的最大鏈接數爲
worker_processes*worker_connections,具體還要看服務器的硬件、帶寬等。
}
3)HTTP配置
使用」http{}」界定標記,包括訪問日誌、HTTP端口、網頁目錄、默認字符集、鏈接保持、以及虛擬主機、PHP解析等一系列設置。其中大部分配置語句包含在子界定標記」servier {}」內。
http {
#設定mime類型,即conf/目錄下的mime.types文件中的設定。
includemime.types;
default_type application/octet-stream;
#設定日誌格式
log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#設定access log
access_log logs/access.log main;
sendfileon; //支持文件發送(下載)
keepalive_timeout 65; //鏈接保持超時
#設定虛擬主機
server { //用來配置虛擬主機
listen80; //WEB服務的監聽設置,能夠採用」IP地址:端口」形式
server_name www.lnmp.com網站名,稱能夠寫多個名稱,用空格分隔;
location / { //表示如何匹配後面的路徑的
index index.html; //默認首頁
root html; //網頁根目錄位置,默認爲Nginx安裝目錄下的html/子目錄,root語句用來設置特定訪問位置的網頁文檔路徑,根據須要可改成/var/www/html等其餘路徑。
}
charset gb2312; //網頁的默認字符集
#設定本虛擬主機的訪問日誌
access_log logs/www.lnmp.com.access.log main;
error_page 500 502 503 504/50x.html; //內部錯誤的反饋頁面
location = /50x.html {
root html;
}
}
}
Nginx的location
基本語法:
location [=|~|~*|^~] /uri/ { … }
示例1:
location = / {
# 只匹配 / 查詢。
}
location/ {
#匹配任何查詢,由於全部請求都已 / 開頭。可是正則表達式規則和長的塊規則將被優先和查詢匹配
}
示例2:
location ^~ /p_w_picpaths/ {
# 匹配任何以 /p_w_picpaths/ 開頭的任何查詢而且中止搜索。任何正則表達式將不會被測試。
}
示例3:
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以 gif、jpg 或 jpeg 結尾的請求。
}
4、狀態統計及虛擬主機應用:
1)Nginx內置了HTTP_STUB_STATUS狀態統計模塊,用來反饋當前的WEB訪問狀況。配置
編譯參數時可添加—with-http_stub_stastus_module來啓用此模塊。要使用Nginx的狀態統計功能,除了啓用內建模塊之外,還須要修改nginx.conf文件,指定訪問位置並打開stub_status配置。在http{}配置的server{}子配置內添加以下配置項:
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
access_log off;
auth_basic "Nginx status";
auth_basic_user_file /usr/local/nginx/.htpasswd;
}
注:location/status //匹配任何包含/tongji的任何查詢
stub_statuson //打開狀態統計功能
Access_logoff //關閉此位置的日誌記錄
Nginx 支持爲目錄添加密碼認證,使用apache 的 htpasswd 來建立密碼文件
htpasswd-c/usr/local/nginx/.htpasswd用戶名
保存修改過的nginx.conf文件並重啓nginx服務使修生效。
新的配置生效後,在瀏覽器中訪問Nginx服務器的/tongji網站位置(http://web服務器IP/status)能夠看到狀態統計信息
如上圖所示:其中」Active connections」表示當前的活動鏈接數;而"server accepts handled requests」表示已經處理的鏈接信息,三個數字依次表示已處理的鏈接數、成功的TCP握手次數、已處理的請求數.
客戶端訪問控制:
注:allow 容許規則,deny拒絕規則;規則的執行是按從上向下執行,匹配某條規則後將不
再檢查其餘規則。
2)虛擬主機:
使用Nginx搭建虛擬主機服務器時,每一個虛擬WEB站點擁有獨立的」server {}」配置段,各自
監聽的IP地址、端口號能夠單獨指定,固然網站名稱也是不一樣的。
例如:要建立兩個站點www.benet.com和www.accp.com
爲兩個虛擬WEB主機分別創建根目錄,並準備測試首頁
[root@nginx ~]# mkdir -p /var/www/benet
[root@nginx ~]# echo "www.benet.com" > /var/www/benet/index.html
[root@nginx ~]# mkdir -p /var/www/accp
/www/accp[root@nginx ~]# echo "www.accp.com" > /var/www/accp/index.html
調整nginx.conf配置文件---域名虛擬主機
配置兩個」server {}」區域,分別對應兩個WEB站點,指定各自的網站名稱、監聽地址、網站
根目錄、訪問日誌等信息,而後重載配置
server {
listen 80;
server_name www.benet.com benet.com;
charset utf-8;
access_log logs/benet.access.log main;
location / {
root /var/www/benet;
index index.html index.php;
}
}
server {
listen 80;
server_name www.accp.com accp.com;
charset utf-8;
access_log logs/accp.access.log main;
location / {
root /var/www/accp;
index index.html index.php;
}
}
測試:
使用瀏覽器分別經過www.benet.com和www.accp.com訪問兩個WEB站點(注意域名解析。)
使用瀏覽器分別經過www.benet.com和www.accp.com訪問兩個WEB站點(注意域名解析。)
測試成功。
下接http://wenzhongxiang.blog.51cto.com/6370734/1251583,是Nginx的延伸。
本文出自 「聽聞」 博客,請務必保留此出處http://wenzhongxiang.blog.51cto.com/6370734/1251063