Nginx.conf配置详解


# 全局配置
# 指定可以运行nginx服务的用户和用户组,只能在全局块配置
#user [user] [group]
# 注释user指令或配置为nobody表示所有用户都可运行
# user指令在Windows上不生效,配置此项会生成警告
#user  nobody;

# Nginx 进程数,一般设置为和CPU核心数一样;支持的配置项为:number | auto
# 如下配置进程数为:1个master,1个worker
worker_processes  1;

# Nginx 错误日志级别及存放路径
# debug 级别日志需要编译时使用 --with-debug 开启
#error_log [path] [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;

# event配置:主要影响Nginx服务器与用户的网络连接。对Nginx服务器的性能影响较大,需根据实际情况灵活调整
events {
    # 当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时唤醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。在Nginx服务器的多进程下,就有可能出现这样的问题。
    # 开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢
    # 默认是开启状态,只能在events块中进行配置
    # accept_mutex on | off;

    # 如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。
    # 如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量。
    # 默认是off状态,只能在event块配置
    # multi_accept on | off;

    # 指定使用哪种网络IO模型,method可选择的内容有:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport,一般操作系统不是支持上面的所有模型。
    # 只能在events块中进行配置
    # use method
    # use epoll;
    
    # 设置允许每一个worker process同时开启的最大连接数,当每个工作进程接受的连接数超过这个值时将不再接收连接
    # 当所有的工作进程都接收满时,连接进入logback,logback满后连接被拒绝
    # 只能在events块中进行配置
    # 注意:这个值不能超过系统支持打开的最大文件数,也不能超过单个进程支持打开的最大文件数,具体可以参考这篇文章:https://cloud.tencent.com/developer/article/1114773
    worker_connections  1024;
}

