1、為了使Nginx服務的啟動、停止、重載等操作更加方便,可以編寫Nginx服務腳本,並使用chkconfig和systemctl工具來進行管理,也更加符合RHEL系統的管理習慣。
[root@nginx~]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Server Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
保存退出
[root@nginx~]#chmod +x /etc/init.d/nginx
[root@nginx~]#chkconfig --add nginx
[root@nginx~]#chkconfignginx on
[root@nginx~]#chkconfig --list nginx
nginx0:關閉1:關閉2:啟用3:啟用4:啟用5:啟用6:關閉
這樣就可以通過nginx腳本來啟動、停止、重啟、重載Nginx服務器了。
2、nginx.conf文件結構
在Nginx服務器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置這三大塊內容,配置語句的格式為"關鍵字 值;"(末尾以分號表示結束),以"#"開始的部分表示注釋。
1)全局配置
由各種配置語句組成,不使用特定的界定標記。全局配置部分包括運行用戶、工作進程數、錯誤日志、PID存放位置等基本設置。
常用配置項:
- user nginx [nginx]; //運行用戶,Nginx的運行用戶實際是編譯時指定的nginx,若編譯時未指定則默認為nobody。
- worker_processes 2;//指定nginx啟動的工作進程數量,建議按照cpu數目來指定,一般和CPU核心數相等。
- worker_cpu_affinity 00000001 00000010; //為每個進程分配cpu核心,上例中將2個進程分配到兩個cpu,當然可以寫多個,或者將一個進程分配到多個cpu
- worker_rlimit_nofile 102400; //這個指令是指當一個nginx進程打開的最多文件數目,理論值應該是最多打開文件數(ulimit-n)與nginx進程數相除,但是nginx分配請求並不是那么均勻,所以最好與ulimit -n的值保持一致。(通過"ulimit–n 數值"可以修改打開的最多文件數目)
- error_log logs/error.log; //全局錯誤日志文件的位置
- pid logs/nginx.pid; //PID文件的位置
2)I/O事件配置:
使用"events {}"界定標記,用來指定Nginx進程的I/O響應模型,每個進程的連接數等設置
events {
//使用epoll模型,對於2.6以上的內核,建議使用epoll模型以提高性能
worker_connections 4096; //每個進程允許的最多連接數(默認為1024),每個進程的連接數應根據實際需要來定,一般在10000以下,理論上每台nginx服務器的最大連接數為worker_processes*worker_connections,具體還要看服務器的硬件、帶寬等。
}
3)HTTP配置
使用"http{}"界定標記,包括訪問日志、HTTP端口、網頁目錄、默認字符集、連接保持、以及虛擬主機、PHP解析等一系列設置。其中大部分配置語句包含在子界定標記"server {}"內。
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; //訪問日志位
sendfile on; //支持文件發送(下載)
keepalive_timeout 65; //連接保持超時
server { //web服務的監聽配置
listen 80; //監聽地址及端口(IP:PORT)
server_name www.crushlinux.com; //網站名稱(FQDN)
charset utf-8; //網頁的默認字符集
location / { //跟目錄配置
root html; //網站根目錄的位置安裝位置的html中
index index.html index.htm; //默認首頁(索引頁)
}
error_page 500 502 503 504 /50x.html; //內部錯誤的反饋頁面
location = /50x.html { //錯誤頁面配置
root html;
}
}
}
3、狀態統計模塊
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;//關閉此位置的日志記錄
}
[root@nginxconf]#systemctl restart nginx
瀏覽器訪問 http://192.168.200.111/status
Active connections 表示當前活躍的連接數,
第三行的三個數字表示Nginx當前總共處理了3個連接,成功創建3次握手,總共處理了12個請求。
Reading表示Nginx讀取到客戶端Header信息數,
Writing表示Nginx返回給客戶端的Header信息數
Waiting表示Nginx已經處理完,正在等候下一次請求指令時的駐留連接數。
4、虛擬主機應用
使用Nginx搭建虛擬主機服務器時,每個虛擬WEB站點擁有獨立的"server {}"配置段,各自監聽的IP地址、端口號可以單獨指定,當然網站名稱也是不同的。
例如:要創建兩個站點www.crushlinux.com和www.cloud.com
為兩個虛擬WEB主機分別建立根目錄,並准備測試首頁
[root@nginx~]#mkdir /usr/local/nginx/html/crushlinux
[root@nginx~]#mkdir /usr/local/nginx/html/cloud
[root@nginx~]# echo "<h1>www.crushlinux.com</h1>" >/usr/local/nginx/html/crushlinux/index.html
[root@nginx~]# echo "<h1>www.cloud.com</h1>" > /usr/local/nginx/html/cloud/index.html
[root@nginx~]# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.crushlinux.com;
charset utf-8;
access_log logs/crushlinux.access.log main;
location / {
root html/crushlinux;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.cloud.com;
charset utf-8;
access_log logs/cloud.access.log main;
location / {
root html/cloud;
index index.html index.htm;
}
}
}
[root@nginx~]#systemctl restart nginx
[root@nginx~]# vim /etc/hosts
192.168.200.111 www.crushlinux.com
192.168.200.111 www.cloud.com
虛擬主機訪問測試
[root@nginx~]#elinks --dump http://www.crushlinux.com
[root@nginx~]#elinks --dump http://www.cloud.com
7、測試
分別在瀏覽器中輸入域名以及IP地址來查看網頁相應內容