nginx配置项详解
配置文件结构
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
- 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- location块:配置请求的路由,以及各种页面的处理情况。
配置项
upstream :upstream [name] {}
用作负载均衡
upstream linuxidc{ # ip_hash; 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 server 10.0.0.77 weight=5; server 10.0.0.88 weight=10; } location / { root html; index index.html index.htm; proxy_pass http://linuxidc; }
每台服务器设置指定状态 1. **down:** 表示当前的server临时不参与负载. 2. **weight:** 默认值1,weight越大,负载的权重就越大。 3. **max_fails:**同一请求失败的次数,默认值1,当超过最大次数时,返回proxy_next_upstream 模块定义的错误. 4. **fail_timeout:**max_fails次失败后。暂停的时间。 5. **backup:**其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
listen 80:配置监听端口
server_name localhost:配置访问域名,多个域名用空格分开
*location *:路由匹配
语法规则
location [=|~|~*|^~|!~|!~*] /uri/ {...}
模式 含义 location = /uri = 表示精确匹配 location ^~ /uri ^ 进行前缀匹配,~ 表示区分大小写 location ~ pattern ~ 区分大小写的匹配 location ~* pattern ~* 不区分大小写的匹配 location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后 location / 通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default location !~ 区分大小写不匹配 location !~* 不区分大小写不匹配 deny all:位于
location
块,禁止访问对应路由。proxy_pass [sock]:设置被代理服务器的端口或套接字,以及URL
proxy_set_header Host $host:设置代理请求头
fastcgi_pass [ip]:设置FastCGI服务器的地址。该地址可以指定为域名或ip地址以及端口。或者作为UNIX域套接字路径。
官方http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_pass
fastcgi_pass localhost:9000; fastcgi_pass unix:/tmp/fastcgi.socket;# 通常改变socke路径来改变php版本
fastcgi_index:如果请求的FastCGI URI以/结束,该指令设置的文件会被附加到URI的后面并保存在变量$fastcgi_script_name中
location ~* \.php$ { fastcgi_pass cos_ups; fastcgi_index index.php; include fastcgi.conf; }
在这里指定fastcgi_index 其实是没有用的,因为前面的location ~* .php$已经把“/结束”这种情况排除了
index:该指令用于设置nginx的默认首页文件
*fastcgi_param *:Nginx 的 fastcgi 模块提供了 fastcgi_param 指令来主要处理这些映射关系,下面 Ubuntu 下 Nginx 的一个配置文件,其主要完成的工作是将 Nginx 中的变量翻译成 PHP 中能够理解的变量。
在php可打印出上面的服务环境变量
如:echo $_SERVER[‘REMOTE_ADDR’]
root [dir]:设置请求的根目录
include:将另一个文件或与指定掩码匹配的文件包含到配置中。包含的文件应该由语法正确的指令和块组成。官方 http://nginx.org/en/docs/ngx_core_module.html#include
rewrite
*regex*
*replacement*
[*flag*
] :伪静态,官方 http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
变量
$args此变量与请求行中的参数相等
$content_length等于请求行的“Content_Length”的值。
$content_type等同与请求头部的”Content_Type”的值
$document_root等同于当前请求的root指令指定的值
$document_uri与$uri一样
$host与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate允许限制的连接速率
$request_method等同于request的method,通常是“GET”或“POST”
$remote_addr客户端ip
$remote_port客户端port
$remote_user等同于用户名,由ngx_http_auth_basic_module认证
$request_filename当前请求的文件的路径名,由root或alias和URI request组合而成
$request_body_file
$request_uri含有参数的完整的初始URI
$query_string与$args一样
$sheeme http模式(http,https)例如
Rewrite ^(.+)$ $sheme://example.com$; Redirect;
$server_protocol等同于request的协议,使用“HTTP/或“HTTP/
$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$server_name请求到达的服务器名
$server_port请求到达的服务器的端口号
$uri等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index