Nginx概念講解

1、Nginx是什麼

Nginx是HTTP服務器,可將服務器上的靜態文件通過HTTP協議展示給客戶端。


2、Nginx能做什麼有什麼優勢

客戶端假設通過HTTP協議訪問A網站中的應用服務器,那麼網站管理者可在服務器加一個Nginx(也就是所謂的反向代理),讓客戶端線先請求Nginx,隨後Nginx去請求應用服務器,然後將結果返回給客戶端。那麼可能會有小夥伴疑惑既然可以直接訪問HTTP,那爲何要多此一舉,去先訪問代理呢,這麼做就什麼好處呢,優勢如下。

優勢1-支持負載均衡

當一個網站訪問量特別大的時候,網站的各種速度都會越來越慢,一臺服務器肯定是不夠用了。這個時候就需要將應用部署在多臺服務器上,將請求平攤給多臺服務器來處理。這樣的好處是,萬一某一臺服務器GG了,但只要還有其他的服務器正常運行,就不會影響使用。這個時候就可以通過Nginx反向代理來實現負載均衡。

下面這個配置會將請求輪詢分配到服務器中,這樣當客戶端請求次數多的時候,可以由不同的服務器來處理。


  1. upstream myapp {  
  2.     server192.168.1.1:8080; # 服務器1  
  3.     server192.168.1.2:8080; # 服務器2  
  4.     server192.168.1.3:8080; # 服務器3 
  5. }  
  6. server {  
  7.     listen80;  
  8.     location / {  
  9.         proxy_pass http://myapp;  
  10.     }  
  11. }  

  1.  可以通過ip-hash的方式,根據客戶端ip地址的hash值來請求分配給固定的某一個服務器處理。

  2. upstream myapp {  
    1.     ip_hash;
    2.     server192.168.1.1:8080;  
    3.     server192.168.1.2:8080;  
    4.     server192.168.3.2:8080; 
    5. }  
    6. server {  
    7.     listen80;  
    8.     location / {  
    9.         proxy_pass http://myapp;  
    10.     }  
    11. }  
  1. 服務器的硬件會影響他的性能,所以一般把大部分請求分配給好的服務器,把少量請求分配給差的服務器是比較好的一種做法,這個時候我們可以過weight關鍵字來來控制 weight越大,負載的權重就越大  還可用過max_fails 字段控制請求失敗次數:允許請求失敗的次數默認爲    當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤  然後通過設置關鍵字fail_timeout:max_fails來設置失敗後,暫停的時間
  2. tream myapp {  
  3.       server 192.168.1.1:8080 weight=1 max_fails=2 fail_timeout=30s;
  4.      server 192.168.2.1:8080 weight=3 max_fails=2 fail_timeout=30s;
  5.  
  6. }  
  7. server {  
  8.     listen80;  
  9.     location / {  
  10.         proxy_pass http://myapp;  
  11.     }  
  12. }  

優勢2-虛擬主機

    負載均衡雖然很好用,但並不是適合所有的網站,例如有的網站,訪問量較小,所以需要節約成本,這個時候就需要將多個網站放在同一臺服務器上。例如將A和B兩個網站部署在同一臺服務器上,然後將兩個域名同時解析到一個IP地址,但是要讓用戶通過兩個域名打開兩個完全不同的網站,彼此之間不影響,就像訪問兩個服務器一樣,這個時候就像2個虛擬主機。

  1. server {  
  2.     listen80default_server;  
  3.     server_name _;  
  4.     return444; # 過濾其他域名的請求,返回444狀態碼  
  5. }  
  6. server {  
  7.     listen80;  
  8.     server_name a; # a網站域名  
  9.     location / {  
  10.         proxy_pass http://localhost:8082; # 對應端口號8082  
  11.     }  
  12. }  
  13. server {  
  14.     listen80;  
  15.     server_name b; # b網站域名  
  16.     location / {  
  17.         proxy_pass http://localhost:8083; # 對應端口號8083  
  18.     }  
  19. }  

這個時候在服務器8082和8083分別開了一個應用,客戶端可以通過不同的域名去訪問,根據server_name可以反向代理到對應的應用服務器。

虛擬主機的原理是通過HTTP請求頭中的Host是否匹配server_name來實現的,另外server_name配置還可以過濾將某些域名指向你主機服務器的惡意行爲


優勢3-FastCGI

Nginx不支持PHP等語言,但是它可以通過FastCGI來將請求扔給某些語言或框架處理(例如PHP、Python、Perl)。

配置中將.php結尾的請求通過FashCGI交給PHP-FPM處理,PHP-FPM是PHP的一個FastCGI管理器。

  1. server {  
  2.     listen80;  
  3.     location ~ \.php$ {  
  4.         include fastcgi_params;  
  5.         fastcgi_param SCRIPT_FILENAME /PHP文件路徑$fastcgi_script_name; # PHP文件路徑  
  6.         fastcgi_pass127.0.0.1:9000; # PHP-FPM地址和端口號  
  7.         # 另一種方式:fastcgi_pass unix:/var/run/php5-fpm.sock;  
  8.     }  
  9. }  


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