跳转至

Nginx配置文件详解

一些有帮助的文档:

Nginx 配置详解 | 菜鸟教程 (runoob.com)

源码安装后的默认配置

配置文件中关键字都可以在官网文档Alphabetical index of directives (p2hp.com) 中进行搜索。并给出关键字的设置范围。

  1. 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  2. events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3. http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  4. server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  5. location块:配置请求的路由,以及各种页面的处理情况
[root@VM-0-16-centos conf]# cd /usr/local/webserver/nginx/conf/
[root@VM-0-16-centos conf]# cat nginx.conf | grep -v "^[[:blank:]]*#"  | grep -v '^#' | grep -v '^$'  #去掉注释
worker_processes  1;  
#nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,
#并维护工作进程。工作进程对请求进行实际处理。nginx采用基于事件的模型
#和依赖于操作系统的机制来有效地在工作进程之间分发请求。工作进程的数量
#在配置文件中定义,并且可以针对 给定配置 或 自动调整 。 此处值可以设
#置成数字,也可以设置成auto  详情解释:https://nginx.p2hp.com/en/docs/ngx_core_module.html#worker_processes

events {
    worker_connections  1024;
    #单个后台worker process进程的最大并发链接数
}
http {
    include       mime.types;
#      mime.types 设定mime类型(邮件支持类型),类型由mime.types文件定义
#      include 在配置中包含另一个或与指定文件匹配的文件。包含的文件应由语法正确的指令和块组成。
    default_type  application/octet-stream;
    #default_type  定义响应的默认MIME类型。可以使用类型指令设置文件扩展名映射到MIME类型。
    sendfile        on;
    # sendfile 启用或禁用 sendfile()的使用.从 nginx 0.8.12 和 FreeBSD 5.2.1 开始,可以使用 aio 来预加载数据 为:sendfile()
    # https://nginx.p2hp.com/en/docs/http/ngx_http_core_module.html#sendfile
    keepalive_timeout  65;
    #  keepalive_timeout  设置一个超时,在此期间,服务器端的保持活动客户端连接将保持打开状态
    server {
        listen       80;
        # listen 设置IP的地址和端口,或服务器接受请求的UNIX域套接字的路径。可以指定地址和端口,或者只能指定地址或端口。地址也可以是主机名
        server_name  localhost;
        # server_name 设置虚拟服务器的名称
        location / {
        # location 根据请求 URI 设置配置。
            root   html;
            # root 设置请求的根目录
            index  index.html index.htm;
            # 定义将用作索引的文件。 名称可以包含变量。 按指定顺序检查文件。 列表的最后一个元素可以是具有绝对路径的文件。
        }
        error_page   500 502 503 504  /50x.html;
        # 定义将为指定错误显示的 URI。 值可以包含变量。
        location = /50x.html {
            root   html;
        }
    }
}

完整的默认nginx配置


user nginx; 
# 使用专门的nginx用户来运行Nginx可以确保该进程的权限仅限于其必要的操作。即使攻击者成功利用某些漏洞入侵Nginx,攻击者也只能获得nginx用户的权限,而不是root权限。这样可以降低潜在的攻击面
#user  定义工作进程使用的用户,推荐使用nginx用户
worker_processes  1;
#nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,
#并维护工作进程。工作进程对请求进行实际处理。nginx采用基于事件的模型
#和依赖于操作系统的机制来有效地在工作进程之间分发请求。工作进程的数量
#在配置文件中定义,并且可以针对 给定配置 或 自动调整 。 此处值可以设
#置成数字,也可以设置成auto  详情解释:https://nginx.p2hp.com/en/docs/ngx_core_module.html#worker_processes

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# 定义错误日志和级别

#pid        logs/nginx.pid;
# 定义一个文件,该文件将存储主进程的进程ID。 默认在 logs/nginx.pid



events {
    worker_connections  1024;
    # 单个后台worker process进程的最大并发链接数
}


