下面我们开始阐述nginx如何配置及其使用,

配置文件详解

Nginx的主配置文件是nginx.conf,我们上面编译安装的位置是/etc/nginx。内容如下。

默认的配置文件如下

worker_processes  1;

events {

     worker_connections  1024;

}

http {

     include       mime.types;

     default_type   application/octet-stream;

     sendfile        on;

     keepalive_timeout  65;

     server {

         listen       80;

         server_name  localhost;

         location / {

            root   html;

            index  index.html index.htm;

         }

         error_page   500 502 503  504  /50x.html;

         location = /50x.html {

            root   html;

         }

     }

}

从上面的示例中我们可以看出Nginx的配置文件的结构如下

wKiom1h5frHi7svzAADvgr2ky3Y332.jpg-wh_50

在配置文件中,使用{ }来表示一个块,例如 

http {

    ……

    server{

    ……

}

}

参数说明(不完整)

参数

位置

语法

功能说明

备注

user

全局

nginx

使用那个系统账户启动nginx


worker_processes

全局

2

nginx的工作进程数,正整数,推荐和处理器核心数一致,但是也推荐不要大于8。


worker_cpu_affinity

全局

01 10

处理器绑定设置,这里使用0和1来代表处理器,示例中,我们使用了双核处理器。说明下,一个工作进程可以绑定到多个处理器核心上。这里设定一个工作进程绑定在处理器1上。第二个工作进程绑定在处理器2上


pid

全局

/var/run/nginx.pid

默认pid文件的位置


worker_rlimit_nofile

全局

65535

每个工作进程可打开的文件数,设定可以和limit.conf设置一样。


events {}

全局


event代码块


use

events

select

poll

epoll(推荐)

kqueue(仅限bsd)

指定使用处理大批量文件描述符的方式,这里推荐为epoll,它可以显著提示多路IO性能,它需要内核版本大于2.5.44。如果使用RHEL5,可能出现错误。如果您是BSD的系统,可以使用Kqueue。


worker_connections

events

数量

这里推荐和系统的limit.conf中的nofile设置为一阳指


multi_accept

events

on|off

尽可能多的接受请求


error_log

全局

http

server

location

off

/path/to/file

错误日志,你可以使用off关闭它,也可以使用path/to/file来指定错误日志文件。默认的错误日志位置是/var/log/nginx/error.log


http{}

全局


http代码块


include

http


包含此文件/或者路径,支持正则表达式

其中,说明下“include  mime.types;”这个是文件扩展名与文件类型映射表


aio

http

server

localtion

On | off(默认)

Threads[=pool]

对于linux,内核版本需要大于2.6.22才可以使用,对于FreeBSD版本需要高于4.3

对于thread,需要niginx高于1.7.11。event模式必须为epoll,kqueue,eventport

Nginx版本高于0.8.11

aio_write

http

server

localtion

On| off(默认)


Nginx版本高于1.9.13

directio

http

server

localtion




output_buffers

http

server

localtion




alias

location

Path

指定关联的路径


default_type

全局


默认的文件类型


charset

全局

Utf-8

默认的字符集编码


log_format

全局

http

server




access_log

全局

http

server

localtion

off

Path/to/file



sendfile


On | Off

开启,启用sendfile,可以在磁盘和tcp socket之间互相拷贝数据,提升性能


fastcgi_intercept_errors


On | Off



tcp_nopush


On | Off



server_names_hash_bucket_size





client_header_buffer_size





large_client_header_buffers





client_max_body_size





tcp_nodelay





server_tokens

http

On | Off(推荐)

安全选项,关闭nginx的版本显示


client_body_buffer_size





proxy_connect_timeout





proxy_read_timeout





proxy_send_timeout





proxy_buffer_size





proxy_buffers





proxy_busy_buffers_size





keepalive_timeout





Gzip





gzip_min_length





gzip_comp_level





gzip_types





gzip_vary





open_file_cache





open_file_cache_min_uses





open_file_cache_valid





server{}

全局




Upstream {}

全局





Nginx的变量

Nginx的全局变量

变量

说明

arg_PARAMETER

这个变量包含GET请求中,如果有变量PARAMETER时的值。

args

这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;

binary_remote_addr

二进制的客户地址。

body_bytes_sent

响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。

content_length

请求头中的Content-length字段。

content_type

请求头中的Content-Type字段。

cookie_COOKIE

cookie COOKIE变量的值

document_root

当前请求在root指令中指定的值。

document_uri

与uri相同。

host

请求主机头字段,否则为服务器名称。

hostname

Set to themachine’s hostname as returned  by gethostname

 

HTTPHEADER中的变量

变量

说明

is_args

如果有args参数,这个变量等于”?”,否则等于”",空值。

http_user_agent

客户端agent信息

http_cookie

客户端cookie信息

limit_rate

这个变量可以限制连接速率。

query_string

与args相同。

request_body_file

客户端请求主体信息的临时文件名。

request_method

客户端请求的动作,通常为GET或POST。

remote_addr

客户端的IP地址。

remote_port

客户端的端口。

remote_user

已经经过Auth Basic Module验证的用户名。

request_completion

如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链的最后一个时,为空(Empty)

request_method

GET或POST

request_filename

当前请求的文件路径,由root或alias指令与URI请求生成。

request_uri

包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。

scheme

HTTP方法(如http,https)。

server_protocol

请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

server_addr

服务器地址,在完成一次系统调用后可以确定这个值。

server_name

服务器名称。

server_port

请求到达服务器的端口号。

 

日志中的变量

变量

说明

$remote_addr

记录客户端IP地址

$http_x_forwarded_for

记录客户端IP地址,针对有代理的服务器添加。(可能会出现安全问题)

$remote_user

记录客户端用户名称

$request

记录请求的URL和HTTP协议

$status

记录请求状态

$body_bytes_sent

发送给客户端的字节数,不包括响应头的大小;

$bytes_sent

发送给客户端的总字节数。

$connection

连接的序列号。

$connection_requests

当前通过一个连接获得的请求数量。

$msec

日志写入时间。单位为秒,精度是毫秒。

$pipe

如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。

$http_referer

记录从哪个页面链接访问过来的

$http_user_agent

记录客户端浏览器相关信息

$request_length

请求的长度(包括请求行,请求头和请求正文)。

$request_time

请求处理时间,单位为秒,精度毫秒;

$time_iso8601

ISO8601标准格式下的本地时间。

$time_local

通用日志格式下的本地时间。