博客列表 >Nginx nginx.conf的配置文键

Nginx nginx.conf的配置文键

有什么是忘不了的的博客
有什么是忘不了的的博客原创
2020年05月24日 22:36:53892浏览
**nginx.conf配置文键**

# `主要分为` 全局模块、events模块、http模块、server模块、location模块、
# `这些模块的命令`,有些是自己的独有的,有些是可以在其子模块中使用的。
# `模块命令的优先级`,最近原则,子模块中有定义就用子模块,没有找到就去父模块中找。

**各模块所在位置和含义**
# `全局模块` :从配置文件开始到 events之间。主要设置影响服务器整体运行的配置指令,指令作用域去全局的
# `events模块`:全局模块中,指令主要影响nginx服务器和用户的网路连接。
# `http模块`:全局模块中,nginx的代理、缓存和日志等绝大数的功能和第三方模块配置都放在这个模块。
# `server模块`:在http模块中,配置'虚拟主机'相当于,可以有多个server模块,各模块互不影响。
# `location模块`:server模块中,严格意义来说是server模块的一条指令,匹配请求过来的路由,可以配置多个location模块。

##配置运行nginx服务器用户(组)。
user nginx [group]; `user`是指令,`nginx`是用户,`group`使用户组,
    *允许所有人访问*1、直接注释该命令,2、设置user nobody nobody
## 配置允许生成的worker process数
#worker_processes number | auto; `number` 具体的数组nginx进程数。`auto`系统自动配置进程数。
worker_processes auto;
#错误日志的存放路径,
#错误级别[debug|info|notice|warn|error|crit|alert|emerg]
#由低到高,默认是error,会记录更高级别的错误。
error_log /var/log/nginx/error.log;
#配置nginx进程pid存放路径,保存的是当前运行程序的主进程号。
pid /run/nginx.pid;

# 加载动态模块. See /usr/share/doc/nginx/README.dynamic.
#该命令需要用户对该目录有写的权限,该指令可以写在任意地方。
 include /usr/share/nginx/modules/*.conf;

*events模块*
events {
#配置worker process同时开启最大链接数,需要开启 multi_accept 配置。
    worker_connections 1024;
#网络连接序列化,防止多个进程对连接的争抢。`no`开启,默认选项,`off`关闭
*惊群*:当你有多个进程处于等待连接的时候,突然来了一个连接,这些进程都被唤醒,然后争抢这个连接,导致不必要的开销。
#accept_mutex就是来解决争抢问题的,通过判断锁的状态来选择一个进程来处理该连接,这样就没有争抢了。
`问题`:当网站访问量很高,有多个连接过来时候,在一个一个去分配进程就会很慢,不如让进程过来抢连接。
`总结`:当网站流量小的时候,开启网络链接序列化,当网站流量大的时候关闭网络链接序列化。
    accept_mutex on;
#是否允许一个进程同时接收多个网路连接
#默认关闭,开启为on,
    multi_accept off;
#事件驱动模式
#允许的选择 [select|poll|kqueue|epoll|rtsig|/dev/poll|eventport]
    use poll

}
http {
*定义请求日志模板*
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
*例子:58.247.212.239 - - [23/May/2020:12:59:11 +0800] "GET http://212.64.**.**/laravel.php HTTP/1.1" 404 153 
        "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"*
    `$remote_addr`:用户机器的ip地址    58.247.212.239
    `$remote_user`:记录客户端用户名称            为空
    `$time_local`:获取本地时间,也就是请的时间点。 [23/May/2020:12:59:11 +0800] 
    `$request`:用户的请求方式+请求路径+协议。     "GET http://212.64.**.**/laravel.php HTTP/1.1"
    `$status`:请求状态码,[200|404|500]等       404
    `$body_bytes_sent`:获取请求体的大小。        153
    `$http_referer`:从哪个页面跳转过来的。       为空 有可能是直接访问的路径
    `$http_user_agent`:获取用户使用的浏览器。  "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) 
                           Gecko/20100101 Firefox/57.0" 
    `$http_x_forwarded_for`:用户机器的ip地址。 为空


*请求日志*
`main`:日志记录的模板格式名称。
    access_log  /var/log/nginx/access.log  main;

`是否允许sendfile方式传输文件`
#参考:http://xiaorui.cc/archives/1673
*理解:*简单说,sendfile是个比 read 和 write 更高性能的系统接口, 
        不过需要注意的是,sendfile 是将 in_fd 的内容发送到 out_fd 。而 in_fd 不能是 socket , 
        也就是只能文件句柄。 所以当 Nginx 是一个静态文件服务器的时候,
        开启 SENDFILE 配置项能大大提高 Nginx 的性能。 但是当 Nginx 是作为一个反向代理来使用的时候,
        SENDFILE 则没什么用了,因为 Nginx 是反向代理的时候。 in_fd 就不是文件句柄而是 socket,
        此时就不符合 sendfile 函数的参数要求了。
    sendfile            on;
`允许sendfile()传输的数据量最大值` 这两条命令允许,写在:http块、server块、location块中。
    sendfile_max_chunk 128k;

    tcp_nopush          on;
    tcp_nodelay         on;
`链接超时时间限制` 可以设置第二个参数100 实际是在65s就结束该连接,但是返回给用户报文中Keep-alive域的超时时间设置为100s。
    keepalive_timeout   65s 100s;
`单连接请求上限` 一个链接最多可以发送多少个请求。默认是100个。可以写在,http模块、server模块、location模块中
    keepalive_requests 100;
    types_hash_max_size 2048;
#定义MIME-Type,换言之,MIME-type是网络资源的媒体类型,
#nginx服务器作为web服务,必须能识别前端请求的资源类型。
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
`server模块`
    server {
        `监听网络请求的ip和端口`
        listen       80 default_server; `监听所有的80端口,设置该虚拟主机为ip:port的默认主机`
        listen       [::]:80 default_server; `监听的是ipv6的地址+80端口,设置该虚拟主机为ip:port的默认主机`
        server_name  *.nginx.com ~^www\.\d+\.c*;  `设置虚拟主机的名称 `可以是一个名称也可以是多个空格隔开。
                                可以使ip可以是域名,允许用正则。`~`表示正则匹配标记。
        root            /var/www/html;`配置请求的根目录` 可以在http块、server块、located块下配置。
        include /etc/nginx/default.d/*.conf; `引入配置文件`
`location块`
        location [ = | ~ | ~* |^~ ]/uri  {
            #其中uri是待匹配的请求字符串,也就是请求路由。如/index.php
            # =  代表标准匹配(不含有正则)
            # ~  代表正则匹配(含有正则,区分大小写)
            # ~* 代表正则匹配(含有正则,不区分大小写)
            # ^~ 代表标准匹配,先进行前缀匹配,匹配到后就不再匹配之后的。
            #参考:https://www.ctolib.com/topics-129994.html
            ` `
            `更改location中的uri`相当于重定到向另外的目录/
            alias /var/www/html/wxgzh/public/ 比如说匹配了/index.php然后到alias指定目录去寻找index.php
            ` `
            `deny address|CIDR|all`*拒绝链接。* `address`某个具体的ip `CIDR`客户端的CIDR地`all`所有链接
            deny 192.168.1.1 #拒接 182.168.1.1的链接请求
            `allow` *允许的链接*
            allow 192.168.1.0 #允许 182.168.1.1 的链接
            deny all   #拒绝所有链接
            `你看这里先拒绝*.1.1的链接,在允许*.1.0的链接,在拒接所有的链接。那*.1.0的链接允许吗?允许的。
                因为当遇到匹配的值后就不会再往下匹配了。`
        }
        location ~ \.php$ {#匹配以.php结尾的路由
            `这些是吧接受到的请求交给 php-fmp来处理。要不就会进行下载`
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  PATH_INFO  $fastcgi_path_info;
                fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
                include        fastcgi_params;
        }
` `
        *错误页面* 
        `error_page`设置错误页面的指令。 `400`状态码。 `=403`实际返回给客户端的状态码。`/404.html`错误页面路由
        error_page 404 =403 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }



}



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议