nginx.conf配置文件相关参数:
user nginx; #用户
worker_processes auto; #根据cpu核数配置
worker_cpu_affinity auto; #CPU亲和
worker_rlimit_nofile 65535; #一般不需要这么大
error_log /var/log/nginx/error.log warn; #错误日志
pid /var/run/nginx.pid;
include /usr/share/nginx/modules/*.conf; #注意有些需要添加
events {
use epoll; #网络io模型
worker_connections 65535 ;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset utf-8; # 统一使用utf-8字符集
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #日志
sendfile on;
tcp_nopush on;
keepalive_timeout 120; #请求完成之后还要保持连接时间
tcp_nodelay on;
client_body_buffer_size 50M; #客户端请求服务器最大允许大小
proxy_connect_timeout 240; #设置代理连接超时时间
proxy_read_timeout 240; #设置从代理服务器读取响应的超时时间
proxy_send_timeout 240; #设置向代理服务器发送请求的超时时间
proxy_buffer_size 50M;
#设置用于读取从代理服务器接收的响应的第一部分的缓冲区的大小。
proxy_buffers 4 50M;
#设置用于从代理服务器读取响应的缓冲区的数量和大小,用于单个连接
proxy_busy_buffers_size 50M;
#设置当启用来自代理服务器的响应缓冲时,
#限制可能忙于向响应客户端发送响应的缓冲区的总大小,而响应尚未完全读取。
proxy_temp_file_write_size 50M;
#设置当启用来自代理服务器的响应缓冲,
#并且整个响应不适合proxy_buffer_size和proxy_buffers指令设置的缓冲区时,
#响应的一部分可以保存到临时文件中。 该指令设置临时文件的最大大小,
#一次写入临时文件的数据大小由proxy_temp_file_write_size指令设置。
gzip on; #开启gzip
gzip_min_length 1k;#
#设置允许压缩的页面最小字节,建议大于1K
gzip_buffers 4 16k;
#以16k为单位,按照原始数据大小以16k为单位的4倍申请内存
gzip_http_version 1.1;
#识别http协议的版本,早期浏览器可能不支持gzip自解压,用户会看到乱码
gzip_comp_level 2;
#压缩机别,等级1-9 最小的压缩最快 但是消耗cpu
gzip_types text/plain application/x-javascript text/css application/xml;
#匹配压缩类型
gzip_vary on;
#启用应答头"Vary: Accept-Encoding"
log_format min #定义日志格式,收集日志信息
'$remote_addr [$time_local]'
'$body_bytes_sent'
'$request_time'
'$status'
'"$request"'
'"$http_referer"'
'"$http_x_forwarded_for"'
'$upstream_addr'
'$upstream_status'
'$upstream_response_time'
'$http_user_agent';
log_format json #定义日志格式,收集日志信息
'{"@timestamp":"$time_iso8601",'
'"slbip":"$remote_addr",'
'"clientip":"$http_x_forwarded_for",'
'"serverip":"$server_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"host":"$host",'
'"method":"$request_method",'
'"requesturi":"$request_uri",'
'"url":"$uri",'
'"upstream_addr":"$upstream_addr",'
'"upstream_status":"$upstream_status",'
'"upstream_cache_status":"$upstream_cache_status",'
'"upstream_response_time":"$upstream_response_time",'
'"appversion":"$HTTP_APP_VERSION",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status",'
'"devicecode":"$HTTP_HA"}';
proxy_temp_path /data/cache/proxy_temp_dir;
proxy_cache_path /data/cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:1024m inactive=1d max_size=10g;
#添加缓存,proxy_temp_path和proxy_cache_path指定的路径必须在同一分区。
#levels=1:2 缓存级别、1:2缓存两层目录
#keys_zone=cache_one 配置keys_zone名称,可自定义,分配1024m大小。
#max_size=10g 缓存最大10G,inactive=1d 超过1天没被访问将会剔除掉
#use_temp_path=off 关闭生成temp的缓存,对应proxy_temp_path路径
limit_conn_zone $binary_remote_addr zone=one:100m;
#解释内容如下:
#要限制连接,必须先有一个容器对连接进行计数,在http段加入如下代码:
#"zone=" 给它一个名字,可以随便叫,这个名字要和server里的配置 limit_conn 一致
#$binary_remote_addr = 用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话。
#$binary_remote_addr是限制同一客户端ip地址;
include /etc/nginx/conf.d/*.conf;
}
proxy_params 代理配置,有时会缺少此文件。
vim /etc/nginx/proxy_params
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#上面几行最重要
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
示例
其中日志格式min和json使用方法:
server{
listen 80;
server_name test.test.com;
#access_log logs/proxy_access.log min; #路径/etc/nginx/log/,也可以自定义日志保存路径
access_log logs/proxy_access_js.log json;
location / {
index index.html;
root /data/code;
}
}
其中nginx缓存使用方法:
在server加入以下代码
设置名称为cache_one,内存缓存空间大小为1G,
30天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
location / {
proxy_cache cache_one; #cache_one对应ng配置的keys_zone
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
expires 30d;
}
其中limit_conn_zone使用方法:
server{
listen 80;
server_name test.test.com;
root /data/code;
index index.html;
location / {
index index.html;
}
location /download/ {
limit_conn one 1;
#限制每个IP只能发起1个连接(one 要跟limit_conn_zone 的变量对应)
limit_rate 50k;
#是对每个连接限速50k。这里是对连接限速,而不是对IP限速!
#如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate*2
}
}