- Nginx 能夠選擇高效的epoll(linux 2.6內核) 、kqueue(FreeBSD)、eventport(Solars10)
- 作爲網絡I/O模型而Apache使用的則是傳統的select模型,其比較穩定的Prefork模式爲多進程模式,
- 需要經常派生子進程,所消耗的CPU等服務器資源比Nginx高很多。
- nginx編譯容易混淆的幾個參數
- --sbin-path=<path>
- #nginx可執行文件安裝路徑。如沒指定,默認<prefix>/sbin/nginx
- --conf-path=<path>
- #在沒有給定-c選項默認的nginx.conf的路徑,默認<prefix>/conf/nginx.conf
- --error-log-path=<path>
- #在nginx.conf中沒有指定error_log指定的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認爲<prefix>/logs/error.log
- --http-log-path=<path>
- #在nginx.conf中沒有指定access_log指定的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認爲<prefix>/logs/access.log
- nginx的幾種停止,重啓,升級方式
- 從容停止
- kill - QUIT <pid>
- 快速停止
- kill - TERM <pid> 或 kill - INT <pid>
- 強制停止
- pkill -9 <pid>
- 重新打開日日誌文件,在切割日誌時用處很大
- kill - USER1 <pid>
- 平滑重啓
- kill -HUP <pid>
- 當Nginx接到HUP信號時,他會嘗試先解析配置文件(如果指定配置文件,就使用指定的,否則使用默認的)
- 如果成功,就應用新的配置文件(例如,重新打開日誌文件或監聽的套接字)。之後,Nginx運行新的進程。
- 通知工作進程關閉監聽套接字,但是繼續爲當前連接的客戶端提供服務。所有客戶端的服務完成後,
- 舊得工作進程被關閉。如果新的配置文件應用失敗,Nginx將繼續使用舊的配置進行工作
- 平滑升級
- kill - USER2 <pid>
- 舊版本的nginx的主進程將重命名他的.pid文件爲.oldbin (例如:nginx.pid.oldbin),
- 然後執行新版本的Nginx可執行程序,依次啓動新的主進程和新的工作進程。
- 此時,新、舊版本的nginx實例會同時進行,共同處理輸入請求,要逐步停止舊版本的nginx實例
- 你必須發送WINCH 信號給舊的主進程,然後,他的工作流程就將開始從容關閉。
- kill -WINCH <舊版本nginx pid>
- 一段時間後,舊的工作進程處理了所有已連接的請求後退出,僅由新的工作進程來處理輸入的請求了。
- 如果在新舊進程同時存在時,你不想升級了,則可以Kill -QUIT 或者 kill - TERM 新的主進程號。
- 在新的主進程退出後,舊的主進程會移除.oldbin前綴,恢復爲他的.pid文件,一切恢復如初。
- nginx常用配置參數解析
- # 使用的用戶和組
- user www www;
- # 指定工作衍生進程數(一般等於CPU的總核數或總核數的兩倍,例如兩個四核CPU,則總核數爲8)
- worker_processes 8;
- # 指定錯誤日誌存放的路徑,錯誤日誌記錄級別可選項爲:[ debug | info | notice | warn | error | crit ]
- error_log /data1/logs/nginx_error.log crit;
- # 指定 pid 存放的路徑
- pid /usr/local/webserver/nginx/nginx.pid;
- # 指定文件描述符數量
- worker_rlimit_nofile 51200;
- # 使用的網絡I/O模型,Linux系統推薦採用epoll模型,FreeBSD系統推薦採用kqueue模型
- use epoll;
- # 允許的連接數
- worker_connections 51200;
- # 設置使用的字符集,如果一個網站有多種字符集,請不要隨便設置,應讓程序員在HTML代碼中通過Meta標籤設置
- #charset gb2312;
- # 設置客戶端能夠上傳的文件大小
- client_max_body_size 8m;
- # 開啓gzip壓縮
- gzip on;
- #log_format 設置日誌記錄格式
- $remote_addr $http_x_forwarded_for 用戶記錄IP地址
- $remote_user記錄遠程客戶端用戶名稱
- $time_local用戶記錄訪問時間與時區
- $request用於記錄請求URL與HTTP協議
- $status記錄請求狀態,例如200,404
- $body_bytes_sent記錄發送給客戶端的文件主題內容大小
- $http_referer記錄從哪個頁面鏈接訪問過來的
- $http_user_agent 記錄客戶端瀏覽器相關信息
- #access_log 設置訪問日誌格式
- #在nginx0.7.4之後的版本中,access_log 指定中的日誌文件路徑可以包含變量,如:access_log /var/log/$server_name.log
- 如果日誌文件路徑中包含變量,則有以下一些限制
- 1.nginx進程設置的用戶和組必須對該路徑有創建文件的權限
- 2.緩衝將不會被使用
- 3.對於每一條日誌記錄,日誌文件都將先打開文件,再寫入日誌記錄,然後馬上關閉。爲了提高包含變量的日誌文件存放路徑的性能,須使用open_log_file_cache指令設置經常被使用的日誌文件描述符緩存。此選項默認是禁止的。
- #nginx自動列目錄配置
- autoindex on;
- nginx服務器優化內核參數
- vim /etc/sysctl.conf
- vi /etc/sysctl.conf
- 在末尾增加以下內容:
- # Add
- net.ipv4.tcp_max_syn_backlog = 65536
- net.core.netdev_max_backlog = 32768
- net.core.somaxconn = 32768
- net.core.wmem_default = 8388608
- net.core.rmem_default = 8388608
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_timestamps = 0
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
- net.ipv4.tcp_tw_recycle = 1
- #net.ipv4.tcp_tw_len = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_mem = 94500000 915000000 927000000
- net.ipv4.tcp_max_orphans = 3276800
- #net.ipv4.tcp_fin_timeout = 30
- #net.ipv4.tcp_keepalive_time = 120
- net.ipv4.ip_local_port_range = 1024 65535
- 使配置立即生效:
- /sbin/sysctl -p