的配置文件是
个普通的纯文本文件,使用了
Nginx
自定义的
一套
配置语法
更接近于
,混合了
Shell 、
Perl、C
的部分特性,要点叙述如:
以分号结束,可以接受多个参数 用空白字符分隔:
可以使用 单引号或者双引号来定义字符串,允许用“\”转义字符
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
Nginx
用的
件处理方式,在
Linux
下可以选择
select poll
ep
oll
,其
epoll 是最高效
的,这也是
Nginx
的默认设置,所以通常无
特意使用 u
se
指令
是否启用进程间的负载均衡机制。早期这个指令的默认值是 on,虽然可以让多个worker进程的工作量更均匀,但因为锁的成本较高,很影响效率,所以1.11.3版之后Nginx把默认值改成了off,也就是不启用负载均衡机制。
work_connects number;
worker
进程可
以处理的最大连接数量,它决定了
Nginx
的并发能力,
注意此
个进程的处理能力,
Nginx
的整体
的最
大可
理连接数应该再乘上
worker
的数
量。
例如,如果
Nginx
10
worker
,每个
worker
的连接数是1
万,
Nginx
论上最多可以支持
10
门万=
10
万个并发连接
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];
Nginx
将无法正确解析域名的
IP
也就无法访问后端的
Web
服务
keepalive
的超时时
,默认是
75s
。它通常有
于客户端复用
HTTP
长连接,
送完
数据后能够
主动断连,就可以把它设置为0
ss_log
指令用于配置
http
的访问日志,日志的格式由
log_
format
决定。为了
,可以设置
buffer
flush
选项,指定写磁盘的缓冲区大小和刷新时间
s_
log
/var/logs/nginx/access .l
og
buff
e
r=8k
flush=1s;
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就使用简单的加权轮询
块通常配合
proxy
pass
fastcgi pass
等反向代理指
令使用
,把
客户端
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 值转换后赋值给
able
,在{
...}
里用
defau
lt
设置默认值,用通配符或者正则表达式匹配做分
处理,
map $is_args $my_flag{
default 0;
"?" 1;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129647.html