Nginx 配置文件结构

nginx.conf 文件的结构

  • main: nginx 运行相关
  • events::与用户的网络连接相关
  • http:http协议有关的公共配置,代理,缓存,日志,以及第三方模块的配置
    • server: web服务相关的,提供http服务配置,可以配置多个web服务(多个server)
      • location:地址定向,数据缓存,应答控制,以及第三方模块的配置(可以理解为url端口后面"/,192.168.0.202:10080/zabbix,location就是/zabbix路径和服务器建立连接,可以多个)
示例
...;
...;

events {
...;
}

http {
	
	...;
	...;
	
	server {
		...;
		...;
		
		location ... {
				...;
				...;
		}		
	}

注意事项

  • 结构分层级关系,比如http>>server>>location
  • 每个模块层用符号{ 开始 符号} 结束
  • 配置以分号;结束(建议每行一条便于查看)

Nginx默认配置文件分析(默认yum安装)
centos7.6

main

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log info;
pid /run/nginx.pid;
worker_rlimit_nofile 65535;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

user nginx;
#运行worker子进程的用户,建议不要使用root用户,避免nginx被人利用漏洞进行账号获取权限,nginx账号默认是nologin
worker_processes auto;
#worker进程数量,auto默认值为当前CPU内核数,可以手动指定
error_log /var/log/nginx/error.log info;[ debug | info | notice | warn | error | crit ]
#全局错误日志定义类型,默认最后的日志级别不写为error级别
pid /run/nginx.pid;
#存储主进程的pid文件
worker_rlimit_nofile 65535;
#worker进程能打开的文件数量,受到ulimit -n限制
include /usr/share/nginx/modules/*.conf;
#include代表的包含其他的配置,只是没有放在main结构内,这样可以让配置文件变的简洁易看,也就是下面的 load_module,当然也可以直接写到配置里
在这里插入图片描述

events

use epoll;
worker_connections 65535;

use epoll;
#使用epoll多路复用,默认不写就是epoll事件
worker_connections 1024;
#单个worker进程的最大连接并发数,服务最高并发就是worker_connections*worker_processes
worker_connections不能大于worker_rlimit_nofile

http

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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

log_format main
#定义的日志格式,叫main
access_log
#指定http的连接日志存在路径和日志格式main(上面定义的)
sendfile
#减少磁盘文件底层的上下文切换和拷贝,提升性能(详细
tcp_nopush 与 tcp_nodelay 相反。不是为了尽可能快地推送数据包,它的目标是一次性优化数据的发送量
#tcp_nopush 关闭tcp的0.2秒的延迟确认,tcp_nodelay 开启小包组成MMS长度的大包发送(详细
keepalive_timeout
#保持一个长连接多少秒超时
types_hash_max_size
#指定了存储MIME type与文件扩展名的散列的最大大小,该值越大,散列的key就越稀疏,检索速度越快,但是会占用更多的内存;该值越小,占用的内存越小,但是冲突率就会上升,检索越慢。(MIME type
include /etc/nginx/mime.types;
#MIME type的文件存放位置,include 会加载mime.types下的配置
default_type
#如果MIME type文件里没有定义文件后缀给到浏览器识别,默认就是普通的文件流,直接下载(详细
在这里插入图片描述

server

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

listen 80 default_server;
#监听80端口的web服务,default_server当多个server才有意义,当请求域名没有匹配到server_name走的缺省server,不设置default_server默认为第一个server,[::]:80设置的ipv6地址加端口
server_name
#多个 server如何匹配问题,就是通过server_name设置域名,也可以下划线设置无效名,这个不是很好理解,通过测试,我的理解是一般给默认server使用的,防止默认server被域名匹配到
root /usr/share/nginx/html;
#location的资源目录
include /etc/nginx/default.d/*.conf;
#server配置可以写到别处,通过include加载,默认为/etc/nginx/default.d下

location

        location / {
          index xxx.html
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

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

location /
#"/“其实对应的就是"http://10.1.1.72/“这个url的最后一个”/”,也就location资源目录 /usr/share/nginx/html(server指定的root)下找资源,而"/"也就是没有指定,那就是默认的index.html文件名,当然也可以指定路径location /index.html
index xxx.html
#对于上面的默认名指定,再次http://10.1.1.72/就会访问到index指定的文件名xxx.html,而不是默认的index.html文件名
error_page 设置访问错误页面

多server匹配问题(测试结果)

1、listen 80; #只监听了端口

  • server_name访问,server匹配,匹配不上走默认default_server
  • IP地址+端口访问,走默认default_server,因为默认监听的都是端口,无法匹配上IP

2、listen 192.168.26.131:80; #监听了IP+端口

  • server_name访问,走默认default_server
  • IP地址+端口访问,server匹配,配置了多个一样,走第一个server

总结:多server匹配规则是先匹配IP,后匹配server_name,如果配置了多个server端口监听,配置了一个IP+端口,默认都走后者了(server_name也就无效)

main和events:http://nginx.org/en/docs/ngx_core_module.html
http:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页