一. ngnix用途
1. Web 服務器:
相比 Apache,Nginx 使用資源更少,支持並發連接更多,效率更高,能夠支持高達 50,000 個並發連接數的響應。
2.負載均衡服務器
支持作為 HTTP代理服務器對外進行服務。Nginx用C編寫,不論是系統資源開銷還是 CPU 使用效率都比 Perlbal 要好的多。
3.作為郵件代理服務器
Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作為郵件代理服務器)。
4.優勢
安裝非常的簡單;配置文件 非常簡潔 (還能夠支持perl語法);bug非常少的服務器; Nginx 啟動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動;能夠在不間斷服務的情況下進行軟件版本的升級。
二. windows下安裝nginx
1. nginx下載地址: http://nginx.org/en/download.html
選擇紅框穩定版最后一個下載即可,下載好后解壓得到如下目錄
2. 解壓即可
3.nginx的啟動
在此目錄下打開cmd命令窗口,切換到nginx解壓目錄下,輸入命令 start nginx.exe ,回車即可
檢查nginx啟動是否成:
直接在瀏覽器地址欄輸入網址http://localhost:80,回車,出現以下頁面說明啟動成功
簡單介紹下幾個nginx命令
start nginx.exe 啟動nginx
nginx -s reload :修改配置后重新加載生效
nginx -s reopen :重新打開日志文件
nginx -t -c /path/to/nginx.conf 測試nginx配置文件是否正確
關閉nginx:
nginx -s stop :快速停止nginx
quit :完整有序的停止nginx
三.nginx配置
1. nginx的配置文件是conf目錄下的nginx.conf
2. nginx默認的訪問路徑server_name:localhost和監聽端口listen:80,啟動nginx之后,在瀏覽器中訪問http://localhost:80或者http://localhost(http默認端口80,可以不寫),即可出現nginx的歡迎頁面
3. 啟動之后, 如果80端口被占用(netstat -ano | findstr “80”), 可以修改listen的值,執行命令:nginx -s reload。
4. 也可以采用自定義conf配置文件然后用命令include內嵌到nginx.conf的方式
四. nginx的location配置
location指令的作用是根據用戶請求的URI來執行不同的應用,也就是根據用戶請求的URL進行匹配,匹配成功即進行相關的操作。
即:此模塊專門將請求導向其他服務
1. location的語法:
location [ = | ~ | ~* | ^~ ] uri { … }
指令 | | 匹配標識 | | 匹配的網站網址 | | 匹配URI之后要執行的配置段|
精確匹配(=) > 字符串打頭匹配(^~) > 正則匹配(或) > 否定式正則匹配(!或!) > 通用匹配(/)。兩種正則當中,區分大小寫的優先級高,也就是不帶*的優先級高(范圍從小到大)
2. 匹配模式:
精確匹配:
location = / {
#精確匹配訪問網站根目錄
}
location = /login {
#精確匹配http://xxx.com/login
^~ 表示以什么打頭,關鍵在於正則的開頭符 ^
location ^~ /static/ {
#以/static打頭,比如 http://xxx.com/static/jQuery.js
}
正則匹配(~ 區分大小寫的正則, ~* 不區分大小的正則)
location ~ \.png {
#以png結尾,比如比如 http://xxx.com/img/a.png
}
location ~* \.png$ {
#以png或者PNG或者Png等等結尾,比如 http://xxx.com/img/a.pNg。 如果是png結尾,會優先匹配上面一條。
}
排除法的正則,同樣區分大小寫優先於不區分大小寫
location !~ \.png$ {
#匹配“以png結尾”失敗,進入location,那就情況多了去了,只要不以png結 尾就行
}
location !~* \.png$ {
#匹配“以png或者PNG或者PnG等等”結尾失敗,進入location,那情況也多了 去了,只要不是PNG的各種大小寫變體就行
}
通用匹配
location / {
#用來兜底的,當前面其他所有的規則都不滿足條件,就歸入這個通用的
}
“@”前綴
注意:inginx中配置proxy_pass時,當在后面的url加上了"/",相當於是絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;如果沒有"/",則會把匹配的路徑部分也給代理走.
比如nginx請求鏈接:http://localhost:8080/api/getName?name=xiaoming
a.第一種情況:proxy_pass鏈接的最后不帶"/"
則被代理為:http://localhost:8082/api/getName?name=xiaoming
b.第二種情況:proxy_pass鏈接的最后帶"/"
則被代理為:http://localhost:8082/getName?name=xiaoming
五. 負載均衡:
1.nginx的反向代理:
nginx的代理過程,就是將請求發送給nginx,然后將請求轉發給后端服務器,后端服務器處理完畢之后將結果再發給nginx,nginx再把結果發送給客戶端。后端服務器可在遠程也可在本地,也可以是nginx服務器內部定義的其他虛擬主機。這些接收nginx轉發的服務器被稱為上游(upstream),使用nginx做代理的目的之一是擴展基礎架構的規模。nginx可以處理大量並發連接,請求到來后,nginx可將其轉發給任意數量的后台服務器進行處理,這等於將負載均衡分散到整個集群
2.緩沖:
nginx也提供了緩沖的機制,用於提高性能。沒有緩沖的情況下,數據直接從后端服務器發送給客戶端。緩沖的作用是在nginx上臨時存儲來自后端服務器的處理結果,從而可以提早關閉nginx到后端的連接,減少IO的損耗。一般內容存放在內存當中,但當內容過多,造成的內存不夠時,會把內容存放在臨時文件目錄下。
3.負載均衡:
客戶端訪問nginx的時候,只需要配置一個ip和一個端口,nginx幫助我們把請求轉發不同的后台服務中。
六. nginx配置多個配置文件:
需要在server中加:include config/*.conf; (此處config為文件夾名,可更改)
七. 跨域
跨域請求就是指:當前發起請求的域與該請求指向的資源所在的域不一樣。這里的域指的是這樣的一個概念:協議 + 域名 + 端口號均相同,那么就是同域。