11、定义mime-type

我们知道,在常用的浏览器中,可以显示的内容有HTML、XML、GIF及flash等种类繁多的文本、媒体等资源,浏览器为区分这些资源,需要使用MIME-TYPE。换而言之MIME TYPE是网络资源的媒体类型。Nginx服务器作为web服务器,必须能够识别前端请求的资源类型。
在默认的Nginx配置文件中,我们看到在http全局块中有一下2行配置:

default_type application/octet-steam;

12、自定义服务日志

Nginx服务器支持对服务日志的格式、大小、输出等进行配置,需要使用以下2个指令,分别是access_log和log_format指令。
access_log指令的语法结构:

access_log path [format [buffer=size]];   //path配置服务日志的文件存放的路径和名称;format,可选项,自定义服务日志的格式字符串,也可以通过“格式串的名称”使用log_format指令定义好的格式。size配置临时存放日志的内存缓存区大小。

以上指令可以在http块、server块或者location块中进行配置,默认配置为:

access_log off;  //关闭日志服务的功能]

log_format专用于定义服务日志的格式,并且可以为格式串定义名字,以便于access_log指令可以直接调用,语法格式如下:

log_format name string ……;   //name,格式字符串的名字,默认为combined。string服务日志的格式字符串。在定义过程中,可以使用Nginx配置预设的一些变量获取相关内容,变量的名称使用双引号括起来,string整体使用单引号括起来。

log_format exampleLog '$remote_addr - [$time_local] $request' '$status $body_bytes_sent $http_referer' '$http_user_agent';  //这条配置定义了日志服务文件的名称为exampleLog

测试结果如下:

192.168.1.102 - [31/oct/2011:20:41:39 +0800] "GET /HTTP/1.1" 200 151"-" "Mozilla/5.0(compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"

此指令只能在http块中进行配置。

13、配置允许sendfile方式传输文件

在Apache、lighttd等web服务器配置中,都有和sendfile相关的配置,这里主要学习一下配置sendfile传输方式的相关指令sendfile和send_mac_chunk以及他们的语法结构:

sendfile on | off; //用于开启或者关闭使用sendfile()传输文件,默认为off,可以在http块,server块或者location块中进行配置。
sendfile_max_chunk size;  //size值如果大于0,Nginx进程的每个worker process每次调用sendfile()传输的数据量最大不能超过这个值,如果设定为0,则无限制。默认为0

14、配置连接超时时间

与用户建立会话连接后,Nginx服务器可以保持这些连接打开一段时间,指令keepalive_timeout用来设定时间,语法结构如下:

keepalive_timeout timeout[header_timeout]; //timeout服务器对连接的保持时间,默认为75s。header_timeout,可选项在报文头部的keep_alive域设置超时时间:“keep-alive:timeout=header_timeout”

此指令可以出现在server块和location块中,示例如下:

keepalive_timeout 120s 100s; //含义是在服务器保持连接的时间设定为120s,发给用户端的应答报文头部中keep-alive域的超时时间为100s,此指令可以再http块、server块、location块中配置;

15、单链接请求上限

Nginx服务器与客户端建立回话后,用户端通过此链接发送请求。指令为keepalive_requests用于限制用户通过某一连接向Nginx服务器发送的次数,语法如下:

keepalive_requests number; //指令还可以出现在server块和location块中,默认设定为100。

16、配置网络监听

配置监听使用指令listen,其配置方法主要有3种,我们先分别介绍3种配置的语法结构,然后统一介绍涉及的相关变量和标示符。第一种配置监听的IP地址,语法结构为:

listen address[:port] [default_server] [backlog=number] [rcvbuf=size] [snbuf=size] [deferred] [accept_filer=filer] [bind] [ssl];

第二种配置监听端口,语法结构是:

listen port [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl];

第三种配置Unix Domain Socket(一种在原有socket框架上发展起来的IPC机制,用于在单个主机上执行客户/服务器通信),其语法结构为:

listen unix:path [default_server] [backlog=number] [rcvbuf=size] [snbuf=size] [deferred] [accept_filer=filer] [bind] [ssl];
  • address是指IP地址,如果是IPV6的地址,需要施工中括号[]括起来,比如[fe80::1]等。
  • port指端口号,如果只定义了IP地址没有定义端口号,就使用80端口。
  • path指socket文件路径,如/var/run/nginx.sock等。
  • default_server,标识符,将此虚拟机设定为address:port的默认主机。
  • setfib=number,Nginx-0.8.44中使用这个变量为监听socket管理路由表,目前只对FreeBSD起作用,不常用。
  • backlog=number,设定监听函数listen()最多允许多少忘了连接同事处于挂机状态,在FreeBSD中默认为-1,其他平台默认为511。
  • rcvbuf=size,设置监听socket接受缓存区的大小。
  • sndbuf=size,设定监听socket发送缓存区的大小。
  • deferred,标示符,将accept()设置为Deferred模式。
  • accept_filter=filter,设定监听端口对请求的过滤,被过滤的内容不能被接受和处理。
  • bind标识符,使用独立的bind()处理次address:port;一般情况下,对于端口相同而ip地址不同的多个连接,Nginx服务器将只使用一个监听命令,并使用bind()处理端口相同的所有连接。
  • ssl标识符,设置回话连接使用ssl模式进行,此标识符和Nginx服务器提供的https服务有关。

listen指令的使用看起来比较复杂,但是咋在实际情况中,相对来说比较简单,默认设定为:

listen *:80 | *:8000;   //监听所有80端口和8000端口;
listen 192.168.1.10:8000;  //监听具体的ip和具体的端口上的连接;
listen 192.168.1.10;  //监听具体IP的所有端口上的连接;
listen 8000;   //监听具体端口上的所有IP连接,等同于listen:8000;
listen 192.168.1.10 default_server backlog=1024;  //设置192.168.1.10的连接请求默认由次虚拟机主机处理,并且允许最多1024网络连接同时处于挂起状态;

17、基于名称的虚拟主机配置

这里的“主机”,就是指次server块对外提供的虚拟主机。设置了主机的名称并配置好DNS,用户就可以使用这个名称向虚拟主机发送请求了。配置主机名称的指令为server_name,语法结构为:

server_name name ……;  #对于name来说,可以只有一个名称,也可以由多个名称并列,之间用空格隔开。每个名字就是一个域名,由2段或者3段组成。

server_name myserver.com www.myserver.com; #示例中此虚拟主机的名称设定为myserver.com或者www.myserver.com。Nginx服务器规定,第一个名称作为此虚拟机的主要名称。

server_name *.myserver.com www.myserver.*;  #name中可以使用通配符“*”,但通配符只能用在由3段字符串组成的名称的首段或尾段,或者由2段字符串组成的名称的尾段。

server_name ~^www\d+\.myserver\.com$; #在name中还可以使用正则表达式,并使用波浪号“~”作为正则表达式字符串的开始标记,在该示例中,此虚拟主机的名称设置使用了正则表达式(使用~标记),正则表达式的含义是:以www开头(使用^标记),紧跟一个或多个0-9的数字(“\d+”的含义,其中“\d”代表0-9的某一个数字,“+”代表之前的一个字符出现一次或多次),再紧跟.myserver.co(由于“.”在正则表达式中有特殊的含义,因此需要使用“\”进行转义),最后以m结束(由$标记)。


最后修改:2021 年 01 月 31 日
如果觉得我的文章对你有用,请随意赞赏