1. 程式人生 > >nginx配置與效能調優

nginx配置與效能調優

nginx的配置檔案

    首先,我的nginx是原始碼編譯的,版本是官網是提供的穩定版1.12.0、根據的我編譯選項,配置檔案被我編譯到/etc/nginx目錄下。

[[email protected] log]# nginx -V
nginx version: nginx/1.12.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx 
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid 
--lock-path=/var/lock/nginx.lock --user=nginx --group=nginx 
--with-http_ssl_module --with-http_flv_module --with-http_stub_status_module
--with-http_gzip_static_module --with-pcre --add-module=/opt/rds-json-nginx-module
--add-module=/opt/lua-nginx-module --add-module=/opt/memc-nginx-module
--http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy 
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
--http-scgi-temp-path=/var/tmp/nginx/scgi --without-select_module

以上是我學習時編譯的nginx引數。(只是學習時用。。。)

配置檔案在/etc/nginx目錄下,其中的每一個配置檔案都提供了備份。

首先/etc/nginx/nginx.conf 是主配置檔案。

配置檔案一共分為了很多塊。

1.全域性塊

內容: 執行nginx的使用者組,允許生成的process數,nginx程序pid的路徑,日誌的存放路徑等等。

2.events 塊

內容:nginx伺服器與使用者的網路連線,worker process 下的網路連線序列化,是否允許同時接受多個網路連線,選取哪種事件驅動模型,每個worker process可以同時支援的最大連線數。

3.http塊

內容:檔案引入,MIME-Type定義,日誌自定義,是否使用sendfile傳輸檔案,連線超時時間,單個連線請求數上限。

4.server塊

內容:類似於虛擬主機

5.location塊

內容:具體定義頁面

下面重點說一下我的nginx的各個塊的配置。

全域性塊:

daemon off;
user  nginx nginx;
worker_processes  1;
worker_cpu_affinity 0001;

error_log  /var/log/nginx/error.log;
error_log  /var/log/nginx/error.log  notice;
error_log  /var/log/nginx/error.log  info;

pid         /var/run/nginx/nginx.pid;

這個是我的全域性塊:

因為是執行在docker容器裡的,所以daemon off 這個不用管,是不以守護程序的方式執行。

user :指明瞭可以執行nginx伺服器的使用者是。

worker process:啟動的worker程序數量。


這裡需要說一下nginx的執行過程

管理員發出訊號,給nginx的master程序。master程序複製啟動,終止,維護,監控程序。而worker程序才真正的去處理客戶端的請求。


這裡的worker程序最好和CPU的核數一樣,而worker_cpu_affinity是為每一個程序分配CPU的工作核心。

error.log:和普通的日誌一樣有分級【debug|info|notice|warn|error|crit|alert|emerg】

這是我的events塊:

event 塊:

events {
    accept_mutex on;
    multi_accept on;
    use epoll;
    worker_connections  1024;
}


accept_mutex:在《UNIX網路程式設計》裡提到了一個“驚群”問題,就是當某一時刻只有一個網路連線到來的時,多個睡眠程序都會被同時叫醒。如果每次都喚醒很多程序,會很影響系統性能的。而該選項被開啟後會將多個nginx的程序接收連線進行序列化,防止多個程序對連線的爭搶。

multi_accept:開啟後會允許nginx去一次性同時去接收多個新到達的網路連線。

use epoll:epoll模型,非同步非阻塞。十分高效,邊沿觸發的ET。

worker_connections:主要設定允許每一個worker_process的最大連線數。

這是我的http塊:

http塊:
http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format logstash_json '{ "@timestamp": "$time_local", '
                             '"@fields": { '
                             '"remote_addr": "$remote_addr", '
                             '"remote_user": "$remote_user", '
                             '"body_bytes_sent": "$body_bytes_sent", '
                             '"request_time": "$request_time", '
                             '"status": "$status", '
                             '"request": "$request", '
                             '"request_method": "$request_method", '
                             '"http_referrer": "$http_referer", '
                             '"body_bytes_sent":"$body_bytes_sent", '
                             '"http_x_forwarded_for": "$http_x_forwarded_for", '
                             '"http_user_agent": "$http_user_agent" } }';

    access_log  /var/log/nginx/access.log  logstash_json;

    sendfile       on;  
    sendfile_max_chunk 128k;

    tcp_nopush     on;
    tcp_nodelay    on;

    keepalive_timeout  65;

    gzip  on;
    gzip_min_length  1024;
    gzip_buffers 4 16k;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;