# http配置,使用最多的部分。代理、缓存、日志定义等绝大多数功能和第三方模块都在这里配置
http {
    # http 全局块
    # 常用的浏览器中,可以显示的内容有HTML、XML、GIF及Flash等种类繁多的文本、媒体等资源,浏览器为区分这些资源,需要使用MIME Type。换言之,MIME Type是网络资源的媒体类型。Nginx服务器作为Web服务器,必须能够识别前端请求的资源类型。
    # include指令,用于包含其他的配置文件,可以放在配置文件的任何地方,但是要注意你包含进来的配置文件一定符合配置规范,比如说你include进来的配置是worker_processes指令的配置,而你将这个指令包含到了http块中,着肯定是不行的,上面已经介绍过worker_processes指令只能在全局块中。
    # 下面的指令将mime.types包含进来,mime.types和nginx.conf同级目录,不同级的话需要指定具体路径
    include       mime.types;
    
    # 配置默认文件类型,如果不加此指令,默认值为text/plain。
    # 此指令还可以在http块、server块或者location块中进行配置。
    default_type  application/octet-stream;

    # 日志格式预定义,其他地方可引用;只能在http块中进行配置
    #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配置,此指令可以在http块、server块或者location块中进行设置
    # 记录Nginx服务器提供服务过程中应答前端请求的日志
    # access_log path [format [buffer=size]]
    # 如果你要关闭access_log,你可以使用下面的命令
    # access_log off;
    #access_log  logs/access.log  main;

    # 开启高效传输模式,可以在http块、server块或者location块中进行配置
    sendfile        on;

    # 设置sendfile最大数据量,此指令可以在http块、server块或location块中配置
    # sendfile_max_chunk size;
    # 其中,size值如果大于0,Nginx进程的每个worker process每次调用sendfile()传输的数据量最大不能超过这个值(这里是128k,所以每次不能超过128k);如果设置为0,则无限制。默认值为0。
    # sendfile_max_chunk 128k;
    
    # 减少网络报文数量
    #tcp_nopush     on;

    # 配置连接超时时间,此指令可以在http块、server块或location块中配置。
    # 与用户建立会话连接后,Nginx服务器可以保持这些连接打开一段时间
    # timeout,服务器端对连接的保持时间。默认值为75s;header_timeout,可选项,在应答报文头部的Keep-Alive域设置超时时间:“Keep-Alive:timeout= header_timeout”。报文中的这个指令可以被Mozilla或者Konqueror识别。
    # keepalive_timeout timeout [header_timeout]
    # 下面配置的含义是,在服务器端保持连接的时间设置为120s,发给用户端的应答报文头部中Keep-Alive域的超时时间设置为100s。
    # keepalive_timeout 120s 100s
    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 配置单连接请求数上限,此指令可以在http块、server块或location块中配置。
    # Nginx服务器端和用户端建立会话连接后,用户端通过此连接发送请求。指令keepalive_requests用于限制用户通过某一连接向Nginx服务器发送请求的次数。默认是100
    # keepalive_requests number;

    # 是否开启压缩。开启后,可以看到http响应头的Content-Encoding值为gzip
    #gzip  on;

    # 可以包含多个 server 块
    server {
        # 有三种配置方法
        # 第一种
        # listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
        # 第二种
        # listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
        # 第三种(可以不用重点关注)
        # listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
        # 只监听来自127.0.0.1这个IP,请求8000端口的请求
        # listen 127.0.0.1:8000;
        # 只监听来自127.0.0.1这个IP,请求80端口的请求(不指定端口,默认80)
        # listen 127.0.0.1;
        # 监听来自所有IP,请求8000端口的请求
        # listen 8000;
        # 监听来自所有IP,请求8000端口的请求
        # listen *:8000;
        # 只监听来自127.0.0.1这个IP,请求8000端口的请求
        # listen localhost:8000;
        # 配置项参数见说明
        # listen指令的使用看起来比较复杂,但其实在一般的使用过程中,相对来说比较简单,并不会进行太复杂的配置
        # 监听的端口
        listen       8081;

        # 虚拟主机的名称,多个名称使用空格隔开
        # 在name 中可以使用通配符“*”,但通配符只能用在由三段字符串组成的名称的首段或尾段,或者由两段字符串组成的名称的尾段
        # server_name myserver.* *.myserver.com
        # name配置支持正则表达式。优先级说明:
        #    ① 准确匹配server_name
        #    ② 通配符在开始时匹配server_name成功
        #    ③ 通配符在结尾时匹配server_name成功
        #    ④ 正则表达式匹配server_name成功
        # 如果server_name被处于同一优先级的匹配方式多次匹配成功,则首次匹配成功的虚拟主机处理请求
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # 可以包含多个 location,location 指令用于匹配 uri
        # 基于Nginx服务器接收到的请求字符串(server_name/uri-string),对除虚拟主机名称(也可以是IP别名)之外的字符串(/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能
        # location [ = | ~ | ~* | ^~ ] uri { ... }
        # 可选项说明
        #   =   用于标准uri前,要求请求字符串与uri严格匹配。如果已经匹配成功,就停止继续向下搜索并立即处理此请求
        #   ~   用于表示uri包含正则表达式,并且区分大小写。会对uri中的符号进行编码处理
        #   ~*  用于标准uri前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配
        #   ^~  用于表示uri包含正则表达式,并且不区分大小写。注意如果uri包含正则表达式,就必须要使用“~”或者“~*”标识
        # 匹配规则(不添加可选项时)
        #   1、在server块的多个location块中搜索是否有标准uri和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个
        #   2、用location块中的正则uri和请求字符串匹配,当第一个正则uri匹配成功,结束搜索,并使用这个location块处理此请求
        #   3、如果正则匹配全部失败,就使用刚才记录的匹配度最高的location块处理此请求
        location / {
            # 网站根目录
            root   html;
            # 默认首页文件
            index  index.html index.htm;
            # 禁止访问的IP地址,可以为 all
            # deny 10.148.229.83;
            # 允许访问的IP地址,可以为 all
            # allow 10.148.229.83;
        }

        # 404 页面配置
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        # 50x 页面配置
        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;
    #    }
    #}

}

  • listen配置说明
    • address:监听的IP地址(请求来源的IP地址),如果是IPv6的地址,需要使用中括号“[]”括起来,比如[fe80::1]等
    • port:端口号,如果只定义了IP地址没有定义端口号,就使用80端口。这边需要做个说明:要是你压根没配置listen指令,那么那么如果nginx以超级用户权限运行,则使用*:80,否则使用*:8000。多个虚拟主机可以同时监听同一个端口,但是server_name需要设置成不一样
    • default_server:假如通过Host没匹配到对应的虚拟主机,则通过这台虚拟主机处理。具体的可以参考这篇文章,写的不错
    • backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在FreeBSD中默认为-1,其他平台默认为511
    • accept_filter=filter,设置监听端口对请求的过滤,被过滤的内容不能被接收和处理。本指令只在FreeBSD和NetBSD 5.0+平台下有效。filter可以设置为dataready或httpready,感兴趣的读者可以参阅Nginx的官方文档
    • bind:标识符,使用独立的bind()处理此address:port;一般情况下,对于端口相同而IP地址不同的多个连接,Nginx服务器将只使用一个监听命令,并使用bind()处理端口相同的所有连接
    • ssl:标识符,设置会话连接使用SSL模式进行,此标识符和Nginx服务器提供的HTTPS服务有关

参考地址:Nginx配置文件详解

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx配置文件(nginx.conf)是Nginx服务器的主要配置文件,它定义了服务器的基本设置、监听选项、虚拟主机(server blocks)、路由规则和安全策略等。以下是nginx.conf的一些关键部分和配置详解: 1. **Server Block (虚拟主机)**: 每个`server`块代表一个独立的网站或服务,包含了域名、IP地址、端口、文档根目录等信息。例如: ``` server { listen 80; server_name example.com; root /var/www/example.com; } ``` 这里,Nginx监听80端口,当请求example.com时,它将从`/var/www/example.com`目录下提供内容。 2. **Listen and Connections**: `listen`指令指定Nginx监听的网络接口和端口。`backlog`参数设置连接队列长度。 ```yaml listen 80; # 默认监听HTTP listen [::]:443 ssl; # 双向绑定并加密HTTPS ``` 3. **Location Blocks (路由)**: `location`指令定义了URL路径的处理规则,包括文件服务、动态内容、反向代理等。例如: ``` location /api/ { proxy_pass http://backend/; } ``` 4. **Access Control**: `access_log`用于记录访问日志,`limit_rate`设置带宽限制,`auth_basic`用于基本身份验证。 ```bash access_log /var/log/nginx/access.log combined; limit_rate 100m; auth_basic "Restricted Area"; ``` 5. **Error Handling**: `error_page`定义错误代码对应的页面,`error_document`处理自定义错误。 ```nginx error_page 404 /404.html; error_page 500 /500.html; ``` 6. **SSL/TLS Configuration**: 如果需要使用HTTPS,会配置`ssl_certificate`, `ssl_certificate_key`以及加密算法等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值