一、Nginx可以作爲代理/網關
- 工作原理:
- 在一個局域網中,Nginx與其他server一起工作,但是Nginx可以作爲這些server的代理
- 當有外部數據到達路由器時,路由器通過地址映射將外部數據映射到nginx服務器上(映射方法有:路由器的公有地址是112.73.116.78:8080,那麼路由器將地址映射到局域網的Nginx地址192.168.0.100:80上),nginx接收到數據之後再把數據分發到其他server上
- 代理與跳轉的不同:
- 代理是客戶端與nginx相連,然後nginx將數據轉發給實際server
- 跳轉是客戶端連接到nginx,然後與nginx斷開連接,並根據nginx的同時信息去連接另外的server
二、負載均衡
- 在五層協議棧中,不同的層有不同的複雜均衡實現技術,例如數據鏈路層通過F5實現負載均衡、網絡層使用lvs實現負載均衡等,但是Nginx是在應用層實現的複雜均衡
- 越往下面走,對負載均衡的性能要求越高
三、斷點續傳
- 實現原理:
- 假設服務端有一個300M的文件,客戶端使用http協議去下載該文件
- 假設客戶端開啓三個線程去下載該文件,每個線程有自己的下載範圍
- 在下載時,客戶端會使用請求報文中的range字段表明自己要下載的文件的範圍
- 數據接收如何重組:
- client會預先分配好文件的大小,用來保存從服務端返回來的數據
- 每個線程都會有自己對該文件寫入的位置,因此不需要對該文件進行加鎖,每個線程各自寫入自己對應的位置即可
四、演示案例:訪問Nginx初始化頁面
- 下面我們在ubuntu上安裝好了Nginx,現在我們來訪問Nginx的初始化頁面
演示步驟
- 在/usr/local/nginx/conf/myconf/目錄下建立下面的配置文件nginx_test1.conf,用來啓動Nginx
#nginx進程數 worker_processes 4; events { #每個進程能夠接受的併發數的最大數目 worker_connections 1024; } http { server { listen 8888; server_name localhost; #每個客戶端請求頭大小的最大值,如果超過這個值給客戶端返回413 client_max_body_size 100m; } }
- 使用上面的配置文件啓動Nginx,地址爲192.168.0.103:8888
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/myconf/nginx_test1.conf
- 使用谷歌瀏覽器訪問,端口爲8888
- 當我們通過url訪問nginx時,其默認訪問的是nginx服務器的/usr/local/nginx/html/index.html網頁,如果我們想要更改這種默認設置,那麼可以設置location配置項
# 省略...
http {
server {
# "/"代表URL的根目錄,默認訪問/usr/local/nginx/html/index.html
location / {
proxy_pass http://111.229.177.161;
}
}
}
- 我們也可以設置location的訪問規則
# 省略...
http {
server {
# "/"代表URL的根目錄,下面通過root顯式給出要訪問/usr/local/nginx/html/index.html
# 下面我們雖然沒有給出index.html,但是根據瀏覽器的規則,當沒有給出.html時,其默認顯式目錄下的index.html
location / {
root /usr/local/nginx/html/;
proxy_pass http://111.229.177.161;
}
}
}
五、演示案例:代理單個服務器
- Nginx可以作爲其他服務器的代理,當我們訪問Nginx時,可以讓其跳轉到另外一個服務器
演示步驟
- 在/usr/local/nginx/conf/myconf/目錄下建立下面的配置文件nginx_test2.conf,用來啓動下面的代理Nginx服務器
worker_processes 4; events { worker_connections 1024; } http { server { listen 8888; client_max_body_size 100m; location / { proxy_pass http://111.229.177.161; } } }
- 開啓被代理Nginx服務器111.229.177.161:80
- 使用上面的配置文件啓動代理Nginx服務器,地址爲192.168.0.105:8888,其代理的Nginx地址爲111.229.177.161:80
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/myconf/nginx_test2.conf
- 現在我們去訪問代理服務器192.168.0.103:8888,進去之後其顯示的內容如下,被代理轉到了111.229.177.161:80上(下面的網頁是111.229.177.161:80的頁面內容)
六、演示案例:代理多個服務器
演示步驟
- 在/usr/local/nginx/conf/myconf/目錄下建立下面的配置文件nginx_test3.conf,用來啓動下面的代理Nginx服務器
worker_processes 4; events { worker_connections 1024; } http { upstream backend { server 192.168.0.103 weight=2; server 111.229.177.161 weight=1; } server { listen 8888; client_max_body_size 100m; location / { proxy_pass http://backend; } } }
- 開啓一臺被代理Nginx服務器111.229.177.161:80(這臺機器與代理服務器處於同一系統中,但是端口不同,可以看成是兩個不同的nginx實例)
- 再開啓另外一臺被代理Nginx服務器192.168.0.103:80
- 使用上面的配置文件啓動代理Nginx服務器,地址爲192.168.0.103:8888,其代理的Nginx地址爲111.229.177.161:80和192.168.0.103:80
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/myconf/nginx_test3.conf
- 訪問前清除一下瀏覽器數據,否則可能會造成誤差,谷歌的方式爲:設置-->更多工具-->清除瀏覽數據
- 現在我們去訪問代理服務器192.168.0.103:8888,其代理的規則如下:
- 因爲上面我們賦予192.168.0.103:80的權重爲2,111.229.177.161:80的權重爲1
- 每三次訪問中,有兩次是訪問192.168.0.103:80的,有一次是訪問111.229.177.161:80的
- 然後以此類推,每三次訪問中,192.168.0.103:80訪問佔2兩次,111.229.177.161:80訪問佔1兩次
七、演示案例:請求靜態資源
- 像.js/.css/.txt/音視頻文件這些內容都屬於靜態資源,我們可以通過URL進行獲取
演示獲取圖片
- 下面我們在/usr/local/nginx/html/下建立一個images目錄,然後放置兩張圖片
sudo mkdir /usr/local/nginx/html/images
- 在/usr/local/nginx/conf/myconf/目錄下建立下面的配置文件nginx_test4.conf,用來啓動下面的Nginx服務器
worker_processes 4; events { worker_connections 1024; } http { server { listen 8888; client_max_body_size 100m; # 當url訪問/images/時,其會訪問到系統的/usr/local/nginx/html/images/目錄 location /images/ { root /usr/local/nginx/html/; } } }
- 使用上面的配置文件啓動Nginx,地址爲192.168.0.103:8888
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/myconf/nginx_test4.conf
- 通過瀏覽器訪問剛纔的圖片,url分別爲
192.168.0.103:8888/images/1.png 192.168.0.103:8888/images/2.png
演示獲取視頻
- 下面我們在/usr/local/nginx/html/下建立一個media目錄,然後放置一段視頻,名爲demo.mp4
sudo mkdir /usr/local/nginx/html/media
- 在/usr/local/nginx/conf/myconf/目錄下建立下面的配置文件nginx_test5.conf,用來啓動下面的Nginx服務器
worker_processes 4; events { worker_connections 1024; } http { server { listen 8888; client_max_body_size 100m; # 當url訪問/images/時,其會訪問到系統的/usr/local/nginx/html/images/目錄 location ~ \.(mp3\mp4) { root /usr/local/nginx/html/media/; } } }
- 使用上面的配置文件啓動Nginx,地址爲192.168.0.103:8888
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/myconf/nginx_test5.conf
- 通過瀏覽器訪問剛纔的圖片,url爲
192.168.0.103:8888/media/demo.mp4
- 可以看到瀏覽器在下載該視頻(不是播放)