# Nginx 配置解析

# Nginx 配置语法

  • 配置文件由指令和指令块组成
  • 每条指令以 ; 分号结尾。指令和参数以空格分隔。
  • 通过 {} 形成指令块,将多条指令组织在一起。
  • 使用 include 引入外部配置,提高可读性,避免单个配置文件过大
  • 使用 # 可以注释文件,提高配置文件可读性
  • 使用 $ 可以使用变量,提高灵活性
  • 部分指令的参数支持正则表达式

# nginx.conf 文件结构

...              #全局块

events {         #events块
   ...
}

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

# nginx.conf 配置文件

Nginx 默认配置文件,如下:

# 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为 nobody
#user  nobody; 

# 设置worker进程工作数设置,通常设置为CPU个数,或者设置为N-1也行
worker_processes  1;

# nginx 日志级别 debug | info | notice | warn | error | crit | alert | emerg ,错误级别从左到右越来越大
# 配置错误日志记录文件
#error_log  logs/error.log; 
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# 设置nginx进程 pid
#pid        logs/nginx.pid; 

# 设置工作模式
events {
    # 配置每个 worker 进程允许客户端连接的最大连接数
    worker_connections  1024; 

    # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    # 默认使用 epoll
    #use epoll;
}

#  http 模块,针对 http 请求传输的一些指令配置
http {

    # include 引入外部配置,提高可读性,**避免单个配置文件过大**
    include       mime.types; # 文件扩展名与文件类型映射表

    # 默认文件类型,默认为text/plain
    default_type  application/octet-stream;

    #access_log off; #取消服务日志    

    # 设定自定义日志格式, main 为定义的格式名称
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    # 配置访问日志记录保存在哪个文件,以及日志格式
    #access_log  logs/access.log  main;

    # 使用高效文件传输,提升传输性能。启用后才能使用 tcp_nopush ,是指当数据表累积一定大小后才发送,提高了效率
    sendfile        on; 
    #tcp_nopush     on;

    # 设置客户端与服务端请求的超时时间,使用长连接,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗
    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 开启 gzip 压缩
    #gzip  on;

    # 虚拟主机服务 可以配置多个
    server {
        #监听端口
        listen       80;

        #监听地址
        server_name  localhost;

        #charset koi8-r;

        # 配置访问日志记录保存在哪个文件,以及日志格式
        #access_log  logs/host.access.log  main;

        # 路由规则
        location / {
            # 站点根目录,即网站程序存放目录 
            root   html;

            # 首页排序
            index  index.html index.htm;
        }

        # 错误页面
        #error_page  404              /404.html;

        # 将服务器错误页面重定向到静态页面/50x.html
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
        # 将PHP脚本代理到在127.0.0.1:80上侦听的Apache
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        # 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # 将PHP脚本代理到在127.0.0.1:9000上侦听的FastCGI服务器
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # 如果Apache的文档根目录与nginx的文档根目录一致,则拒绝对.htaccess文件的访问
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # 另一个使用基于IP,基于名称和基于端口配置的虚拟主机
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    
    #    ssl_certificate      cert.pem; # 服务的证书
    #    ssl_certificate_key  cert.key; # 证书密钥

    #    ssl_session_cache    shared:SSL:1m; # 会话缓存
    #    ssl_session_timeout  5m; # 会话超时时间

    #    ssl_ciphers  HIGH:!aNULL:!MD5; # 加密算法
    #    ssl_prefer_server_ciphers  on; # 启动加密算法

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

# 常见配置变量

参数名 参数含义
$remote_addr 记录客户端的ip地址
$remote_user 记录客户端用户名称,一般为:'-'
$time_local 记录访问时间与时区
$request 记录请求的url与http协议
$status 记录响应状态码
$body_bytes_s ent 记录发送给客户端文件主体内容大小
$http_referer 记录用户从哪个链接跳转过来的
$http_user_agent 用户代理信息,一般是记录客户端浏览器的相关信息器
$http_x_forwarded_for 通过代理服务器来记录客户端的ip

# 参考

更新时间: 9/21/2020, 2:48:49 AM