3. nginx配置文件详解
配置文件详解
user nginx;
worker_processes 8;
worker_cpu_affinity auto;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
error_log /var/log/nginx/error.log error;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 20480;
}
http {
include mime.types;
default_type application/octet-stream;
log_format prod '$remote_addr|$remote_user|[$time_local]|$request|'
'$status|$body_bytes_sent|$http_referer|'
'$http_user_agent|$request_time|$host|$upstream_addr|$upstream_response_time';
access_log /var/log/nginx/access.log prod;
charset utf-8;
fastcgi_intercept_errors on;
server_names_hash_bucket_size 256;
client_header_buffer_size 32k;
large_client_header_buffers 4 128k;
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#支持ssi包含文件
ssi on;
ssi_silent_errors on;
# ssi_types text/html;
keepalive_timeout 90;
client_header_timeout 10;
client_body_timeout 20;
client_max_body_size 200m;
client_body_buffer_size 128k;
# include /etc/nginx/gzip.conf;
gzip on;
gzip_buffers 4 8k;
gzip_comp_level 6;
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;
gzip_min_length 1000;
gzip_proxied any;
gzip_vary on;
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json image/jpeg image/gif image/png image/jpg;
# include /etc/nginx/proxy.conf;
proxy_connect_timeout 90;
proxy_read_timeout 90;
proxy_send_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
# include /etc/nginx/backend.conf;
upstream my_server_pool {
server 192.168.1.109:80 weight=1 max_fails=2 fail_timeout=30;
server 192.168.1.108:80 weight=2 max_fails=2 fail_timeout=30;
}
include /etc/nginx/conf.d/h5.conf;
}
1 样例文件解释
http {
# 引入文件 mime.types,是一个文件扩展名与文件类型的映射表
include mime.types;
# 指定默认MIME类型为二进制字节流(即下载文件)
default_type application/octet-stream;
# 定义输出日志的格式
# 1.$remote_addr 与$http_x_forwarded_for(反向代理服务器) 用以记录客户端的ip地址;
# 2.$remote_user :用来记录客户端用户名称;
# 3.$time_local :用来记录访问时间与时区;
# 4.$request :用来记录请求的url与http协议
# 5.$status :用来记录请求状态;
# 6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
# 7.$http_referer :用来记录从那个页面链接访问过来的;
# 8.$http_user_agent :记录客户端浏览器的相关信息
# 9.$request_time :整个请求的总时间
# 10.$host变量的值按照如下优先级获得:请求行中的host.请求头中的Host头部.与一条请求匹配的server name.
# 11.$upstream_addr :后台upstream的地址,即真正提供服务的主机地址,如10.10.10.100:80
# 12.$upstream_response_time :请求过程中,upstream响应时间
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format prod '$remote_addr|$remote_user|[$time_local]|$request|'
'$status|$body_bytes_sent|$http_referer|'
'$http_user_agent|$request_time|$host|$upstream_addr|$upstream_response_time';
# 指定access_log的存放路径、格式和缓存大小
access_log /var/log/nginx/access.log prod;
# 指定编码格式,若网页格式与此不同,将被自动转码
charset utf-8;
# 允许nginx使用error_page处理错误信息,传递4xx和5xx错误信息到客户端
fastcgi_intercept_errors on;
server_names_hash_bucket_size 256;
client_header_buffer_size 32k;
large_client_header_buffers 4 128k;
#定义白名单ip列表变量
geo $whiteip_list {
default 1;
127.0.0.1 0;
192.168.0.167 0;
192.168.0.48 0;
}
#用map指令映射将白名单列表中客户端请求ip为空串
map $whiteip_list $limit {
1 $binary_remote_addr;
0 "";
}
#当某个IP访问example.com这个域名时,此IP得并发连接超过10,则会报503(Service Temporarily Unavailable),
#表示服务暂时不可用,此时会返回给用户我们事先定义好错误页面。由“limit_conn conn_ip 10;”实现。
limit_conn_zone $limit zone=conn_ip:10m;
#当访问example.com这个域名的连接总数超过1000时,同样会报503,返回定义好的错误页面。
#由“limit_conn conn_server 1000;”实现
limit_conn_zone $limit zone=conn_server:10m;
#当达到最大限制连接数后,记录日志的等级
limit_conn_log_level info; #[info | notice | warn | error(默认)]
#当超过限制时,返回的状态码(默认是503),code值只能设置在400到599之间
limit_conn_status 503;
#利用令牌桶原理,来限制用户的连接频率
#rate每个IP平均处理的请求频率为每秒一次,此值可以设置成每秒处理请求数或者每分钟处理请求数,但必须是整数。
#所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 “30r/m”。
limit_req_zone $limit zone=req_ip:10m rate=10r/s;
# 用户认证
# yum install httpd-tools #适用centos
# sudo apt-get install apache2-utils #适用ubuntu
# 生成用户密码文件
# htpasswd -c /data/.htpasswd user1
auth_basic "User Login";
auth_basic_user_file /data/.htpasswd;
# 隐藏nginx版本号
server_tokens off;
# sendfile 指令用于指定 Nginx 是否调用Linux 的 sendfile 函数(zero copy 方式)来输出文件,提高文件传输效率
sendfile on;
# 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。就是说数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。
tcp_nopush on;
# 不缓存data-sends(关闭 Nagle 算法),这个能够提高高频发送小数据报文的实时性
tcp_nodelay on;
#支持ssi包含文件
ssi on;
ssi_silent_errors on;
# ssi_types text/html;
# 启用目录浏览
# autoindex on;
# 显示出文件的确切/大概大小:on确切大小,单位是bytes;off大概大小,单位是kB或者MB或者GB
# autoindex_exact_size off;
# off显示的文件时间为GMT时间,on显示的文件时间为文件的服务器时间
# autoindex_localtime on;
# 指定客户端连接保持活动的超时时间(单位:秒),超过时间,服务器会关闭连接,太短或者太长都不一定合适,当然,最好是根据业务自身的情况来动态地调整该参数
keepalive_timeout 90;
# 客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。
client_header_timeout 10;
# 指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。
client_body_timeout 20;
# 客户端请求单个文件的最大字节数,这个参数的设置限制了上传文件的大小。
client_max_body_size 200m;
# 当客户端以POST方法提交一些数据到服务端时,会先写入到client_body_buffer中,如果buffer写满会写到临时文件里,建议调整为128k
client_body_buffer_size 128k;
#利用令牌桶原理,来限制用户的连接频率
#rate每个IP平均处理的请求频率为每秒一次,此值可以设置成每秒处理请求数或者每分钟处理请求数,但必须是整数。
#所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 “30r/m”。
limit_req_zone $binary_remote_addr zone=one:10m rate=10000r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
# include /etc/nginx/gzip.conf;
gzip on;
gzip_buffers 4 8k;