nginx配置文件说明(包含黑名单、代理反射、负载均衡)

nginx.conf配置文件的注解,包含ip黑名单、负载均衡、代理反射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#运行用户 主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行
user nobody;
#启动进程,每个Nginx进程平均耗费10M~12M内存,通常建议设置成和cpu的数量相等
worker_processes 1;

#error_log是个主模块指令,用来定义全局错误日志文件。
# 日志输出级别有debug、info、notice、warn、error、crit可供选择
# 其中debug输出日志最为最详细,而crit输出日志最少。
error_log logs/error.log;
# error_log logs/error.log notice;
# error_log logs/error.log info;

# pid是个主模块指令,用来指定进程pid的存储文件位置
pid logs/nginx.pid;


#工作模式及连接数上限
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
#仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;

#单个后台worker process进程的最大并发链接数
worker_connections 1024;

# 并发总数是 worker_processes 和 worker_connections 的乘积
# 即 max_clients = worker_processes * worker_connections
# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么
# 为什么上面反向代理要除以4,应该说是一个经验值
# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
# worker_connections 值的设置跟物理内存大小有关
# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
# $ cat /proc/sys/fs/file-max
# 输出 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
# ulimit -SHn 65535

}


http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#设定日志格式
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 logs/access.log main;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;

#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;

# 开启gzip压缩
gzip on;
gzip_disable "MSIE [1-6].";

# 设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;

# ip黑名单
# 在Nginx的conf目录下面建立blockip.conf文件(名称可以随意)然后引入
# 单个网站屏蔽IP的方法:把include blocksip.conf;放到网址对应的在server {}语句块;
# 多个网站屏蔽IP的方法:把include blocksip.conf;放到http {}语句块。
# include blockip.conf;

# 文件里的格式如下
# 屏蔽单个ip访问:deny IP;
# 允许单个ip访问:allow IP;
# 屏蔽所有ip访问:deny all;
# 允许所有ip访问:allow all;
# 屏蔽整个段:从123.0.0.1到123.255.255.254
## deny 123.0.0.0/8;
# 屏蔽IP段:从123.45.0.1到123.45.255.254
## deny 123.45.0.0/16;
# 屏蔽IP段:从123.45.6.1到123.45.6.254
## deny 123.45.6.0/24;
# 除了几个IP外,其他全部拒绝
## allow 1.1.1.1;
## allow 1.1.1.2;
## deny all;


# 设定虚拟主机配置
server {

# 侦听80端口
listen 80;
# 定义使用 www.nginx.cn访问,多个域名之间用空格分开
server_name www.nginx.cn;

# 设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;

# 默认请求
# location: 表示url匹配,/表示全部匹。
location / {
#定义服务器的默认网站根目录位置(html和config同级目录)
# 可自定义目录如 root /home/html
root html;
#定义首页索引文件的名称
index index.php index.html index.htm;
}

# 定义错误提示页面
# 特别需要注意的是,这些错误信息的返回页面大小一定要超过512K,否者会被ie浏览器替换为ie默认的错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {

#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}

# 这段设置是将upload和html下的所有文件都交给nginx来处理
# 当然,upload和html目录包含在/web/wwwroot/xx目录中。
location ~ ^/(upload|html)/ {
root /web/wwwroot/xx;
expires 30d;
}

#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

#禁止访问 .txt/doc 文件
location ~* \.(txt|doc)$ {
root /usr/local/nginx/html;
deny all;
}

}


# 反向代理实现负载均衡
# 准确的来说,这属于:HTTP重定向实现负载均衡。它有一个比较大的缺点
# 由于不同用户的访问时间、访问页面深度有所不同,从而每个用户对各自的后端服务器所造成的压力也不同。
# 而调度服务器在调度时,无法知道当前用户将会对服务器造成多大的压力,因此这种方式无法实现真正意义上的负载均衡,
# 只不过是把请求次数平均分配给每台服务器罢了。但是它确实实现了负载均衡,
# 在一些要去并不强烈的项目中可以使用http重定向来实现均衡每台服务器压力的效果,以达到更高的并发总量。
upstream tom3 {

# 采用源地址哈希法进行分配()
# 对访问用户的IP进行hash后的结果进行分配,这样每一个用户固定请求同一个后端服务器,能够解决session的问题。
# ip_hash;

# weight 默认为1,weight值越大,负载的权重就越大,访问概率越大
# server localhost:1996 weight=1;

# down 表示当前的server暂时不参与负载
# server localhost:1996 down;

# backup 表示其它所有的非backup机器down或者忙的时候,请求backup机器
# server localhost:1996 backup;

server localhost:1996;
server localhost:1997;
server localhost:1998;

}

# 反向代理
server {
listen 80;
server_name www.nginx2.cn;
location / {

# 会转发到设置的三台tomcat上
proxy_pass http://tom3;

# nginx向tomcat发起连接,即第一次握手等待tomcat回应的超时时间,tomcat的这次回应只是说明能正常连接,并没有响应具体请求的内容。
# 如果其中有台tomcat故障,3秒后转移到其他tomcat上,默认时间是60秒
proxy_connect_timeout 3s;

# tomcat接受到真正业务请求之后,nginx等待tomcat响应具体请求内容的超时时间。
# 差不多可以理解tomcat处理具体请求时间的最大值,也就是tomcat必须在这个时间内做完业务逻辑处理。
proxy_read_timeout 20s;

# nginx将请求发送给tomcat的超时时间,应该是确认能正常连接之后向tomcat发送真正的业务请求。
proxy_send_timeout 3s;

index index.html index.htm;

}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

}

-------------本文结束感谢您的阅读-------------
感觉文章不错,就赏个吧!
0%