http {
    include       mime.types;
    # mime.types 设定mime类型(邮件支持类型),类型由mime.types文件定义
    # include 在配置中包含另一个或与指定文件匹配的文件。包含的文件应由语法正确的指令和块组成。
    default_type  application/octet-stream;
    # default_type  定义响应的默认MIME类型。可以使用类型指令设置文件扩展名映射到MIME类型。

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    # 指定日志格式。 格式的名字  定义要记录哪些东西
    # 需要记录哪些字段,可以从此网页上查看
    # https://nginx.p2hp.com/en/docs/http/ngx_http_core_module.html#variables_hash_max_size
    # 例如如下
    # $bytes_sent
    # 发送到客户端的字节数
    # $connection
    # 连接序列号
    # $connection_requests
    # 通过连接发出的当前请求数 (1.1.18)
    # $msec
    # 以秒为单位的时间,日志写入时分辨率为毫秒
    # $pipe
    # “” if request was pipelined, “” otherwise p.
    # $request_length
    # 请求长度(包括请求行、标头和请求正文)
    # $request_time
    # 请求处理时间(以秒为单位),分辨率为毫秒;
    # $status
    # 响应状态
    # $time_iso8601
    # ISO 8601 标准格式的当地时间
    # $time_local
    # 通用日志格式的本地时间


    #access_log  logs/access.log  main;
    # 定义访问日志 路径 及格式

    sendfile        on;
    # sendfile 启用或禁用 sendfile()的使用.从 nginx 0.8.12 和 FreeBSD 5.2.1 开始,可以使用 aio 来预加载数据 为:sendfile()
    #tcp_nopush     on;
    # 启用或禁用FreeBSD上的套接字选项或Linux上的套接字选项。仅当使用sendfile时,才会启用这些选项。启用该选项允许TCP_NOPUSHTCP_CORK

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #  keepalive_timeout  设置一个超时,在此期间,服务器端的保持活动客户端连接将保持打开状态

    #gzip  on;
    #启用或禁用响应的 gziping。

    server {
        listen       80;
        # listen 设置IP的地址和端口,或服务器接受请求的UNIX域套接字的路径。可以指定地址和端口,或者只能指定地址或端口。地址也可以是主机名
        server_name  localhost;
                # server_name 设置虚拟服务器的名称
        #charset koi8-r;
        # 将指定的字符集添加到“内容类型” 响应标头字段。

        #access_log  logs/host.access.log  main;
        # 这个server的访问日志

        location / {
        # location 根据请求 URI 设置配置。
            root   html;
            # root 设置请求的根目录
            index  index.html index.htm;
            # 定义将用作索引的文件。 名称可以包含变量。 按指定顺序检查文件。 列表的最后一个元素可以是具有绝对路径的文件。
        }

        #error_page  404              /404.html;
         # 定义将为指定错误显示的 URI。 值可以包含变量。

        # redirect server error pages to the static page /50x.html
        # 将服务器错误页面重定向到静态页面/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
        # 在127.0.0.1:80上将PHP脚本代理到Apache监听
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        # 设置代理服务器的协议和地址,以及应映射位置的可选URI。作为协议,可以指定“”或“”。
        # 地址可以指定为域名或IP地址,以及可选端口。 可以设置一组服务器,用服务器组进行设置
        # https://nginx.p2hp.com/en/docs/http/ngx_http_proxy_module.html#proxy_pass
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # 将PHP脚本传递到FastCGI服务器,在127.0.0.1:9000上监听
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    设置 FastCGI 服务器的地址。 地址可以指定为域名或 IP 地址, 和一个端口:
        #    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
        # 如果Apache的文档根与nginx的文档根一致,则拒绝访问.htaccess文件
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    # 另一个使用基于IP、名称和端口的配置组合的虚拟主机
    #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;
    #    为给定的虚拟服务器指定具有PEM格式证书。如果除了主证书之外还应指定中间证书,则应在同一文件中按以下顺序指定它们:先指定主证书,然后指定中间证书。PEM格式的密钥可以被放置在相同的文件中。
    #    ssl_certificate_key  cert.key;
    #    key格式的证书

    #    ssl_session_cache    shared:SSL:1m;
    #    设置存储会话参数的缓存的类型和大小。
    #    ssl_session_timeout  5m;
    #    指定客户端可以重用会话参数的时间。

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    指定启用的密码。 密码以 OpenSSL库
    #    ssl_prefer_server_ciphers  on;
    #    指定服务器密码应优先于客户端 使用 SSLv3 和 TLS 协议时的密码
    #    

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

}