include mime.types:支援的mime型別,這沒啥說的,看看都有什麼型別的mime吧
log_format:這個是訪問日誌的格式。而我定義的是json格式,目的是為了以後的日誌收集更方便。還有就是美觀啊!該日誌會記錄每一條的訪問記錄。
{
	"@timestamp": "25/May/2017:07:18:29 +0000",
	"@fields": {
		"remote_addr": "192.168.30.1",
		"remote_user": "-",
		"body_bytes_sent": "0",
		"request_time": "0.000",
		"status": "304",
		"request": "GET / HTTP/1.1",
		"request_method": "GET",
		"http_referrer": "-",
		"body_bytes_sent": "0",
		"http_x_forwarded_for": "-",
		"http_user_agent": "Mozilla/5.0 (Linux; U; Android 7.0; zh-cn; MI 5 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/8.7.8"
	}
}


sendfile:開啟高效的檔案傳輸方式。 sendfile_max_chunk:傳輸的資料量最大的不能超過的值。 tcp_nopush:在網路連線中,資料量很小的話, 就不著急傳送資料 tcp_nodelay:在網路連線中,先不著急傳送資料,等待資料量稍微大一點再發送資料。 keepalive_timeout伺服器對連線保持65s。 keepalive_requests:用於限制使用者想nginx伺服器傳送請求的次數。 gzip:開啟gzip壓縮 gzip_min_length響應頁面資料的上限
gzip_buffers:快取空間大小 gzip_comp_level:壓縮級別 gzip_types:壓縮檔案的型別
gzip_vary:啟用壓縮標識
server_tokens    off:404錯誤頁面時,不顯示詳細的錯誤資訊。 在配置上就說這麼多,剩下的配置在後面去講解。


針對nginx伺服器的配置優化

針對nginx的網路方面的優化:
1.net.core.somaxconn = 20000 該引數用於調整系統可以同時發起的TCP連線數,預設為128.當存在高併發場景下,可能會導致連結超時或者重傳的問題。 2.net.core.netdev_max_backlog = 20000 該引數用於限制TCP的傳送佇列的大小 3.net.ipv4.tcp_max_orphans = 16384 該引數是最大允許多少個沒有被關聯在使用者檔案控制代碼上的tcp套接字,主要是為了抵禦DDOS攻擊。如果記憶體小就把該值設定的小一點。 4.net.ipv4.tcp_max_syn_backlog = 128 該值是記錄尚未接收到客戶端的連線請求確認的最大值。 針對檔案的優化: 1.fs.file-max = 378900
系統的所有程序一共可以開啟的檔案數 當然針對檔案的開啟的數量限制還需要單獨限制一下程序所開啟的數量,而不是總的開啟數量。 那麼就使用ulimit來做一些限制吧。 2.ulimit -n 36000 當然想要永久的更改在/etc/security/limits.conf * soft nofile = 32768
* hard nofile = 65536

與事件驅動相關的配置指令: 1.worker_rlimit_sigpending   1024;   <nginx的配置檔案中> nginx伺服器的每一個程序擁有的事件訊號佇列用於暫存客戶端請求的發生訊號。而這個值就是佇列長度

相關推薦

nginx配置效能調

