Nginx網站服務
Nginx是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服
nginx相對於apache的優點:
輕量級,比apache 佔用更少的內存及資源
抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能
Nginx 是一個安裝非常的簡單 , 配置文件非常簡潔(支持perl語法), Bugs 非常少的服務器:
Nginx 配置簡潔, Apache 複雜
Nginx 靜態處理性能比 Apache 高
nginx處理靜態文件好,耗費內存少
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給出說明
--prefix:設定Nginx的安裝目錄
--user和—group:指定Nginx運行用戶和組
--with-http_stub_status_module:啓用http_stub_status_module模塊以支持狀態統計
編譯並安裝:
至此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/ { … }
=表示做精確匹配
~ :爲區分大小寫匹配
~*:爲不區分大小寫匹配
!~ :和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配正則表達式匹配,其中:
文件及目錄匹配,其中:
-f 和!-f用來判斷是否存在文件
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在文件或目錄
-x 和!-x用來判斷文件是否可執行
示例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