nginx配置项详解

配置文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
  1. 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  2. events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3. http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  4. server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  5. 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

变量

  1. $args此变量与请求行中的参数相等

  2. $content_length等于请求行的“Content_Length”的值。

  3. $content_type等同与请求头部的”Content_Type”的值

  4. $document_root等同于当前请求的root指令指定的值

  5. $document_uri与$uri一样

  6. $host与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样

  7. $limit_rate允许限制的连接速率

  8. $request_method等同于request的method,通常是“GET”或“POST”

  9. $remote_addr客户端ip

  10. $remote_port客户端port

  11. $remote_user等同于用户名,由ngx_http_auth_basic_module认证

  12. $request_filename当前请求的文件的路径名,由root或alias和URI request组合而成

  13. $request_body_file

  14. $request_uri含有参数的完整的初始URI

  15. $query_string与$args一样

  16. $sheeme http模式(http,https)例如

    Rewrite ^(.+)$ $sheme://example.com$; Redirect;

  17. $server_protocol等同于request的协议,使用“HTTP/或“HTTP/

  18. $server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。

  19. $server_name请求到达的服务器名

  20. $server_port请求到达的服务器的端口号

  21. $uri等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index


nginx配置项详解
http://blog.icy8.cn/posts/41295/
作者
icy8
发布于
2021年3月13日
许可协议