1. 程式人生 > >Linux基礎之命令練習Day7-nginx,nfs

Linux基礎之命令練習Day7-nginx,nfs

調度 個數 等於 集群配置 大小設置 selinux VC In 及其

一. Nginx

Nginx("engine x") 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0發布於2004年10月4日。其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗及並發能力強而聞名。

1. nginx的安裝(yum安裝)

首先需要安裝epel軟件源,因為它裏面包含了許多基本源裏沒有的軟件,方便nginx的安裝;yum install epel-release -y

安裝完epel後接著就可以安裝nginx了;yum install nginx -y

nginx配置文件默認應該在"/etc/nginx/nginx.conf",可以使用vim編輯修改配置

# Info : The conf for nginx
  # Author : dingtm
  # CTime : 2010.07.01
  user www www; #運行NGINX所使用的用戶和組
  worker_processes 4; #nginx進程數,建議按照cpu數目來指定,一般為它的倍數,每個進程消耗約10M內存
  error_log /data/logs/nginx/error.log crit;
  pid /elain/apps/nginx/nginx.pid;
  worker_rlimit_nofile 65535; #nginx能打開文件的最大句柄數,最好與ulimit -n的值保持一致,使用ulimit -SHn 65535 設置
  events {
  use epoll; #使用epoll的I/O模型
  connections 20000; #每個進程允許的最多連接數
  worker_connections 65535; #該值受系統進程最大打開文件數限制,需要使用命令ulimit -n 查看當前設置
  maxclients=65535*2
  }
  http {
  include mime.types; #mine.types內定義各文件類型映像
  types {
  text/html html;
  image/gif gif;
  image/jpeg jpg;
  image/png png;
  }
  default_type application/octet-stream; #設置默認類型是二進制流,若未設置時,比如未加載PHP時,是不予解析,用瀏覽器訪問則出現下載窗口
  server_names_hash_bucket_size 128; #不能帶單位!配置個主機時必須設置該值,否則無法運行Nginx或測試時不通過,該設置與server_names_hash_max_size 共同控制保存服務器名的HASH表,hash bucket size總是等於hash表的大小,並且是一路處理器緩存大小的倍數。若hash bucket size等於一路處理器緩存的大小,那麽在查找鍵的時候,最壞的情況下在內存中查找的次數為2。第一次是確定存儲單元的地址,第二次是在存儲單元中查找鍵 值。若報出hash max size 或 hash bucket size的提示,則我們需要增加server_names_hash_max_size的值。
  client_header_buffer_size 128k; #客戶端請求頭部的緩沖區大小,根據系統分頁大小設置,分頁大小可用命令getconf PAGESIZE取得
  large_client_header_buffers 4 128k; #4為個數,128k為大小,默認是4k。申請4個128k。當http 的URI太長或者request header過大時會報414 Request URI too large或400 bad request,這是很有可能是cookie中寫入的值太大造成的,因為header中的其他參數的size一般比較固定,只有cookie可能被寫入較 大的數據,這時可以調大上述兩個值,相應的瀏覽器中cookie的字節數上限會增大。
  client_max_body_size 8m; #HTTP請求的BODY最大限制值,若超出此值,報413 Request Entity Too Large
  open_file_cache max=65535 inactive=20s; #max指定緩存數量,建議和打開文件數一致,inactive是指經過多長時間文件沒被請求後刪除緩存。
  open_file_cache_valid 30s; #指多長時間檢查一次緩存的有效信息
  open_file_cache_min_uses 1; #open_file_cache指令中的inactive參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打開的,如上例, 如果有一個文件在inactive時間內一次沒被使用,它將被移除。
  server_tokens off; #關閉錯誤時Nginx版本顯示
  #提高文件傳輸性能
  sendfile on; #打開系統函數sendfile()支持
  tcp_nopush on; #打開linux下TCP_CORK,sendfile打開時才有效,作減少報文段的數量之用
  keepalive_timeout 60; #keepalive超時時間
  tcp_nodelay on; #打開TCP_NODELAY在包含了keepalive才有效
  fastcgi_connect_timeout 300; #指定連接到後端FastCGI的超時時間
  fastcgi_send_timeout 300; #向FastCGI傳送請求的超時時間,這個值是指已經完成兩次握手後向FastCGI傳送請求的超時時間。
  fastcgi_read_timeout 300; #接收FastCGI應答的超時時間,這個值是指已經完成兩次握手後接收FastCGI應答的超時時間。
  fastcgi_buffer_size 64k; #這裏可以設置為fastcgi_buffers指令指定的緩沖區大小
  fastcgi_buffers 16 16k; #指定本地需要用多少和多大的緩沖區來緩沖FastCGI的應答
  fastcgi_busy_buffers_size 128k; #建議為fastcgi_buffers的兩倍
  fastcgi_temp_file_write_size 128k; #在寫入fastcgi_temp_path時將用多大的數據塊,默認值是fastcgi_buffers的兩倍,設置上述數值設置太小時若負載上來時可能報 502 Bad Gateway
  fastcgi_cache dingtm #開啟FastCGI緩存並且為其制定一個名稱,有效降低CPU負載,並且防止502錯誤
  fastcgi_cache_valid 200 302 1h; #指定應答代碼緩存時間為1小時
  fastcgi_cache_valid 301 1d; #1天
  fastcgi_cache_valid any 1m; #其它為1分鐘
  fastcgi_cache_min_uses 1; #緩存在fastcgi_cache_path指令inactive參數值時間內的最少使用次數 f
  gzip on; #打開GZIP壓縮,實時壓縮輸出數據流
  gzip_min_length 1k; #從Content-Length中數值獲取驗證,小於1K會越壓越大
  gzip_buffers 4 16k; #以16K為單位4倍的申請內存做壓縮結果流緩存
  gzip_http_version 1.1;
  gzip_comp_level 3; #壓縮比率1-9,1壓縮比最小處理速度最快,9壓縮比最大但處理最慢且耗CPU
  gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型
  include vhosts/*.conf; #虛擬主機
  }
  #虛擬主機
  server {
  listen 80;
  server_name www.elain.org; #多域名用空格隔開
  index index.php index.html index.shtml;
  root /elain/data/htdocs/elain;
  #limit_conn connlimit 20; #限制一個IP只能最多只能發起20個連接,超過報 503 Service unavailable,可防止惡意連接
  access_log /elain/logs/nginx/access_www.elain.org.log access;
  error_log /elain/logs/nginx/error_www.elain.org.log;
  location / {
  ssi on; #WEB文檔根目錄打開SSI支持
  ssi_types text/html;
  ssi_silent_errors off; #處理SSI出錯時不提示
  }
  location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
  access_log off;
  expires 30d;
  }
  location ~ .*.(js|css)?$ {
  expires 1h;
  add_header Cache_Control private;
  }
  location ~ /.ht {
  deny all;
  }
  location /NginxStatus { #設定查看Nginx狀態的地址
  stub_status on;
  access_log off;
  auth_basic “NginxStatus”; #標識
  auth_basic_user_file conf/.htpasswd; #網頁加密,提示登錄框,輸入用戶名和密碼可查看
  }
  location ~ .*.(php|php5)?$ { #匹配文件後綴php, php5
  #fastcgi_pass unix:/tmp/php-cgi.sock; #SOCKET方式轉交fastcgi處理
  fastcgi_pass 127.0.0.1:9000; #9000端口方式fastcgi
  fastcgi_index index.php;
  include fastcgi_params; #包含fastcgi配置
  #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  }

設置完nginx.conf後應該先將linux系統的防火墻關掉,因為其會阻止遠程對nginx默認端口80的訪問;命令:systemctl stop firewalld(關掉防火墻),systemctl disable firewalld(開機不啟動防火墻)selinux 阻止了html文件下幾個html文件的遠程被訪問,需要修改selinux配置文件;命令:vim /etc/selinux/config,將第二個SELINUX=disabled,保存退出,重啟系統;

此時,就可以啟動nginx服務了,命令:systemctl start nginx(啟動nginx),systemctl enable nginx(設為開機啟動)。

2. nginx的安裝(源碼安裝)-這位大神已經寫得很詳細了。

3. nginx的配置使用

技術分享圖片

4. nginx均衡負載(LB)

負載均衡技術是構建大型網站必不可少的架構策略之一。它的目的是,把用戶的請求分發到多臺後端的設備上,用以均衡服務器的負載。

Nginx負載均衡器的特點是:
1). 工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構;
2). Nginx安裝和配置比較簡單,測試起來比較方便;
3). 也可以承擔高的負載壓力且穩定,一般能支撐超過上萬次的並發;
4). Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測;
5). Nginx對請求的異步處理可以幫助節點服務器減輕負載;
6). Nginx能支持http和Email,這樣就在適用範圍上面小很多;
7). 默認有三種調度算法: 輪詢、weight以及ip_hash(可以解決會話保持的問題),還可以支持第三方的fair和url_hash等調度算法;

技術分享圖片

二. nfs

NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公布。功能是通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位於服務器磁盤中的數據,是在類Unix系統間實現磁盤文件共享的一種方法。

NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的文件系統”,它是獨立於操作系統,容許不同硬件及操作系統的系統共同進行文件的分享。

NFS在文件傳送或信息傳送過程中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其他系統中程序的一種機制。NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER。所以只要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這麽理解RPC和NFS的關系:NFS是一個文件系統,而RPC是負責負責信息的傳輸。

1. nfs安裝,yum install rpcbind nfs-utils -y

2. nfs配置,vim /etc/exports

配置文件格式:<輸出目錄> [客戶端1 選項(訪問權限,用戶映射,其他)] [客戶端2 選項(訪問權限,用戶映射,其他)]

a. 輸出目錄:

輸出目錄是指NFS系統中需要共享給客戶機使用的目錄;

b. 客戶端:

客戶端是指網絡中可以訪問這個NFS輸出目錄的計算機

客戶端常用的指定方式

  • 指定ip地址的主機:192.168.0.200
  • 指定子網中的所有主機:192.168.0.0/24 192.168.0.0/255.255.255.0
  • 指定域名的主機:david.bsmart.cn
  • 指定域中的所有主機:*.bsmart.cn
  • 所有主機:*

c. 選項:

選項用來設置輸出目錄的訪問權限、用戶映射等。

NFS主要有3類選項:

訪問權限選項

  • 設置輸出目錄只讀:ro
  • 設置輸出目錄讀寫:rw

用戶映射選項

  • all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
  • no_all_squash:與all_squash取反(默認設置);
  • root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(默認設置);
  • no_root_squash:與rootsquash取反;
  • anonuid=xxx:將遠程訪問的所有用戶都映射為匿名用戶,並指定該用戶為本地用戶(UID=xxx);
  • anongid=xxx:將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,並指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);

其它選項

  • secure:限制客戶端只能從小於1024的tcp/ip端口連接nfs服務器(默認設置);
  • insecure:允許客戶端從大於1024的tcp/ip端口連接服務器;
  • sync:將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性;
  • async:將數據先保存在內存緩沖區中,必要時才寫入磁盤;
  • wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置);
  • no_wdelay:若有寫操作則立即執行,應與sync配合使用;
  • subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
  • no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率;

3. nfs啟動

1). 假如我們設置了 /share 為共享目錄,因為其它用戶需要權限進行訪問,所以需要修改該目錄及其子目錄文件的讀寫權限;命令:chmod -R o=rw- /share

2). 啟動服務

首先需要先啟動相關服務rpcbind,命令:systemctl start rpcbind.service(啟動),systemctl enable rpcbind.service(設為開機啟動)

然後再啟動nfs,命令:systemctl start nfs-server.service(啟動),systemctl enable nfs-server.service(設為開機啟動)

確認nfs啟動成功,命令:rpcinfo,exportfs(有輸出,例如:/share 192.168.31.0/24)

查看服務信息,命令:showmount -e #默認查看自己共享的服務,前提是要DNS能解析自己,不然容易報錯;showmount -a #顯示已經與客戶端連接上的目錄信息

3). 客戶端配置

客戶端按照同樣的方法安裝好nfs服務並啟動,無需修改exports配置文件,但需要將主機的共享目錄掛載在自己的默認訪問的html裏

命令:mount 192.168.47.133:/share /usr/nginx/html(綠色字體依自己機器的設置而定)

4). 接下來就可以在瀏覽器中驗證結果了

技術分享圖片

5). nginx+nfs共享集群配置

技術分享圖片

參考資料

1. http://baike.baidu.com/link?url=Rx4o-b2mkZxEiom-QWgVUlKwZRdeECcaXeAh2PKj0SllpFqwtY6yVc7SQNGqEXUC51pbA03HJLH_PhLEocmnP_

2. http://www.cnblogs.com/shengshuai/archive/2013/01/11/2856339.html

3. http://blog.csdn.net/lsm135/article/details/51863276

4. http://blog.csdn.net/finded/article/details/51889914

5. http://nginx.org/en/docs/http/load_balancing.html

6. http://www.cnblogs.com/langtianya/p/5242653.html

7. http://www.cnblogs.com/linhaifeng/articles/6045600.html#_label19

Linux基礎之命令練習Day7-nginx,nfs