一、首先来看下nginx的全局文件结构:
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
二、下面是举例的一个参数配置:
user root; #配置用户或者组
worker_processes 8; #允许生成的进程数,默认为1 这里可以和自己服务器的CPU核数保持一致
error_log logs/error.log; #制定日志路径,级别。 级别依次为:debug|info|notice|warn|error|crit|alert|emerg
pid logs/nginx.pid; #指定nginx进程运行文件存放地址
worker_rlimit_nofile 65535; #worker进程最大打开文件数
events {
worker_connections 65535; #最大连接数,默认为1024
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log logs/access.log main; #访问日志 能够帮助我们快速的定位问题,并且知道用户访问的状态,浏览器,Ip,接口地址等
#access_log off; #解开注释后 将取消打印服务日志
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
keepalive_timeout 65; #连接超时时间,可以在http,server,location块。
client_max_body_size 30M; #设置客户端请求体的最大允许大小
client_body_buffer_size 30M; #设置读取客户端请求体的缓冲区大小
server {
listen 80; #监听80端口
server_name localhost; #服务器的主机名
location / {
autoindex on;
root /home/admin; #根目录
index index.html; #设置默认页
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; location设置了proxy_set_header,就不继承,但继承默认值,默认值优先级低于 location设置。
}
}
三、说一下几个参数:
1.worker_processes 8; #允许生成的进程数
这里可以和自己服务器的CPU核数保持一致。
2.worker_rlimit_nofile 65535; #worker进程最大打开文件数
3.client_max_body_size 30M; #设置客户端请求体的最大允许大小
默认为 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。
如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。就是说如果请求的正文大于client_max_body_size,一定是失败的,如果需要上传大文件,一定要修改该值。
4.client_body_buffer_size 30M; #设置读取客户端请求体的缓冲区大小
Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中。如果追求效率,就设置 client_max_body_size client_body_buffer_size相同的值,这样就不会存储临时文件,直接存储在内存了。