讀《實戰nginx-取代Apache的高性能web服務器》--精華部分紀要

  1. Nginx 能夠選擇高效的epoll(linux 2.6內核) 、kqueue(FreeBSD)、eventport(Solars10) 
  2. 作爲網絡I/O模型而Apache使用的則是傳統的select模型,其比較穩定的Prefork模式爲多進程模式,
  3. 需要經常派生子進程所消耗的CPU等服務器資源比Nginx高很多。

  1. nginx編譯容易混淆的幾個參數 
  2.  
  3. --sbin-path=<path> 
  4. #nginx可執行文件安裝路徑。如沒指定,默認<prefix>/sbin/nginx 
  5.  
  6. --conf-path=<path> 
  7. #在沒有給定-c選項默認的nginx.conf的路徑,默認<prefix>/conf/nginx.conf 
  8.  
  9. --error-log-path=<path> 
  10. #在nginx.conf中沒有指定error_log指定的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認爲<prefix>/logs/error.log 
  11.  
  12. --http-log-path=<path> 
  13. #在nginx.conf中沒有指定access_log指定的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認爲<prefix>/logs/access.log 

 

  1. nginx的幾種停止,重啓,升級方式  
  2. 從容停止  
  3. kill - QUIT  <pid>  
  4. 快速停止  
  5. kill - TERM  <pid> 或 kill - INT <pid>  
  6. 強制停止  
  7. pkill -9  <pid>  
  8. 重新打開日日誌文件,在切割日誌時用處很大 
  9. kill - USER1  <pid>  
  10.   
  11. 平滑重啓 
  12. kill -HUP  <pid>  
  13. 當Nginx接到HUP信號時,他會嘗試先解析配置文件(如果指定配置文件,就使用指定的,否則使用默認的) 
  14. 如果成功,就應用新的配置文件(例如,重新打開日誌文件或監聽的套接字)。之後,Nginx運行新的進程。 
  15. 通知工作進程關閉監聽套接字,但是繼續爲當前連接的客戶端提供服務。所有客戶端的服務完成後, 
  16. 舊得工作進程被關閉。如果新的配置文件應用失敗,Nginx將繼續使用舊的配置進行工作  
  17.   
  18. 平滑升級 
  19. kill - USER2  <pid>  
  20. 舊版本的nginx的主進程將重命名他的.pid文件爲.oldbin (例如:nginx.pid.oldbin), 
  21. 然後執行新版本的Nginx可執行程序,依次啓動新的主進程和新的工作進程。 
  22. 此時,新、舊版本的nginx實例會同時進行,共同處理輸入請求,要逐步停止舊版本的nginx實例 
  23. 你必須發送WINCH 信號給舊的主進程,然後,他的工作流程就將開始從容關閉。 
  24. kill -WINCH <舊版本nginx pid> 
  25. 一段時間後,舊的工作進程處理了所有已連接的請求後退出,僅由新的工作進程來處理輸入的請求了。 
  26. 如果在新舊進程同時存在時,你不想升級了,則可以Kill -QUIT 或者 kill - TERM 新的主進程號。 
  27. 在新的主進程退出後,舊的主進程會移除.oldbin前綴,恢復爲他的.pid文件,一切恢復如初。 
  28.   
  1. nginx常用配置參數解析
  2. # 使用的用戶和組 
  3. user  www www; 
  4. # 指定工作衍生進程數(一般等於CPU的總核數或總核數的兩倍,例如兩個四核CPU,則總核數爲8) 
  5. worker_processes 8; 
  6. # 指定錯誤日誌存放的路徑,錯誤日誌記錄級別可選項爲:[ debug | info | notice | warn | error | crit ]
  7. error_log  /data1/logs/nginx_error.log  crit; 
  8. # 指定 pid 存放的路徑 
  9. pid        /usr/local/webserver/nginx/nginx.pid; 
  10. # 指定文件描述符數量 
  11. worker_rlimit_nofile 51200; 
  12. # 使用的網絡I/O模型,Linux系統推薦採用epoll模型,FreeBSD系統推薦採用kqueue模型 
  13. use epoll; 
  14. # 允許的連接數 
  15. worker_connections 51200; 
  16. # 設置使用的字符集,如果一個網站有多種字符集,請不要隨便設置,應讓程序員在HTML代碼中通過Meta標籤設置 
  17. #charset  gb2312; 
  18. # 設置客戶端能夠上傳的文件大小 
  19. client_max_body_size 8m; 
  20. # 開啓gzip壓縮 
  21. gzip on; 
  22. #log_format 設置日誌記錄格式 
  23. $remote_addr $http_x_forwarded_for 用戶記錄IP地址 
  24. $remote_user記錄遠程客戶端用戶名稱 
  25. $time_local用戶記錄訪問時間與時區 
  26. $request用於記錄請求URL與HTTP協議 
  27. $status記錄請求狀態,例如200,404 
  28. $body_bytes_sent記錄發送給客戶端的文件主題內容大小 
  29. $http_referer記錄從哪個頁面鏈接訪問過來的 
  30. $http_user_agent 記錄客戶端瀏覽器相關信息 
  31. #access_log 設置訪問日誌格式 
  32. #在nginx0.7.4之後的版本中,access_log 指定中的日誌文件路徑可以包含變量,如:access_log /var/log/$server_name.log 
  33. 如果日誌文件路徑中包含變量,則有以下一些限制 
  34. 1.nginx進程設置的用戶和組必須對該路徑有創建文件的權限 
  35. 2.緩衝將不會被使用 
  36. 3.對於每一條日誌記錄,日誌文件都將先打開文件,再寫入日誌記錄,然後馬上關閉。爲了提高包含變量的日誌文件存放路徑的性能,須使用open_log_file_cache指令設置經常被使用的日誌文件描述符緩存。此選項默認是禁止的。 
  37. #nginx自動列目錄配置 
  38. autoindex on; 

 

  1. nginx服務器優化內核參數 
  2. vim /etc/sysctl.conf 
  3.  
  4. vi /etc/sysctl.conf 
  5. 在末尾增加以下內容: 
  6.  
  7. # Add  
  8. net.ipv4.tcp_max_syn_backlog = 65536  
  9. net.core.netdev_max_backlog =  32768  
  10. net.core.somaxconn = 32768  
  11. net.core.wmem_default = 8388608  
  12. net.core.rmem_default = 8388608  
  13. net.core.rmem_max = 16777216  
  14. net.core.wmem_max = 16777216  
  15. net.ipv4.tcp_timestamps = 0  
  16. net.ipv4.tcp_synack_retries = 2  
  17. net.ipv4.tcp_syn_retries = 2  
  18. net.ipv4.tcp_tw_recycle = 1  
  19. #net.ipv4.tcp_tw_len = 1  
  20. net.ipv4.tcp_tw_reuse = 1  
  21. net.ipv4.tcp_mem = 94500000 915000000 927000000  
  22. net.ipv4.tcp_max_orphans = 3276800  
  23. #net.ipv4.tcp_fin_timeout = 30  
  24. #net.ipv4.tcp_keepalive_time = 120  
  25. net.ipv4.ip_local_port_range = 1024  65535  
  26.    
  27. 使配置立即生效: 
  28. /sbin/sysctl -p 

 

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