下面我们开始阐述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的配置文件的结构如下
在配置文件中,使用{ }来表示一个块,例如
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 | 通用日志格式下的本地时间。 |
转载于:https://blog.51cto.com/wqlszy2016/1891935