基本配置如下:
user www www;worker_processes auto; #一般默认为1,也可以为cpu数量,或者auto,自动调整#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid; error_log /data/logs/error_nginx.log error;pid /var/run/nginx.pid;worker_rlimit_nofile 51200; #这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535
events { use epoll; #使用的网络io模型,Linux默认用epoll,FreeBSD推荐用kqueue worker_connections 51200; #每个工作进程允许同时连接的最大数量,(nginx最大的连接数:Maxclient = work_processes * worker_connections) multi_accept on; #如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量}http { include mime.types; ##文件扩展名与文件类型映射表 default_type application/octet-stream; #这个类型会让浏览器认为响应是普通的文件流,并提示用户下载文件log_format log_json '{"time_local":"$time_local",' '"@timestamp": "$time_iso8601",' '"domain":"$host",' '"server_addr":"$server_addr",' '"http_x_forwarded_for":"$http_x_forwarded_for",' '"remote_addr":"$remote_addr",' '"request_method":"$request_method",' '"user_agent":"$http_user_agent",' '"request_uri":"$request_uri",' '"http_referer":"$http_referer",' '"size":$body_bytes_sent,' '"request_time":$request_time,' '"upstream_addr":"$upstream_addr",' '"upstream_response_time":"$upstream_response_time",' '"upstream_status":"$upstream_status",' '"upstream_connect_time":"$upstream_connect_time",' '"scheme":"$scheme",' '"status":$status}'; access_log /data/logs/access_nginx.log log_json; server_names_hash_bucket_size 128; #服务器名字的hash表大小,server_name参数后面跟的域名数量大小限制 client_header_buffer_size 32k; #此指令与client_body_buffer_size类似。 它为请求头分配一个缓冲区。 如果请求头大小大于指定的缓冲区,则使用large_client_header_buffers指令分配更大的缓冲区 large_client_header_buffers 4 32k; #用来指定客户端请求中较大的消息头的缓存最大数量和大小,“4”为个数,“128”为大小,最大缓存为4个32KB。这些缓冲区仅在缺省缓冲区不足时按需分配。 当处理请求或连接转换到保持活动状态时,释放缓冲区 client_max_body_size 1024m; #此指令设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413(Request Entity too large)错误。 如果服务器处理大文件上传,则该指令非常重要。默认情况下,该指令值为1m client_body_buffer_size 10m; #Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中,在哪个临时文件中呢? client_body_temp 指定的路径中,默认该路径值是/tmp/.所以配置的client_body_temp地址,一定让执行的Nginx的用户组有读写权限。否则,当传输的数据大于client_body_buffer_size,写进临时文件失败会报错。 sendfile on; #开启高效文件传输模式,将tcp_nopush和tcp_nodely两个指令设置为on,用于防止网络阻塞 tcp_nopush on; #防止网络阻塞 tcp_nodelay on; #防止网络阻塞 keepalive_timeout 120; #一个http产生的tcp连接在传送完最后一个响应后,经过多少秒后才开始关闭这个连接 server_tokens off; #修改或隐藏Nginx的版本号 fastcgi_connect_timeout 300; #指定连接到后端FastCGI的超时时间,FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等 fastcgi_send_timeout 300; #向fastCGI请求的超时时间,这个值是指已经完成两次握手后向fastCGI传送的超时时间 fastcgi_read_timeout 300; #接收fastCGI应答的超时时间,这个值已经完成两次握手后接收fastCGI应答的超时时间 fastcgi_buffer_size 64k; #指定读取fastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,一般设置为64k fastcgi_buffers 8 128k; #指定本地需要用多少和多大的缓冲区来缓冲fastCGI的应答 fastcgi_busy_buffers_size 128k; #默认值是fastcgi_buffers的两倍 fastcgi_temp_file_write_size 128k; #在写入fastcgi_temp_path是用多大的数据块,默认值是fastcgi_buffers两倍 fastcgi_intercept_errors on; #这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。 #Gzip Compression vhost_traffic_status_zone; gzip on; #开启gzip压缩输出 gzip_buffers 16 8k; #表示申请16个单位为8k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果 gzip_comp_level 6; #压缩等级,设置gzip的压缩级别,取值[1-9],数值越大压缩率越高,压缩时消耗的资源越多,通常合理取值是3-5 gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_min_length 256; #用于设置允许压缩的页面最小字节数,页面字节数从header头的content-length中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1k的字节数,小于1k可能会越压越大最小压缩文件大小 gzip_proxied any;
Nginx作为反向代理的时候启用,根据某些请求和应答来决定是否在对代理请求的应答启用gzip压缩,是否压缩取决于请求头中的“Via”字段,指令中可以同时指定多个不同的参数,意义如下: expired - 启用压缩,如果header头中包含 "Expires" 头信息 no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息 no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息 private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息 no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息 no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息 auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息 any - 无条件启用压缩 |
gzip_vary on; #可让前端的缓存服务器缓存经过gzip压缩的页面,例如,用squid缓存经过nginx压缩的数据 gzip_types text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype application/x-font-ttf application/vnd.ms-fontobject image/x-icon; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #IE6对Gzip不怎么友好,不给它Gzip了 #If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency. open_file_cache max=1000 inactive=20s; #为1,000个元素定义了一个缓存。 inactive参数配置到期时间为20秒。 没有必要为该指令设置非活动时间段,默认情况下,非活动时间段为60秒。
启用此指令将存储以下信息的缓存:
|
open_file_cache_valid 30s; #指令定义时间段(以秒为单位),之后将重新验证open_file_cache中的元素。默认情况下,60秒后重新检查元素 open_file_cache_min_uses 2; #NGINX将在非活动时间段之后从高速缓存中清除元素。 此指令可用于配置最小访问次数以将元素标记为活动使用。 默认情况下,最小访问次数设置为1次或更多次 open_file_cache_errors on; #NGINX可以缓存在文件访问期间发生的错误。但是这需要通过设置open_file_cache_errors指令来启用。 如果启用错误缓存,则在访问资源(不查找资源)时,NGINX会报告相同的错误。默认情况下,错误缓存设置为关闭。
######################## default ############################添加hosts后访问一个不存在的域名会显示default页面 server { listen 10080; listen 80; server_name _; access_log /data/logs/default_access_nginx.log log_json; root /usr/local/nginx/html; index index.html index.htm index.php; location / { default_type text/html ; expires 7d; return 200 'hello world!!!'; #频繁访问时返回设置值 } location /nginx_status { #nginx状态监控 stub_status on; access_log off; allow 127.0.0.1; deny all; }# location ~ [^/]\.php(/|$) {# #fastcgi_pass remote_php_ip:9000;# fastcgi_pass unix:/dev/shm/php-cgi.sock;# fastcgi_index index.php;# include fastcgi.conf;# } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { expires 30d; access_log off; } location ~ .*\.(js|css)?$ { expires 7d; access_log off; } location ~ /\.ht { deny all; } location /vt_status { #流量统计,有页面 vhost_traffic_status_display; vhost_traffic_status_display_format html; allow 127.0.0.1; allow 10.0.0.0/8; deny all; } }########################## vhost #############################引入其他文件,分开写利于维护 include vhost/*.conf; include vhost/internal/*.conf; include upstream/*.conf;} 日志格式:
{"time_local":"22/Jul/2019:03:42:58 +0800","@timestamp": "2019-07-22T03:42:58+08:00","domain":"www.baidu.com","server_addr":"xx.xx.x.x","http_x_forwarded_for":"-","remote_addr":"10.23.10.28","request_method":"GET","user_agent":"curl/7.29.0","request_uri":"/idfd/v1/server/live","http_referer":"-","size":17,"request_time":0.011,"upstream_addr":"10.10.31.73:8081","upstream_response_time":"0.011","upstream_status":"200","upstream_connect_time":"0.001","scheme":"http","status":200}