首页 > 代码库 > Nginx 配置文件

Nginx 配置文件

       Nginx 服务启动时会读入配置文件,后续的行为则按照配置文件中的指令进行。Nginx 的配置文件是纯文本文件,默认安装 Nginx 后,其配置文件均在 /usr/local/nginx/conf/ 目录下。其中,nginx.conf  为主配置文件。配置文件中以 # 开始的行,或者是前面有若干空格或者 TAB 键,然后再跟 # 的行,都被认为是注释。这里只是了解主配置文件的结构。

        Nginx 配置文件是以 block(块)形式组织,每个 block 都是以 “{}” 表示,block 分为几个层级,整个配置文件为 main 层级,即最大的层级;在 main 层级下可以有 event、http 、mail 等层级,而 http 中又会有 server block,server block中可以包含 location block。

        每个层级可以有自己的指令(Directive),例如 worker_processes 是一个main层级指令,它指定 Nginx 服务的 Worker 进程数量。有的指令只能在一个层级中配置,如worker_processes 只能存在于 main 中,而有的指令可以存在于多个层级,在这种情况下,子 block 会继承 父 block 的配置,同时如果子block配置了与父block不同的指令,则会覆盖掉父 block 的配置。指令的格式是“指令名 参数1 参数2 … 参数N;”,注意参数间可用任意数量空格分隔,最后要加分号。

        下图是 Nginx 配置文件通常结构图示。

技术分享

以下是在 Ubuntu 12.04 系统成功安装 Nginx 之后的主配置文件:

#Nginx服务器正常启动时会读取该配置文件,以下的值都是默认的,若需要可自行修改;
#以下是配置选项

#Nginx worker进程运行的用户以及用户组
#语法格式:user  username[groupname]
#user  nobody;

#Nginx worker 进程个数
worker_processes  1;

#error 日志设置
#语法格式:error /path/file level
#其中/path/file是一个具体文件;level是日志的输出级别,其取值如下:
#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;

#保存master进程ID的pid文件存放路径
#语法格式:pid path/file
#pid        logs/nginx.pid;

#事件类配置项
#一般有以下几种配置:
#1、是否打开accept锁
#   语法格式:accept_mutex [on | off];
#2、lock文件的路径
#   语法格式:lock_file  path/file;
#3、使用accept锁后到真正建立连接之间的延迟时间
#   语法格式:accept_mutex_delay Nms;
#4、批量建立新连接
#   语法格式:multi_accept [on | off];
#5、选择事件模型
#   语法格式:use [kqueue | rtisg | epoll | /dev/poll | select | poll | eventport];
#6、每个worker进行的最大连接数
#   语法格式:worker_connections number;
events {
    worker_connections  1024;
}


#以下是http模块
http {
    include       mime.types;
    default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

#server块
#   每个server块就是一个虚拟主机,按照server_name来区分
    server {
#监听端口
        listen       80;
#主机名称
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
#location语法:location[= | ~ | ~* | ^~ | @] /uri/ {}
        #location尝试根据用户请求中的URI来匹配 /uri表达式,若匹配成功,则执行{}里面的配置来处理用户请求
#以下是location的一般配置项
#1、以root方式设置资源路径
#   语法格式:root path;
#2、以alias方式设置资源路径
#   语法格式:alias path;
#3、访问首页
#   语法格式:index file...;
#4、根据HTTP返回码重定向页面
#   语法格式:error_page code [code...] [= | =answer-code] uri | @named_location;
#5、是否允许递归使用error_page
#   语法格式:recursive_error_pages [on | off];
#6、try_files
#   语法格式:try_files path1 [path2] uri;
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #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;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # 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;
    #    }
    #}

}


参考资料:

《深入理解Nginx》

《Nginx模块开发入门》

《Nginx开发从入门到精通》

Nginx 配置文件