nginx作用


nginx有兩個作用:1.負載均衡 2.靜態圖片服務器

一.負載均衡

Nginx 的 HttpUpstreamModule 提供對后端(backend)服務器的簡單負載均衡。一個最簡單的 upstream 寫法如下:

 1 upstream backend {
 2     server backend1.example.com;
 3     server backend2.example.com;
 4     server.backend3.example.com;
 5 }
 6 
 7 server {
 8     location / {
 9         proxy_pass http://backend;
10     }
11 }

1、后端服務器

通過 upstream 可以設定后端服務器,指定的方式可以是 IP 地址與端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析為多個地址,則這些地址都作為 backend。下面舉例說明:

1 upstream backend {
2     server blog.csdn.net/poechant;
3     server 145.223.156.89:8090;
4     server unix:/tmp/backend3;
5 }

2、負載均衡策略

Nginx 提供輪詢(round robin)、用戶 IP 哈希(client IP)和指定權重 3 種方式。

默認情況下,Nginx 會為你提供輪詢作為負載均衡策略。但是這並不一定能夠讓你滿意。

一個問題,用戶登陸后兩台服務器的session不能共享,我研究了一下,發現有四個解決方案,1、session放入cookie中,2、session放入數據庫中,3、session使用memcache技術放入內存中。這幾個一看就不是合適,不安全,I/O慢,內存溢出。所以我覺得第四種方式比較合適,就是在nginx.conf中配置一個ip_hash,原理是ip_hash技術能夠將某個ip的請求定向到同一台后端,這樣一來這個ip下的某個客戶端和某個后端就能建立起穩固的session。

再介紹一個和 ip_hash 配合使用的關鍵字:down。當某個一個 server 暫時性的宕機(down)時,你可以使用“down”來標示出來,並且這樣被標示的 server 就不會接受請求去處理。具體如下:

1 upstream backend {
2     server blog.csdn.net/poechant down;
3     server 145.223.156.89:8090;
4     server unix:/tmp/backend3;
5 }

還可以使用指定權重(weight)的方式,如下:

1 upstream backend {
2     server backend1.example.com;
3     server 123.321.123.321:456 weight=4;
4 }

默認情況下 weight 為 1,對於上面的例子,第一個 server 的權重取默認值 1,第二個是 4,所以相當於第一個 server 接收 20% 的請求,第二接收 80% 的。要注意的是 weight 與 ip_hash 是不能同時使用的,原因很簡單,他們是不同且彼此沖突的策略。

3、重試策略

可以為每個 backend 指定最大的重試次數,和重試時間間隔。所使用的關鍵字是 max_fails 和 fail_timeout。如下所示:

1 upstream backend {
2     server backend1.example.com weight=5;
3     server 54.244.56.3:8081 max_fails=3 fail_timeout=30s;
4 }

在上例中,最大失敗次數為 3,也就是最多進行 3 次嘗試,且超時時間為 30秒。max_fails 的默認值為 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。

有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數可能不會起作用。導致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:

1 upstream backend {
2     server backend.example.com max_fails fail_timeout=30s;
3     server backend.example.com max_fails fail_timeout=30s;
4     server backend.example.com max_fails fail_timeout=30s;
5 }

4、備機策略

從 Nginx 的 0.6.7 版本開始,可以使用“backup”關鍵字。當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標注的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。舉例如下:

1 upstream backend {
2     server backend1.example.com;
3     server backend2.example.com backup;
4     server backend3.example.com;
5 }

二.靜態圖片服務器

1.效果

例如:圖片通過ftp服務上傳到/home/ftpuser/www/images目錄下,我想通過訪問Nginx服務器來訪問ftp目錄下的圖片文件,該url為http://ip地址//images/xxx.jpg,即使用http請求訪問原本需要使用ftp請求才能訪問到的資源文件。

2.實現

 ①需要在nginx/html下創建一個images文件夾(實際訪問的不是這個路徑)

1 mkdir /usr/local/nginx/html/images

②修改nginx/conf/nginx.conf在默認的server里再添加一個location並指定實際路徑:

1 location /images/ {
2     root  /home/ftpuser/www/;
3     autoindex on;
4 }  

修改完后重新啟動nginx

1 ./nginx -s reload

1)root則是將images映射到/home/ftpuser/www/images/ 

2)autoindex on便是打開瀏覽功能。

3)ftpuser這個用戶需要自己創建,名字任意

4)root /home/ftpuser/www/這后面是不帶images的且root后面要有空格

③修改用戶訪問權限

1 chown ftpuser /home/ftpuser
2 chmod 777 -R /home/ftpuser

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM