㈠ nginx 問一下nginx常用命令
1、終端中輸入:whereis nginx
(/usr/local/nginx/sbin)
2、cd /usr/local/nginx/sbin
3、啟動 ./nginx
4、查看Nginx的版本號:nginx -V
5、停止 nginx -s stop
6、退出 nginx -s quit
7、重啟載入配置 nginx -s reload
㈡ Nginx,一看就會
Nginx("engine x") 是一個高性能的 HTTP 和反向代理伺服器,特點是佔有內存少,並發能力強,事實上 nginx 的並發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用 nginx 網站用戶有:網路、京東、新浪、網易、騰訊、 淘寶等。
1.1 WEB 伺服器
Nginx 可以作為靜態頁面的 web 伺服器,同時還支持 CGI 協議的動態語言,比如 perl、php
等。但是不支持 java。Java 程序只能通過與 tomcat 配合完成。Nginx 專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率 ,能經受高負載的考驗,有報告表明能支持高達 50000個並發連接數。
1.2 反向代理
1.正向代理,代理客戶端,客戶端需要配置代理
2.反向代理,代理服務端,客戶端無感知
1.3 負載均衡
Nginx 的非同步框架可以處理很大的並發請求,把這些並發請求 hold 住之後就可以分發給後台服務端(backend servers,也叫做服務池, 後面簡稱 backend)來做復雜的計算、處理和響應,這種模式的好處是相當多的:隱藏業務主機更安全,節約了公網 IP 地址,並且在業務量增加的時候可以方便地擴容後台伺服器。
這時候集群的概念產生了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,將負載分發到不同的服器,也就是我們所說的負載均衡。
1.4 動靜分離
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度。降低原來單個伺服器的壓力。
Nginx官網
2.1 相關安裝包
pcre-8.37.tar.gz openssl-1.0.1t.tar.gz zlib-1.2.8.tar.gz nginx-1.11.1.tar.gz
2.2 安裝流程
2.1.1.安裝 pcre 解壓縮 pcre-xx.tar.gz 包
進入解壓縮目錄,執行./configure
如果提示,需要提前安裝 gcc++,進入安裝光碟目錄的軟體包(/media/CentOSXX/Package)執行
rpm -ivh libstdc+ devel-4.4.7-17.el6.x86_64.rpm
rpm -ivh gcc-c+ 4.4.7-17.el6.x86_64.rpm
./configure 完成後,回到 pcre 目錄下執行 make,再執行 make install
2.2.2.安裝 openssl
解壓縮 openssl-xx.tar.gz 包。
進入解壓縮目錄,執行./config
make && make install
2.2.3.安裝 zlib 解壓縮 zlib-xx.tar.gz 包。
進入解壓縮目錄,執行./configure。
make && make install
2.2.4.安裝 nginx
解壓縮 nginx-xx.tar.gz 包。
進入解壓縮目錄,執行./configure。
make && make install
查看開放的埠號
firewall-cmd --list-all
設置開放的埠號
firewall-cmd --add-service=http –permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重啟防火牆
firewall-cmd –reload
2.3 Nginx 啟動
命令
啟動命令:在/usr/local/nginx/sbin 目錄下執行 ./nginx
關閉命令: 在/usr/local/nginx/sbin 目錄下執行 ./nginx -s stop
重新載入命令: 在/usr/local/nginx/sbin 目錄下執行 ./nginx -s reload·
設置 nginx 為自啟動服務
修改 linux 啟動腳本/etc/rc.d/rc
加入 :/usr/local/nginx/sbin/nginx
nginx 安裝目錄下,其默認的配置文件都放在conf 目錄下,而主配置文件nginx.conf 也在其中,後續對 nginx 的使用基本上都是對此配置文件進行相應的修改。
根據上述文件,我們可以很明顯的將 nginx.conf 配置文件分為三部分
第一部分:全局塊
從配置文件開始到 events 塊之間的內容,主要會設置一些影響 nginx 伺服器整體運行的配置指令,主要包括配置運行 Nginx 伺服器的用戶(組)、允許生成的 worker process 數,進程 PID 存放路徑、日誌存放路徑和類型以及配置文件的引入等。
比如上面第一行配置的:worker_processes 1;
這是 Nginx 伺服器並發處理服務的關鍵配置,worker_processes 值越大,可以支持的並發處理量也越多,但是會受到硬體、軟體等設備的制約。
第二部分:events 塊
events 塊涉及的指令主要影響 Nginx 伺服器與用戶的網路連接,常用的設置包括是否開啟對多 work process 下的網路連接進行序列化,是否允許同時接收多個網路連接,選取哪種事件驅動模型來處理連接請求,每個 word process 可以同時支持的最大連接數等。
上述例子就表示每個 work process 支持的最大連接數為 1024.
這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。
第三部分:http 塊
這算是 Nginx 伺服器配置中最頻繁的部分,代理、緩存和日誌定義等絕大多數功能和第三方模塊的配置都在這里。
需要注意的是:http 塊也可以包括 http 全局塊、server 塊。
http 全局塊
http 全局塊配置的指令包括文件引入、MIME-TYPE 定義、日誌自定義、連接超時時間、單鏈接請求數上限等。
server 塊
這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一台獨立的硬體主機是完全一樣的,該技術的產生是為了節省互聯網伺服器硬體成本。
每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當於一個虛擬主機。
而每個 server 塊也分為全局 server 塊,以及可以同時包含多個 locaton 塊。
全局 server 塊
最常見的配置是本虛擬機主機的監聽配置和本虛擬主機的名稱或 IP 配置。
location 塊
一個 server 塊可以配置多個 location 塊。
這塊的主要作用是基於 Nginx 伺服器接收到的請求字元串(例如 server_name/uri-string),對虛擬主機名稱(也可以是 IP 別名)之外的字元串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。
案例配置如下:
location 指令說明
該指令用於匹配 URL,語法如下:
= :用於不含正則表達式的 uri 前,要求請求字元串與 uri 嚴格匹配,如果匹配
成功,就停止繼續向下搜索並立即處理該請求。
~:用於表示 uri 包含正則表達式,並且區分大小寫。
~*:用於表示 uri 包含正則表達式,並且不區分大小寫。
^~:用於不含正則表達式的 uri 前,要求 Nginx 伺服器找到標識 uri 和請求字
符串匹配度最高的 location 後,立即使用此 location 處理請求,而不再使用 location
塊中的正則 uri 和請求字元串做匹配。
注意:如果 uri 包含正則表達式,則必須要有 ~ 或者 ~* 標識。
案例配置如下:
在 linux 下有 Nginx、LVS、Haproxy 等等服務可以提供負載均衡服務,而且 Nginx 提供了幾種分配方式(策略):
輪詢(默認)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器 down 掉,能自動剔除。
weight
weight 代表權重,默認為 1,權重越高被分配的客戶端越多指定輪詢幾率,weight 和訪問比率成正比,用於後端伺服器性能不均的情況。
ip_hash
每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決 session 的問題。
fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
動靜分離從目前實現角度來講大致分為兩種:
1.一種是純粹把靜態文件獨立成單獨的域名,放在獨立的伺服器上,也是目前主流推崇的方案;
2.另外一種方法就是動態跟靜態文件混合在一起發布,通過 nginx 來分開。
通過 location 指定不同的後綴名實現不同的請求轉發。通過 expires 參數設置,可以使瀏覽器緩存過期時間,減少與伺服器之前的請求和流量。具體 Expires 定義:是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可,所以不會產生額外的流量。此種方法非常適合不經常變動的資源。(如果經常更新的文件,不建議使用 Expires 來緩存),我這里設置 3d,表示在這 3 天之內訪問這個 URL,發送一個請求,比對伺服器該文件最後更新時間沒有變化,則不會從伺服器抓取,返回狀態碼304,如果有修改,則直接從伺服器重新下載,返回狀態碼 200。
master-workers 的機制的好處
首先,對於每個 worker 進程來說,獨立的進程,不需要加鎖,所以省掉了鎖帶來的開銷,
同時在編程以及問題查找時,也會方便很多。其次,採用獨立的進程,可以讓互相之間不會
影響,一個進程退出後,其它進程還在工作,服務不會中斷,master 進程則很快啟動新的
worker 進程。當然,worker 進程的異常退出,肯定是程序有 bug 了,異常退出,會導致當
前 worker 上的所有請求失敗,不過不會影響到所有請求,所以降低了風險。
需要設置多少個 worker
Nginx 同 redis 類似都採用了 io 多路復用機制,每個 worker 都是一個獨立的進程,但每個進
程里只有一個主線程,通過非同步非阻塞的方式來處理請求, 即使是千上萬個請求也不在話
下。每個 worker 的線程可以把一個 cpu 的性能發揮到極致。所以 worker 數和伺服器的 cpu
數相等是最為適宜的。設少了會浪費 cpu,設多了會造成 cpu 頻繁切換上下文帶來的損耗。
連接數 worker_connection
這個值是表示每個 worker 進程所能建立連接的最大值,所以,一個 nginx 能建立的最大連接數,應該是 worker_connections * worker_processes。當然,這里說的是最大連接數,對於HTTP 請 求 本 地 資 源 來 說 , 能 夠 支 持 的 最 大 並 發 數 量 是 worker_connections * worker_processes,如果是支持 http1.1 的瀏覽器每次訪問要佔兩個連接,所以普通的靜態訪問最大並發數是: worker_connections * worker_processes /2,而如果是 HTTP 作 為反向代理來說,最大並發數量應該是 worker_connections *
worker_processes/4。因為作為反向代理伺服器,每個並發會建立與客戶端的連接和與後端服務的連接,會佔用兩個連接。
注意:此部分屬於高級技術,近幾日會將下面的知識點補充完畢。
8.1 Keepalived+Nginx 高可用集群(主從模式)
8.2 Keepalived+Nginx 高可用集群(雙主模式)
㈢ Nginx相關知識點
Nginx是lgor Sysoev為俄羅斯訪問量第二的rambler.ru站點設計開發的。從2004年發布至今,憑借開源的力量,已經接近成熟與完善。
Nginx功能豐富,可作為HTTP伺服器,也可作為反向代理伺服器,郵件伺服器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。並且支持很多第三方的模塊擴展。
Nginx的穩定性、功能集、示例配置文件和低系統資源的消耗讓他後來居上,在全球活躍的網站中有12.18%的使用比率,大約為2220萬個網站。
自行安裝
正向代理: 代理伺服器站在客戶端那邊就是正向代理;
反向代理: 代理伺服器站在原始伺服器那邊就是反向代理;
詳解參考點擊 Nginx正向代理與反向代理
Nginx在做反向代理時,提供性能穩定,並且能夠提供配置靈活的轉發功能。
Nginx可以根據不同的正則匹配,採取不同的轉發策略,比如圖片文件結尾的走文件伺服器,動態頁面走web伺服器,只要你正則寫的沒問題,又有相對應的伺服器解決方案,你就可以隨心所欲的玩。
並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的伺服器存在異常,他可以將請求重新轉發給另外一台伺服器,然後自動去除異常伺服器。
如果你的nginx伺服器給2台web伺服器做代理,負載均衡演算法採用輪詢,那麼當你的一台機器web程序iis關閉,也就是說web不能訪問,那麼nginx伺服器分發請求還是會給這台不能訪問的web伺服器,如果這里的響應連接時間過長,就會導致客戶端的頁面一直在等待響應,對用戶來說體驗就打打折扣,這里我們怎麼避免這樣的情況發生呢。這里我配張圖來說明下問題。
如果負載均衡中其中web2發生這樣的情況,nginx首先會去web1請求,但是nginx在配置不當的情況下會繼續分發請求道web2,然後等待web2響應,直到我們的響應時間超時,才會把請求重新分發給web1,這里的響應時間如果過長,用戶等待的時間就會越長。
下面的配置是解決方案之一:
如果使用upstream指令配置了一組伺服器作為被代理伺服器,伺服器中的訪問演算法遵循配置的負載均衡規則,同時可以使用該指令配置在發生哪些異常情況時,將請求順次交由下一組伺服器處理。
狀態值可以是:error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
Nginx提供的負載均衡策略有2種:內置策略和擴展策略。
內置策略: 1.輪詢;2.加權輪詢;3.Ip hash;
擴展策略: 就天馬行空,只有你想不到的沒有他做不到的啦,你可以參照所有的負載均衡演算法,給他一一找出來做下實現。
Ip hash演算法,對客戶端請求的ip進行hash操作,然後根據hash結果將同一個客戶端ip的請求分發給同一台伺服器進行處理,可以解決session不共享的問題。
eg:
開啟簡單的緩存配置,只需要兩個指令:proxy_cache_path和proxy_cache。
proxy_cache_path: 配置緩存的存放地址和其他的一些常用配置;
proxy_cache:指令是為了啟動緩存;
相關配置說明:
該指令用於定義滿足條件的響應不會被保存到緩存中。在條件字元串中至少有一個條件不為空或者0,符合這樣條件的響應才不會被緩存。
舉例如下
其中,cookie_nocache、arg_nocache...皆為變數,可以根據你訪問的匹配策略來設置,其值只有2類,0和非0;
訪問匹配策略例如:
如果在此鏈式配置中,只要有一個值不為0,則不會cache;例如:
則不會被cache.
註:一般會配合proxy_cache_bypass共同使用;
該指令用於定義哪些情況不從cache讀取,直接從backend獲取資源;配置方式同proxy_no_cache。
給緩存數據定義一個鍵,例如
該指令用於設置緩存哪些HTTP方法,默認緩存HTTP GET/HEAD方法,不緩存HTTP POST 方法.。
設置不同響應碼的緩存時間,當不指定響應碼的時候,例如
只對響應碼為200,301,302的訪問請求資源設置緩存時間,此外可以個性化定製,例如:
此外,還可以在相應header里設置優先順序更高的緩存有效時間:
不緩存包含在field的響應header,可以設置的值有:「X-Accel-Redirect」, 「X-Accel-Expires」, 「X-Accel-Limit-Rate」,「X-Accel-Buffering」, 「X-Accel-Charset」, 「Expires」, 「Cache-Control」, 「Set-Cookie」 (0.8.44), and 「Vary」。
如果上述的header field沒有設置為忽略,則header filed中有「X-Accel-Expires」, 「Expires」, 「Cache-Control」, 「Set-Cookie」, and 「Vary」的話,響應會被緩存。
該指令用於設置緩存的最小使用次數,默認值為1
源站有問題時,nginx可以通過proxy_cache_use_stale指令開啟容錯能力,即使用緩存內容來響應客戶端的請求。舉例如下:
如上配置表示,當作為cache的NGINX收到源站返回error、timeout或者其他指定的5XX錯誤,並且在其緩存中有請求文件的陳舊版本,則會將這些陳舊版本的文件而不是錯誤信息發送給客戶端。
使用NGINX,不需要建立一個RAID(磁碟陣列)。如果有多個硬碟,NGINX可以用來在多個硬碟之間分割緩存。舉例如下:
在這份配置中,使用了3個獨立的緩存,每個緩存專用一塊硬碟,另外,3個獨立的線程池也各自專用一塊硬碟。
緩存之間(其結果就是磁碟之間)的負載均衡使用split_clients模塊,split_clients非常適用於這個任務。
在 proxy_cache_path指令中設置 use_temp_path=off ,表示NGINX會將臨時文件保存在緩存數據的同一目錄中。這是為了避免在更新緩存時,磁碟之間互相復制響應數據。
通過訪問日誌,你可以得到用戶地域來源、跳轉來源、使用終端、某個URL訪問量等相關信息;
通過錯誤日誌,你可以得到系統某個服務或server的性能瓶頸等。
因此,將日誌好好利用,你可以得到很多有價值的信息。
打開nginx.conf配置文件:vim /usr/local/nginx/conf/nginx.conf
日誌部分內容:
#access_log logs/access.log main;
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
默認「main」日誌格式:
參數明細表:
查看日誌命令tail -f /usr/local/nginx/logs/access.log
打開nginx.conf配置文件去掉#注釋見下圖:
自定義某一個server配置的日誌,使用「main」日誌格式。
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
重新讀取載入Nginx配置文件:
執行命令:nginx-s reload
網上一位老師寫的log文件分解的腳本
此腳本執行時間根據自己公司情況來定,可以設置默認一天執行一次;
創建crontab設置作業
設置日誌文件存放目錄crontab -e
*/1 * * * * sh /usr/local/software/nginx/nginx_log.sh
此設置的為一分鍾,如果設置一天自行修改;
默認的 nginx 配置文件 nginx.conf 內容如下
示例
幾個常見配置項:
注意:
驚群現象:一個網路連接到來,多個睡眠的進程被同事叫醒,但只有一個進程能獲得鏈接,這樣會影響系統性能
每個指令必須有分號結束。
進入安裝目錄下的sbin
㈣ 如何通過命令行重新安裝NGINX
1. 執行備份nginx配置數據。
mv /usr/local/nginx-generic-1.6.0 /usr/local/nginx-generic-1.6.0-backup
2. 執行重新安裝nginx
amh nginx-generic-1.6.0 install
3. 恢復配置
cp /usr/local/nginx-generic-1.6.0-backup/conf/nginx.conf /usr/local/nginx-generic-1.6.0/conf/nginx.conf
4. 重啟nginx
amh nginx restart