worker_processes 1; 进程数量
events {
worker_connections 1024; 最大连接个数
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#设置 http 请求的根目录
#设置默认的 index 文件
#location 配置块结束
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;//返回页面
server {
listen 80;
server_name localhost;
location = /50x.html {
root html;//#设置 http 请求的根目录
}
}
event配置
use method
是否启用进程间的负载均衡机制。早期这个指令的默认值是 on,虽然可以让多个worker进程的工作量更均匀,但因为锁的成本较高,很影响效率,所以1.11.3版之后Nginx把默认值改成了off,也就是不启用负载均衡机制。
work_connects number;
http配置文件
Nginx使用http块配置HTTP相关的所有功能,包括cache、fastcgi,gzip.server.location. proxy. upstream等,通常的形式是:
http{
upstream{ //上游服务器
}
server
{
listen port;
location/{
}
}
server
{
..}
}
http{
include common.conf;
include upstream.conf;
include server/*.conf;
}
resolver address ...[valid] [ipv6= on|off];
server配置
listen port:
server_name name...;
server_name指令设置虚拟主机对外提供服务的主机名称,允许使用“+”通配符和“~”开头的正则表达式。例如“www . nginx.org”、“ * .image.nginx.org”,默认值是空字符串""。当Nginx处理请求时将会检查HTTP头部的Host域,选择与server_name匹配的server块提供服务,从而达到在一个Nginx里实现多个虚拟主机的目的。
server_tokens on|build|off
server_tokens指令控制HTTP响应头里的server字段,on参数会显示Nginx版本号,build参数则可以再追加显示编译信息(即“--build”的字符串)。off用来关闭显示,隐藏具体的版本信息,增强安全性。
location配置
location相当于虚拟主机上的虚拟目录,Nginx在成功匹配虚拟主机进入server 块后,会继续查找匹配URI的location块,它是Nginx处理的终点站,决定了请求应该如何处理。
= URI必须完全匹配;
. ~ 大小写敏感匹配:
. ~* 大小写不敏感匹配:
. ~ 匹配前半部分即可:
. @ 用于内部子请求,外部无法访问
locaion /doc/ {...}
location ~ \. (php)$ {...)
location ~* \. (png) $ {...}
location "~ /image/ {... )
location = /50x.html {... }
location / {. . . ]
#匹配 doc/* .*
#大小写敏感处理 php 请求
#忽略大小写,匹配所有的 png 文件
#匹配 image /* 飞优先级比上 个低
#只处理/ Sox.html 个文件
#匹配任意的 URI
file文件配置
在经过了虚拟主机 server 和虚拟目录 location ,我们需要确定 URI 的处理方式。如果把 Ng inx 用作静态 Web 服务器 ,那么 文件访问配置就很简单 ,只 需指定存放路径和文件 名即可 这里仅介绍三个最基本的指令,它们可以出现在 http 块里的任何位置。
root path
#设置请求文档的根目录 path 作为起始路径查找文件 如果有:
location /image/
{
root /var/data/;#文档根目录实际上是 var/data/
}
那么请求/image/001.jpg 将会返回文件/var/data/image/001.jpg
ailas paths
alias 指令同样设置文档的访问目录,但与root略有不同,它会location的路径
替换为 path 即为location/path的别名
location /image/
{
alias /var/data/;#文档根目录实际上是 var/data/
}
index file ...;
设置 index 件,即没有指定明确的文件名时的默认文件。
upstream配置
upstream back_end
{
ip_hash;
server 123.0.0.1:80;
server ...weight=3; 指定多台上游服务器
server ...backup; 备用服务器
}
upstream块的配置比较简单,server指令指足上游的服务器域名或IP地址,还可以用weight/max_fails/down/backup等附加参数来进一步描述服务器的状态。ip_hash指令确定了这些服务器的负载均衡策略,如果不给出明确的策略,Nginx就使用简单的加权轮询
localtion /passto
{
proxy_set_header Host $host; 转发原始请求的http
proxy_pass http://back_end; #转发到 upstream 块定义的服务器集群
}
变量
如果Nginx的配置文件仅有以上的功能,那么它还称不上是强大。Nginx的真正神奇之处是可以在配置文件里(以及Nginx运行的任何时刻)使用内置的TCP/HTTP请求相关变量,并且能够在运行时根据变量值动态变化配置,使编写配置文件更像是编写shell或者 Perl程序。
在配置文件里使用Nginx变量需要以“$”开头,例如$request_method.$args.$uri、$content_length,这与Shell和perl是一样的。变量的值都是字符串,可以用在access_log里记录访问日志,用在 proxy_pass里设置参数,或者做一些简单的条件判断,不过变量最大的作用还是供Nginx模块获取各种运行时信息。
$nginx version 当前Nginx的版本号:
• $uri : 当前请求的 URI ,但不含“?”后的参数
• $is args 当前请求是否带参数 ,如有则参数值为“?飞否则是空字符串:
$args 当前请求的参数 ,即“?”后的字符串:
$request uri 当前请求的完整 URI ,包含参数,相当于 $uri$is args$args;
$arg xxx 当前请求里 的某个参数,“ arg ”后是参数 的名字:
$http xxx :当前请求里的 xxx 头部对应的值:
$sent http xxx 返回给客户端的响应头部对应的值:
$remote_addr 客户端 IP 地址:
$1imit_rate 客户端连接速率限制
c url -v o / de v / null ’ http : I /localhost/i ndex. html?a=l&b=2' -H' hello:world'
$nginx_version= 1.12.2
$uri= /index.html
$is_arg =?
$args= a=1&b=2
$request_uri= /index.html?a=1&b=2
$arg_a =1
$arg_b =2
$http_hello= world
$sent_http_server= nginx/1.12.0
$remote_addr= 127.0 .0.1
map string$ variable{...}
map 指令只能出 http 内,可以使用简单的条件逻辑把 string 值转换后赋值给
map $is_args $my_flag{
default 0;
"?" 1;
}