nginx的配置檔案     首先,我的nginx是原始碼編譯的,版本是官網是提供的穩定版1.12.0、根據的我編譯選項,配置檔案被我編譯到/etc/nginx目錄下。 [[email p

nginx監控效能調

監控 nginx有自帶的監控模組,編譯nginx的時候,加上引數 --with-http_stub_status_module #配置指令 ./configure --prefix=/usr/local --user=nginx --group=nginx

深入理解Java虛擬機器總結一虛擬機器效能監控工具效能調(三)

深入理解Java虛擬機器總結一虛擬機器效能監控工具與效能調優(三) JDK的命令列工具 JDK的視覺化工具 效能調優 JDK的命令列工具 主要有以下幾種: jps (Java Process Status Tool): 虛擬機器程序

Redis 基礎、高階特性效能調

本文將從Redis的基本特性入手,通過講述Redis的資料結構和主要命令對Redis的基本能力進行直觀介紹。之後概覽Redis提供的高階能力,並在部署、維護、效能調優等多個方面進行更深入的介紹和指導。 本文適合使用Redis的普通開發人員,以及對Redis進行選型、架構設計和效能調優的架構設計人員。 &n

Redis基礎、高階特性效能調

本文將從Redis的基本特性入手,通過講述Redis的資料結構和主要命令對Redis的基本能力進行直觀介紹。之後概覽Redis提供的高階能力,並在部署、維護、效能調優等多個方面進行更深入的介紹和指導。 本文適合使用Redis的普通開發人員,以及對Redis進行選型、

JVM垃圾回收效能調

一、JVM記憶體結構 圖片來源於網路   1、方法區  方法區用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯後的程式碼等資料,描述為堆的一個邏輯部分,稱為非堆(HotSpot中也稱為永久代)

Yarn 記憶體分配管理機制及相關引數配置(yarn效能調)

一、相關配置情況關於Yarn記憶體分配與管理,主要涉及到了ResourceManage、ApplicationMatser、NodeManager這幾個概念,相關的優化也要緊緊圍繞著這幾方面來開展。這裡還有一個Container的概念,現在可以先把它理解為執行map/redu

Spark商業案例效能調實戰100課》第3課:商業案例之通過RDD分析大資料電影點評系各種型別的最喜愛電影TopN及效能優化技巧

Spark商業案例與效能調優實戰100課》第3課:商業案例之通過RDD分析大資料電影點評系各種型別的最喜愛電影TopN及效能優化技 原始碼 package com.dt.spark.core

介面測試流程效能調

1.介面效能測試流程1-5是效能流程1.接到需求,先把介面功能調通 引數化(常用的引數化方法),關聯(正則表示式),檢查點(我們要檢查哪些),看需不需要集合,如果這個介面依賴上一個介面,那麼這個需要用到引數的傳遞,看介面需不需要用到cookie session等,請求頭等2.

Tomcat-Jdbc-Pool配置效能調

1. maxActive="100"表示併發情況下最大可從連線池中獲取的連線數。 2、maxIdle="30"如果在併發時達到了maxActive=100,那麼連線池就必須從資料庫中獲取100個連線來供應用程式使用,當應用程式關閉連線後,由於maxIdle=30,因此並不是

redis基礎、高階特性效能調(轉)

本文將從Redis的基本特性入手,通過講述Redis的資料結構和主要命令對Redis的基本能力進行直觀介紹。之後概覽Redis提供的高階能力,並在部署、維護、效能調優等多個方面進行更深入的介紹和指導。本文適合使用Redis的普通開發人員,以及對Redis進行選型、架構設計和效能調優的架構設計人員。目錄概述Re

Cloudera Hadoop運維管理效能調

效能調優之於Hadoop來說無異於打通任督二脈,對於Hadoop的計算能力會有質的的提升,而運維之於Hadoop來說,就好像金鐘罩、鐵布衫一般,有了穩定的運維,Hadoop才能在海量資料之中大展拳腳,兩者相輔相成,缺一不可。 總體來說,Hadoop運維維度取決於Had

高薪必備|Redis 基礎、高階特性效能調

開發十年,就只剩下這套架構體系了! >>>   

效能測試分析效能調診斷--史上最全的伺服器效能分析監控調

 一個系統或者網站在功能開發完成後一般最終都需要部署到伺服器上執行,那麼伺服器的效能監控和分析就顯得非常重要了,選用什麼配置的伺服器、如何對伺服器進行調優、如何從伺服器監控中發現程式的效能問題、如何判斷伺服器的瓶頸在哪裡等 就成為了伺服器效能監控和分析時重點需要去解決的問題了。  本文章節

鯤鵬效能優化十板斧——鯤鵬處理器NUMA簡介效能調五步法

1.1 鯤鵬處理器NUMA簡介 隨著現代社會資訊化、智慧化的飛速發展,越來越多的裝置接入網際網路、物聯網、車聯網,從而催生了龐大的計算需求。但是功耗牆問題以功耗和冷卻兩大限制極大的影響了單核算力的發展。為了滿足智慧世界快速增長的算力需求,多核架構成為最重要的演進方向。 傳統的多核方案採用的是SMP(

Elasticsearch原理解析效能調

## 基本概念 ### 定義 - 一個分散式的實時文件儲存,*每個欄位* 可以被索引與搜尋 - 一個分散式實時分析搜尋引擎 - 能勝任上百個服務節點的擴充套件,並支援 PB 級別的結構化或者非結構化資料 ### 用途 - 全文檢索 - 結構化搜尋 - 分析 ### VS傳統資料庫 - 傳統資料庫

NginxTomcat效能調,前後端KeepAlive不同步引發的問題

在http1.1中可以配置伺服器端開啟keepalive與客戶端保持長連線進行優化,這裡不過多解釋。 我們在nginx.conf配置 upstream favtomcat { server 192.168.80.112:8080;

Nginx 下部署 HTTPS 安全調

quest tro efault attribute you attr inf [] validate 什麽是 HTTPS?# HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的

Tomcat效能調以及遠端管理(Tomcat managerpsi-probe監控)

tomcat優化的我用到的幾個點: 1.記憶體優化 2.執行緒優化 docs/config/http.html maxConnections acceptCount(配置的太大是沒有意義的) maxThreads minSpareThreads 最小空閒的工作

Nginx效能調之快取記憶體

Nginx可以快取一些檔案(一般是靜態檔案),減少Nginx與後端伺服器的IO,提高使用者訪問速度。而且當後端伺服器宕機時,Nginx伺服器能給出相應的快取檔案響應相關的使用者請求。 一 Nginx靜態快取基本配置 在tomcat的webapps目錄下建立hello.html,內容