`

nginx配置

阅读更多

配置项的格式:配置项名称 配置项值1 配置项值2 ···· ;

配置名称必须是nginx中的某一个模块能够处理的,否则nginx会出现非法配置名的错误

配置值中如果出现语法符号,例如空格、变量等,使用单引号或者双引号括起来

 

第一类:用于调试和定位问题的配置项

1.daemon on|off 默认是on  

是否以守护进程方式允许

 

2.master_process on|off 默认on

是否以一个master进程和多个worker进程的方式允许,如果off则不会fork出多个worker,而是一个master执行所有的请求

 

3.error日志设置

error /var/log/nginx.error.log debug

第一个值是日志文件的路径,第二个值是日志等级,如果是debug模式,需要在在编译nginx时候使用了--with-debug选项才能使用,如果想要不输出任何日志,日志路径写成:/dev/null 即可

 

4.仅对指定的客户端输出debug级别的日志,该配置属于事件类配置,需要在events{}块配置中

debug_connection IP|CIDR

例如:

events{

debug_connection 10.244..66.14;

debug_connection 10.244..66.16;

}

上面的ip才会输出debug级别的日志,其他的ip请求都是沿用error_log配置的日志级别

 

 

第二类:正常运行配置项

 

1.全局配置:可能是配置指令,或者是花括号的块配置(例如所有的事件类配置必须在events{.....}中配置),主要的全局配置如下:

user 用户 用户组:    配置由master进程fork出来的worker进程的所属用户和用户组,如果省略了group则表示用户组使用与user同名的用户组

pid:                 记录主进程Id的文件,必须确保nginx能够有权限在目标目录中创建修改该文件,该配置会覆盖编译nginx时候的设置(默认是在logs目录下)

worker_rlimit_nofile:设置一个worker进程可以打开的最大文件句柄数

 

worker_processes:    worker进程启动的数量,这些进程用于处理用户的请求连接,该选项是一个优化关键项之一,每个worker进程都是单线程的进程,它会调用各个模块实现各种功能,如果这些模块不会出现阻塞式调用,该值设置成cpu内核数即可,否则设置的值应该稍大于cpu内核数,这样会出现过多的进程间的切换带来的消耗

 

worker_cpu_affinity: 绑定worker到每个指定cup内核中,该参数与worker_processes结合使用,为什么进行worker绑定内核?假设如果多个worker进程抢同一个cpu就会出现同步问题,如果绑定了,那么一个worker进程独享一个cpu,这就在内核的调度策略上实现了完全的并发

例如:

worker_processes:4;

worker_cpu_affinity:1000 0100 0010 0001;

 

2.事件类配置项,需要在events{}块中设置

accept_mutex on|off:nginx的负载均衡锁,该锁能够让每个worker轮流地序列化地与新的客户端建立tcp连接处理请求,原理是当某个worker进程处理请求数达到了worker_connections的7/8左右时候,锁会大大减少该进程处理请求的的机会,这样实现了所有worker在处理请求数的尽量接近均衡,默认是开启的

 

use:                选择事件模式,linux中可选择的事件类型:poll、select、epoll,其中epoll可处理高并发,性能最好

worker_connections:  配置一个进程能够处理的的最大并发连接数(也就是一个进程最多能同时处理多少个请求的意思,受限于内存,也受限于worker_rlimit_nofile,其值不能大于worker_rlimit_nofile的值,而worker_rlimit_nofile的值则受限于系统本身的最大打开文件句柄数,可使用ulimit -n查看),这是一个优化的关键项之一

 

2. 使用include文件

include可以用在配置文件中的任何地方,只要被include的文件复合nginx配置文件的格式,这样可以使得某些配置文件能够重复使用

 

3. http中的server部分的配置,该配置需要使用http{}来包含,一般都是在全局配置后设置

这部分的命令用于配置http的连接,该指令比较多,大体可分一下几类:

3.1 客户端指令,例如:keepalive_timeout

3.2 文件I/O指令 例如:open_file_cache

3.3 Hash指令

3.4 Socket指令

 

4. 虚拟server指令,任何有server开始的部分都视为“虚拟服务器”部分,其包含在server{}中,它描述是一组根据server_name指令逻辑分割的资源,这些虚拟服务器资源用于响应http的请求,

因此它包含在http中的server部分的配置中,也就是包含在http{}中(http{ server{...} }),

 

 

用http核心模块配置一个静态web服务器

1.主要的模块是ngx_http_core_module,配置需要在server块中,而server块需要在http块中

2.配置可大体分为8种:

2.1 虚拟机主机的请求与分发

监听端口:

listen ip:port | ip | port 各种参数

例如:

listen 8099 default_server deferred

参数:

default_server表示作为默认的server块(虚拟主机),如果一个请求无法匹配配置文件中的所有主机域名,就会选择默认的server块

deferred:设置该参数后,即使用户发起了连接请求,并且tcp已经三次握手了,nginx也不会发起worker进程来处理,只有当用户真正的发送请求数据时候(内核在网卡收到请求数据包),worker才会被唤起处理请求,有利于大并发的情况下

 

主机名:

server_name value1 value2 ....;

在处理http请求的时候,nginx会跟中请求中的host的值去匹配配置中的server块中的server_name,如果同时符合,则按照匹配度来决定

如果都没有匹配则会:选择listen中定义了default_server的,如果没有则直接选择第一个server块

server ""{...}表示匹配http请求中没有host值的这个请求

 

重定向location

配置块:server

location会根据请求中的url来匹配,匹配上就执行location中的配置,如果多个匹配,只会选择最后一个个匹配到的location

匹配原则:

1. = 表示完全匹配

location = / { 

#当用户请求是/时候,才使用这里的配置

}

 

2. ~  表示匹配url时候是大小写敏感的

3. ~* 表示匹配url时候大小写不敏感

location ~* \.(gif|jpg|png)$ {

#匹配以.gif 或者 .jpg 或者 .png结尾的请求(不区分大小写),这里使用了正则,

}

 

4. ^~ 

loacation ^~ /images/{

#匹配请求以/images/开头的

}

 

一个匹配所有请求的location:

location / {

#匹配所有的请求

}

 

 

2.2 文件路径的定义

root定义资源路径

配置块:http、server、location、if

例如:

location /download/ {

root /data/web/html/;

#表示当有请求,例如是/download/index/index.html,那么web服务器会返回/data/web/html/download/index/index.html的内容

}

 

访问首页

index file1 file2....;

配置块:http、server、location

当访问是/时候,表示访问首页,这index配置属于ngx_http_index_module模块,配置多个文件,会按照从左往右顺序访问

 

 

http错误码重定向:error_page

 

2.3内存及磁盘资源的分配

http包体只存到磁盘文件中:client_body_in_file_only on|off (默认off),都会存入磁盘文件中,只是如果设置成off,在请求结束后该文件会被删除

配置模块:http、server、location

 

http包体尽量写到一个内存buffer中

client_body_in_single_buffer on|off(默认off),如果请求的http包体大小超过 client_body_buffer_size的大小,则还是会写入磁盘文件中

配置块:http、server、location

 

存储http头部的内存buffer大小:client_header_buffer_size(默认1k,正常的http请求的,如果有过大的http请求,其大小的限制由large_client_header_buffers来决定)

配置块:http、server

 

存储超大http头部的内存buffer大小:large_client_header_buffers number size(默认是 4 8k)

配置块:http、server

 

2.4网络连接配置

对某些浏览器禁用keepalive功能:keepalive_disable msie safari (默认对ie6和safari浏览器禁用)

配置块:http、server、location

 

keepalive超时时间:keepalive 75 (默认75秒),一个keepalive连接在闲置超过了75秒后,服务器和浏览器都会去关闭该连接,这个时间只约束了nginx,而nginx会把该时间传递给浏览器

配置块:http、server、location

 

一个keepalive长连接上允许承载的最大请求数:keepalive_request 100(默认是100个),一个keepalive连接最多只能发送100个请求

配置块:http、server、location

 

2.5 MIME类型的设置

定义MIME type到文件扩展名的映射,同一个MIME type可使用不同的文件扩展名,用http请求中的Content-Type的值从该类型设置中找到对应的文件扩展名,如果找不到,默认是text/plain

type{

text/html  html;

text/html  conf;

image/jpeg jpg;

image/gif  gif;

.....

}

配置块:http、server、location

 

2.6 对客户端请求的限制

http包体的最大值:client_max_body_size 1m(默认1m),该值用来限制http请求中Content-Length字段的值,如果一个请求的Content-Length为10GB,那么nginx在接收完包头,发现10GB已经超过client_max_body_size的值了,nginx直接返回413(Reqest Entity Too Large)状态给客户端

配置块:http、server、location

 

 

location ~ .+\.php($|/) {

 

            #以下是fastcgi模块最基本的配置项

            fastcgi_pass  fzjh;

            fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

            fastcgi_index  index.php;

            include fastcgi_params;    #fastcgi_params与文件fastcgi.conf的区别只在于fastcgi_param  SCRIPT_FILENAME参数的定义而已

 

            #或者是

 

            #fastcgi_pass  fzjh;

            #fastcgi_index  index.php;

            #include fastcgi.conf;

 

        }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics