nginx配置项详解
配置文件结构
- 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- location块:配置请求的路由,以及各种页面的处理情况。
配置项
upstream :upstream [name] {}
用作负载均衡
listen 80:配置监听端口
server_name localhost:配置访问域名,多个域名用空格分开
*location *:路由匹配
语法规则
模式 含义 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_index:如果请求的FastCGI URI以/结束,该指令设置的文件会被附加到URI的后面并保存在变量$fastcgi_script_name中
在这里指定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