Nginx(發音engine x)專爲性能優化而開發的開源軟件,是HTTP、反向代理、郵件代理、TCP/UDP協議代理軟件,由俄羅斯的做者Igor Sysoev開發,其最知名的優勢是它的穩定性和低系統資源消耗(硬件資源佔用較低),以及對HTTP併發鏈接的高處理能力(單臺物理服務器可支持30000~50000個併發請求),是一個輕量級WEB服務器軟件。正由於如此,大量提供社交網站、新聞資訊、電子商務以及虛擬主機等服務的企業紛紛選擇Ngnix來提供WEB服務。如新浪,淘寶(Tengine),京東,金山,網易,騰訊,百度文庫,51cto,人人網等。html
Nginx版本:linux
社區版 www.nginx.orgnginx
企業版 www.nginx.com(被F5收購)web
tengine tengine.taobao.orgvim
Nginx官方站點瀏覽器
最新的穩定版:1.16.1安全
最新的開發板:1.17.3性能優化
===================================================================bash
1)安裝支持軟件:服務器
Nginx的配置及運行須要pcre、zlib等軟件包的支持,所以應預先安裝這些軟件的開發包(devel),以便提供相應的庫和頭文件,確保Nginx的安裝順利完成。
首先咱們先關閉系統安全機制:
[root@nginx~]#systemctl stop firewalld
[root@nginx~]#iptables-F
[root@nginx~]#setenforce 0
安裝nginx所需的軟件包
[root@nginx~]# yum -y install pcre-devel zlib-devel openssl-devel
2) 建立運行用戶,組
[root@nginx~]# useradd -M -s /sbin/nologinnginx
3)編譯安裝nginx:
wget http://nginx.org/download/nginx-1.16.1.tar.gz (下載1.16.1版本nginx, wget命令須要安裝,也可去官網下載源碼包)
釋放 nginx源碼包:
tar xf nginx-1.16.1.tar.gz -C /usr/src
4)配置編譯:
[root@nginx~]# cd /usr/src/nginx-1.16.1/
[root@nginxnginx-1.16.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make && make install
注:配置前能夠參考:./configure --help給出說明
--prefix 設定Nginx的安裝目錄
--user和--group 指定Nginx運行用戶和組
--with-http_stub_status_module 啓用http_stub_status_module模塊以支持狀態統計
--with-http_ssl_module 啓用SSL模塊
--with-http_flv_module 啓用FLV模塊,提供尋求內存使用基於時間的偏移量文件
爲了使Nginx服務器的運行更加方便,能夠爲主程序nginx建立連接文件,以便管理員直接執行nginx命令就能夠調用Nginx的主程序。
[root@nginxnginx-1.16.1]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@nginxnginx-1.14.2]# ll /usr/local/bin/nginx //查看軟鏈接是否建立成功
5)Nginx 的運行控制:
與Apache的主程序httpd相似,Nginx的主程序也提供了"-t"選項用來對配置文件進行檢查,以便找出不當或錯誤的配置。配置文件nginx.conf默認位於安裝目錄/usr/local/nginx/conf/目錄中。若要檢查位於其餘位置的配置文件,可以使用"-c"選項來指定路徑。
[root@nginxconf]#nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
6)啓動,中止 Nginx:
直接運行nginx便可啓動Nginx服務器,這種方式將使用默認的配置文件,若要改用其餘配置文件,需添加"-c 配置文件路徑"選項來指定路徑。須要注意的是,若服務器中已安裝有httpd等其餘WEB服務軟件,應採起措施(修改端口,停用或卸載其餘軟件)避免部突。
[root@nginxconf]# netstat -anpt |grep :80
[root@nginxconf]#nginx
主程序Nginx支持標準的進程信號,經過kill或者killall命令傳送
HUP 重載配置 等同於-1
QUIT 退出進程 等同於-3
KILL 殺死進程 等同於-9
[root@nginx~]#killall -s HUP nginx
[root@nginx~]#killall -s QUIT nginx
[root@nginx~]# netstat -anpt |grep :80
當Nginx進程運行時,PID號默認存放在/usr/local/nginx/logs/目錄下的nginx.pid文件中,所以若改用kill命令,也能夠根據nginx.pid文件中的PID號來進行控制。
爲了使Nginx服務的啓動、中止、重載等操做更加方便,能夠編寫Nginx服務腳本,並使用chkconfig和systemctl工具來進行管理,也更加符合RHEL系統的管理習慣。
[root@nginx~]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
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
nginx 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
在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;
}
}
}
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已經處理完,正在等候下一次請求指令時的駐留鏈接數。
使用Nginx搭建虛擬主機服務器時,每一個虛擬WEB站點擁有獨立的"server {}"配置段,各自監聽的IP地址、端口號能夠單獨指定,固然網站名稱也是不一樣的。
例如:要建立兩個站點www.canflyfish.com和www.fish.com
爲兩個虛擬WEB主機分別創建根目錄,並準備測試首頁
[root@nginx~]#mkdir /usr/local/nginx/html/canflyfish
[root@nginx~]#mkdir /usr/local/nginx/html/fish
[root@nginx~]#echo "<h1>www.canflyfish.com</h1>"
>/usr/local/nginx/html/canflyfish/index.html
[root@nginx~]# echo "<h1>www.fish.com</h1>" > /usr/local/nginx/html/fish/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~]# /etc/init.d/restart nginx
[root@nginx~]# vim /etc/hosts
192.168.200.111 www.canflyfish.com
192.168.200.111 www.fish.com
虛擬主機訪問測試:
[root@nginx~]#elinks --dump http://www.canflyfish.com
www.canflyfish.com
[root@nginx~]#elinks --dump http://www.fish.com
www.fish.com
原文出處:https://www.cnblogs.com/canflyfish/p/11536515.html