nginx配置文件

1.文件格式
Nginx 的配置文件是 个普通的纯文本文件,使用了 Nginx 自定义的 一套 配置语法 更接近于
脚本语言 ,混合了 Shell 、 Perl、C 的部分特性,要点叙述如:
 1. 配置指令 以分号结束,可以接受多个参数 用空白字符分隔:
 2   可以使用 单引号或者双引号来定义字符串,允许用“\”转义字符
 3  配置指 和参数也可以用引号来指定,特别是当它含有空格的时候
 4.配置块 block 是特殊的配置指令,它有 个{ ...} 参数且无须分号结束 ...
里面可以包含多个配置指令,相当于 c言里 复合语句
 5.有的配置指令只能出现在特定的配置块里( 即语境 context) ;
 
 6.配置块里可以再包含配置块,嵌套层次没有限制 但需符合配置块的语义
 7.可以使用 include 指令包含其他配置文件,支持“*通配符,类似c语言
 8. 使用 $var 可以引用预定义的 些变量,增加配置的灵活性:
 9. 不能识别或错误的配置指令会导致 Nginx 解析失败,无法启动
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 指令
accept_mutex_on|off

是否启用进程间的负载均衡机制。早期这个指令的默认值是 on,虽然可以让多个worker进程的工作量更均匀,但因为锁的成本较高,很影响效率,所以1.11.3版之后Nginx把默认值改成了off,也就是不启用负载均衡机制。

work_connects number;

设置每个 worker 进程可 以处理的最大连接数量,它决定了 Nginx 的并发能力, 注意此
指令只是单 个进程的处理能力,  Nginx  的整体 的最 大可 理连接数应该再乘上 worker
processes 的数 量。 例如,如果 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块内容太多,如果都在一个文件里配置会造成配置文件过度庞大,难以维护。在实践中我们通常把server、location等配置分离到单独的文件,再利用include 指令包含进来,这样就可以很好地降低配置文件的复杂度。
http{

include common.conf;

include upstream.conf;

include server/*.conf;
}

resolver address ...[valid] [ipv6= on|off];

这是个比较重要的指令,配置域名解析服务器,否则 Nginx 将无法正确解析域名的 IP
地址 也就无法访问后端的 Web 服务
keepalive_timeout timeout
设置 keepalive 的超时时 ,默认是 75s 。它通常有 于客户端复用 HTTP 长连接,
服务器的性能 如果希望服务器发 送完 数据后能够 主动断连,就可以把它设置为0
access path [format [buffer=size] [flush=time] [if=condition] ] ;
acce ss_log 指令用于配置 http 的访问日志,日志的格式由 log_ format 决定。为了
优化磁盘读写 ,可以设置 buffer flush 选项,指定写磁盘的缓冲区大小和刷新时间
acces s_ log /var/logs/nginx/access .l og buff e r=8k flush=1s;

server配置

listen port:

listen指令设置虚拟主机监听的端口,默认是80。实际上listen 指令还有很多参数,可以设置IP地址、ssl、rcvbuf /sndbuf、HTTP 2.0支持等,因与本书关系不大故从略。
通常来说,联合使用backlog、deferred、fastopen和 reuseport这几个参数就能达到较好的优化效果。

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处理的终点站,决定了请求应该如何处理。

location [ = | ~ | ~* | ^~ | @ ] uri {...}
location 使用配置文件里的uri参数匹配HTTP请求行里的 URI,默认是前缀匹配,也支持正则表达式。但需要注意,如果uri里含有“)”、“;”这样的特殊字符(与Nginx配置语法冲突)就必须使用单引号或双引号限定,例如:
location /image/    {...}                 #匹配/image/001.jpg
location ~'^\\d{2,3}$'  {...}            #正则表达式 匹配2-3的uri
使用几个前缀来做进一步的匹配限定:
  =  URI必须完全匹配;
. ~  大小写敏感匹配:
. ~* 大小写不敏感匹配:
. ~  匹配前半部分即可:
. @  用于内部子请求,外部无法访问
不同的location里可以有不同的处理方式,灵活设置location能够让Nginx配置清晰明了,易于维护。比如,我们可以在一个location里存放静态html文件,在另一个location里存放图片文件,还有一个 location则调用fastcgi 处理 PHP 请求,这些location互不干扰,修改其中的一个不会影响其他的正常运行。例如:
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就使用简单的加权轮询

upstream 块通常配合 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 值转换后赋值给

$vari able ,在{ ...} 里用 defau lt 设置默认值,用通配符或者正则表达式匹配做分 处理,
有些类 switch 语句。
map $is_args $my_flag{

default       0;
"?"           1;
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx 配置文件是一个文本文件,通常位于 `/etc/nginx/` 目录下,主要包括以下几个部分: 1. 全局块:配置影响 nginx 全局的指令,一般有运行 nginx 的用户组、nginx 进程 pid 存放路径、日志存放路径和类型以及配置文件引入等。 2. events 块: 配置影响 nginx 服务器或与用户的网络连接,常用于设置连接超时时间、最大连接数等。 3. http 块:http 块中定义的配置指令用于处理 Web 请求,主要包括了 MIME 类型、字符集、缓存、请求限制等。 4. server 块:配置虚拟主机的相关参数,一个 http 块中可以包含多个 server 块,每个 server 块就相当于一个虚拟主机,用于处理来自客户端的请求。 一个简单的 Nginx 配置文件示例如下: ``` user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name example.com; location / { root /usr/share/nginx/html; index index.html index.htm; } } } ``` 这个配置文件包含全局块和一个 server 块,其中: - `user` 指定 Nginx 运行的用户; - `worker_processes` 指定 Nginx 启动的 worker 进程数; - `error_log` 指定错误日志文件路径和级别; - `pid` 指定 Nginx 进程 ID 存放路径; - `events` 块中 `worker_connections` 指定每个 worker 进程最大连接数; - `http` 块中 `include` 指定 MIME 类型配置文件路径; - `default_type` 指定默认 MIME 类型; - `access_log` 指定访问日志文件路径和格式; - `sendfile` 指定是否使用 sendfile 函数传输文件; - `keepalive_timeout` 指定 keep-alive 连接超时时间; - `server` 块中 `listen` 指定监听端口和协议; - `server_name` 指定虚拟主机域名; - `location` 指定请求 URL 和对应的文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值