Linux(服務器編程):32---Nginx概述與代理/靜態資源訪問等演示案例

一、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
  • 可以看到瀏覽器在下載該視頻(不是播放)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章