nginx配置文件分为4个部分:main(全局配置),server(主机配置),upstream(负载均衡服务器配置)和location(URL匹配特定位置的设置)。其中,main部分的设置将会影响其他所有的设置,server部分的资料主要用于指定主机和端口。upstream指定主要用于负载均衡,设置一系列的后端服务器,location部分主要用于匹配网页位置。四者的关系如下:server继承main,location继承server,upstream既不继承其他设置,也不被设置所继承。
参考:
www.linuxidc.com
main:常用的定义项
user nobody;
定义工作进程使用的user和group身份。 如果省略group,nginx会使用与user相同的组名。
worker_processes 4;
定义工作进程的数量。
worker_cpu_affinity 0001 0010 0100 1000;
将每个工作进程分别绑定至不同的CPU
error_log logs/error.log error;
第一个参数定义了存放日志的文件,第二个参数定义日志级别。
pid logs/nginx.pid;
定义存储nginx主进程ID的file
worker_rlimit_nofile 40960;
修改工作进程的打开文件数的最大值限制(RLIMIT_NOFILE),用于在不重启主进程的情况下增大该限制。
events:常用的定义项
worker_connections 10240;
设置每个工作进程可以打开的最大并发连接数。
https:常用的定义项
default_type application/octet-stream;
定义响应的默认MIME类型。
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for" "$upstream_response_time"‘;
指定日志的格式。$remote_addr:客户端的IP $remote_user: 客户端用户名称 $time_local:访问时间和时区 $request:请求的URI和HTTP协议 $status:HTTP请求状态 $body_bytes_sent:发送给客户端文件内容大小 $http_referer:url跳转来源 $http_user_agent:用户终端浏览器等信息 $http_x_forwarded_for: 客户端的真实IP $upstream_response_time:请求过程中,upstream响应时间.
access_log off;
关闭访问日志
server_tokens off;
是否在错误页面或者服务器Hearder头中输出Nginx的版本号给客户端览器
server_info off;
是否在错误页面显示URL、服务器名称和出错时间
server_tag off;
自定义设置HTTP响应的server头,‘off’可以禁止返回server头。如果什么都不设置,就是返回默认Nginx的标识
sendfile off;
禁用sendfile()函数(sendfile()函数是高效的用于数据拷贝在两个文件描述符之间的操作函数)
tcp_nodelay on;
使用套接字选项TCP_NODELAY,仅适用于keep-alive链接
keepalive_timeout 5;
设置keepalive链接超时时间(s)
gzip on;
开启或者关闭gzip模块
gzip_min_length 1k;
设置允许压缩的页面最小字节数(默认值0)
gzip_buffers 4 16k;
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流(4 16k:代表以16k为单位,按照原始数据大小以16k为单位的4倍申请内存)
gzip_http_version 1.1;
识别http的协议版本号
gzip_comp_level 4;
gzip的压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度慢
gzip_types text/plain application/x-javascript application/javascript text/css application/xml;
匹配类型进行压缩
gzip_vary on;
给http加个vary头给代理服务器用,根据客户端的HTTP头来判断,是否需要压缩
server_names_hash_bucket_size 128;
指定服务器名称哈希表的框大小(默认值32/64/128)
client_header_buffer_size 32k;
设置客户端请求的Hearder头缓存区大小
large_client_header_buffers 4 32k;
设置客户端请求的Hearder头的最大值
client_max_body_size 10m;
设置客户端请求内容的最大值(M)
client_body_buffer_size 128k;
指定客户端请求内容的缓冲区大小,如果内容大于缓冲区,请求的内容或者部分请求内容将被写入临时文件
proxy_connect_timeout 300;
设置跟后端服务器连接超时的时间,发起捂手等待响应的超时时间。
proxy_send_timeout 300;
指定代理服务器转发请求的超时时间,如果代理服务器超过这个时间,任没有发送数据到后端服务器,nginx将关闭该次链接
proxy_read_timeout 300;
设置从后端被代理服务器读取应答内容的超时时间,它决定nginx等待多长时间来获取一个请求的应答
proxy_buffer_size 128k;
该指令用于设置从被代理服务器获取的第一部分应答信息的缓冲区大小这个缓冲区间会保存用户的头信息以供nginx进行规制处理,一般只要保留下头信息即可
proxy_buffers 32 128k;
该指令用于设置从被代理服务器读取应答信息的缓冲区数目和大小,一个缓冲区的大小相等于网页的大小
proxy_busy_buffers_size 128k;
系统很忙的时候可以申请更大的proxy_buffers缓冲区
proxy_temp_file_write_size 128k;
设置写入proxy_temp_file临时目录的数据大小,可以防止一个工作进程阻塞太长的时间
proxy_ignore_client_abort on;
如果客户端自身终止请求,防止中断代理请求
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 ; 该指令用于设置当在那种情况下,将请求发送到下一台服务器。在upstream负载均衡代理服务器池中,假设后端的一台服务器无法访问或者返回指定错误响应代码时,可以使用改指令将请求转发到池中的下一台服务器
include vhosts/*;
将另一个file,或者匹配指定mask的文件,包含到配置中。
##########################################################################################
后端使用的是tomcat
upstream tomcat_web {
server 127.0.0.1:8080;
server 192.168.0.2:8080;
keepalive 24;
激活对上游服务器的连接进行缓存。参数设置每个worker进程与后端服务器保持连接的最大数量。这些保持的连接会被放入缓存。 如果连接数大于这个值时,最久未使用的连接会被关闭。
check interval=3000 rise=2 fall=3 timeout=10000 type=http;
interval:向后端发送的健康检查包的间隔。
fall(fall_count):如果连续失败次数达到fall_count,服务器就被认为down。
rise(rise_count): 如果连续成功次数达到rise_count,服务器就被认为是up。
timeout: 后端健康请求的超时时间。
type:健康检查包的类型,现在支持以下多种类型
1,tcp:简单的tcp连接,如果连接成功,就说明后端正常。
2,ssl_hello:发送一个初始的SSL hello包并接受服务器的SSL hello包。
3,http:发送HTTP请求,通过后端的回复包的状态来判断后端是否存活。
4,mysql: 向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活。
5,ajp:向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活。
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
配置http健康检查包发送的请求内容。
check_http_expect_alive http_2xx http_3xx;
该指令指定HTTP回复的成功状态,默认认为2XX和3XX的状态是健康的
}
upstream tomcat_uat {
server 192.168.0.5:8088;
server 192.168.0.6:8088;
keepalive 12;
}
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;
定义一块内存存储区,用来存储Session会话状态。通常可以设置为存储客户端IP的变量$binary_remote_addr Session会话状态分配了一个名为one的10MB内存存储区,现在了每秒只能接受10个IP的一次请求
###########################################################################################
server {
listen 80 default_server;
server_name _;
access_log off;
if ($request_method !~* ‘GET|POST‘) {
return 403; #屏蔽了请求方法除GET/POST以外的其他方法
}
rewrite ^ http://www.*****.com/ permanent;
}
server {
listen 80;
server_name www.*****.com **.com;
root /data/webapps/******;
index index.html index.htm;
if ($request_method !~* ‘GET|POST‘) { #请求的方法
return 444;
}
if ($http_user_agent ~ ‘^$|JianKongBao‘) { #是用来检查浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)和用户个人偏好的代码
return 444;
}
if ( $query_string ~* "[\;‘\<\>]|\.\." ){ #请求中的参数
return 444;
}
###########################################################################################
location / {
proxy_http_version 1.1;
proxy_pass http://******;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
access_log logs/web/access.log main;
error_log logs/web/error.log error;
}
###########################################################################################
以下是一个完整的官网在nginx上的简单运用
###########################################################################################
upstream tomcat_car {
server 192.168.0.8:8082;
server 192.168.0.9:8082;
keepalive 24;
check interval=3000 rise=2 fall=3 timeout=10000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
###########################################################################################
server {
listen 80;
server_name www.*****.com *****.com;
root /data/webapps/car;
index index.jsp;
proxy_intercept_errors on;
error_page 404 /404.html;
#当后端服务器的响应状态码大于等于400时,决定是否直接将响应发送给客户端,亦或将响应转发给nginx由error_page指令来处理。
if ($request_method !~* ‘GET|POST‘) {
return 444;
}
if ($http_user_agent ~ ‘^$|JianKongBao‘) {
return 444;
}
if ( $query_string ~* "[\;‘\<\>]|\.\." ){
return 444;
}
location / {
proxy_http_version 1.1;
proxy_pass http://*********.com;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
access_log logs/peanutcar/access.log main;
error_log logs/peanutcar/error.log error;
########################### browser local cache ####################
if ($uri ~* ‘\.(ico|gif|jpg|jpeg|bmp|png|txt|js|css|otf|svg|ttf)$‘) {
expires 1d; #缓存时间1天
access_log off;
}
}
############################ active ############################
location ^~ ‘/active-web‘ {
proxy_http_version 1.1;
proxy_pass http://********;
proxy_set_header Connection "";
proxy_set_header Host $host;
access_log logs/hsactive/access.log main;
error_log logs/hsactive/error.log error;
if ($uri ~* ‘\.(ico|gif|jpg|jpeg|bmp|png|txt|js|css|otf|svg)$‘) {
access_log off;
}
limit_req zone=active burst=3;
limit_req_whitelist geo_var_name=white_ip geo_var_value=1;
}
}