全面瞭解-Nginx
nginx 下載地址:點選下載
SwitchHosts 下載地址:點選下載(用於快速切換 hosts 檔案的小程式)
一、nginx入門
1.1什麼是nginx?
nginx是一款高效能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬併發連結,並且cpu、記憶體等資源消耗卻非常低,執行非常穩定,所以現在很多知名的公司都在使用nginx。
1.2 nginx應用場景
1、http伺服器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態伺服器。
2、虛擬主機。可以實現在一臺伺服器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺伺服器不能滿足使用者的請求時,需要用多臺伺服器叢集可以使用nginx做反向代理。並且多臺伺服器可以平均分擔負載,不會因為某臺伺服器負載高宕機而某臺伺服器閒置的情況。
1.3 Windows環境下安裝Nginx
解壓:nginx-windows
雙擊: nginx.exe
或者:
三個命令:(在 CMD 中執行)
啟動:start nginx.exe
停止:nginx.exe -s stop
重新載入:nginx.exe -s reload
能看到nginx歡迎介面說明,nginx安裝成功
演示下 nginx做靜態伺服器
1.3.1 windows常用命令
nginx.exe -s stop –停止
1.4 nginx優缺點
佔記憶體小,可以實現高併發連線、處理響應快。
可以實現http伺服器、虛擬主機、反向代理、負載均衡。
nginx配置簡單
可以不暴露真實伺服器IP地址
1.4 nginx.conf 介紹
1.4.1 nginx.conf檔案的結構
nginx的配置由特定的識別符號(指令符)分為多個不同的模組。
指令符分為簡單指令和塊指令。
· 簡單指令格式:[name parameters;]
· 塊指令格式:和簡單指令格式有一樣的結構,但其結束識別符號不是分號,而是大括號{},塊指令內部可以包含simple directives 和block directives, 可以稱塊指令為上下文(e.g. events, http, server, location)
conf檔案中,所有不屬於塊指令的簡單指令都屬於main上下文的,http塊指令屬於main上下文,server塊指令http上下文。
1.4.2 配置靜態訪問
Web server很重要一部分工作就是提供靜態頁面的訪問,例如images, html page。nginx可以通過不同的配置,根據request請求,從本地的目錄提供不同的檔案返回給客戶端。
開啟安裝目錄下的nginx.conf檔案,預設配置檔案已經在http指令塊中建立了一個空的server塊,在nginx-1.8.0中的http塊中已經建立了一個預設的server塊。內容如下:
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1.4 nginx實現反向代理
1.4.1什麼是反向代理?
反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。
啟動一個Tomcat 127.0.0.1:8080
使用nginx反向代理 8080.i-ronge.com 直接跳轉到127.0.0.1:8080
1.4.1Host檔案新增
127.0.0.1 8080.i-ronge.com
127.0.0.1 8081.i-ronge.com
1.4.2 nginx.conf 配置
配置資訊:
server {
listen 80;
server_name 8080.i-ronge.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
server {
listen 80;
server_name 8081.i-ronge.com;
location / {
proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
}
1.5 nginx實現負載均衡
1.5.1什麼是負載均衡
負載均衡 建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。
負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。
1.5.3負載均衡策略
1、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、指定權重
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3、IP繫結 ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
1.5.4配置程式碼
upstream backserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name www.i-ronge.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
}
}
1.5.4宕機輪訓配置規則
server {
listen 80;
server_name www.i-ronge.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
proxy_connect_timeout 1;
proxy_send_timeout 1;
proxy_read_timeout 1;
}
}
1.6 nginx解決網站跨域問題
配置:
server {
listen 80;
server_name www.i-ronge.com;
location /A {
proxy_pass http://a.a.com:81/A;
index index.html index.htm;
}
location /B {
proxy_pass http://b.b.com:81/B;
index index.html index.htm;
}
}
1.7 nginx配置防盜鏈
location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
valid_referers blocked http://www.i-ronge.com www.i-ronge.com;
if ($invalid_referer) {
return 403;
}
}
1.7 nginx配置DDOS
1.7.1限制請求速度
設定Nginx、Nginx Plus的連線請求在一個真實使用者請求的合理範圍內。比如,如果你覺得一個正常使用者每兩秒可以請求一次登入頁面,你就可以設定Nginx每兩秒鐘接收一個客戶端IP的請求(大約等同於每分鐘30個請求)。
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {
...
location /login.html {
limit_req zone=one;
...
}
}
`limit_req_zone`命令設定了一個叫one的共享記憶體區來儲存請求狀態的特定鍵值,在上面的例子中是客戶端IP($binary_remote_addr)。location塊中的`limit_req`通過引用one共享記憶體區來實現限制訪問/login.html的目的。
1.7.1限制請求速度
設定Nginx、Nginx Plus的連線數在一個真實使用者請求的合理範圍內。比如,你可以設定每個客戶端IP連線/store不可以超過10個。
原文:https://blog.csdn.net/qq_35393693/article/details/80405911