Nginx-配置文件

主配置文件(nginx.conf)

nginx.conf配置文件由三部分组成

worker_processes  1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个

events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
    worker_connections  1024;
}


http {
    #文件扩展名与文件类型映射表(是conf目录下的一个文件)
    include       mime.types;
    #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
    default_type  application/octet-stream;

    #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
    sendfile        on;
    
     #长连接超时时间,单位是秒
    keepalive_timeout  65;

 #虚拟主机的配置
    server {
    #监听端口
        listen       80;
        #域名,可以有多个,用空格隔开
        server_name  localhost;

	#配置根目录以及默认页面
        location / {
            root   /www/test80;
            index  index.html index.htm;
        }

	#出错页面配置
        error_page   500 502 503 504  /50x.html;
        #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }
        
    }
    
    
    #虚拟主机的配置
    server {
    #监听端口
        listen       81;
        #域名,可以有多个,用空格隔开
        server_name  localhost;

	#配置根目录以及默认页面
        location / {
            root   /www/test81;
            index  index.html index.htm;
        }

	#出错页面配置
        error_page   500 502 503 504  /50x.html;
        #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }        
    }
}

第一部分:全局块

从配置文件开始到events块之间的内容,主要会设置影响nginx服务器整体运行的配置指令

#user  nobody;
worker_processes  1;				--工作进程数,一般设置成内核数量相同,值越大处理并发越多
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;				--进程pid存放路径

第二部分:events块

events块主要影响nginx服务器与用户的网络连接

events {
    worker_connections  1024;				--单个工作进程的连接数
}

第三部分:http块

http块又包括http全局块和server块

  • http全局块:配置包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、连接请求数上限
  • server块:和虚拟主机有密切关系,每个http块可以包括多个server块,每个server块代表一个虚拟主机,每个server块也分为全局server块,以及可以同时包含多个location块。
    • 全局server块:最常见配置本虚拟主机的监听配置和主机名称、端口
    • location块:这块主要作用是基于nginx服务器接收URL进行匹配,对特定请求进行处理。地址定向、数据缓存和应答控制。还有许多第三方模块的配置在这里进行
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;					--超时时间
    #gzip  on;

    server {								--一个站点、一个虚拟主机
        listen       80;							--端口
        server_name  www.fan.cn;			--域名
        location / {
            root   html/www;							--目录
            index  index.html index.htm;				--页面
        }

        error_page  404              /404.html;			--404错误页面显示
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

server_name匹配规则

server_name用来配置域名或ip,我们可以在同一个server_name中配置多个域名

  • 完整匹配
    server中可以配置多个域名,例如:
server_name  www.fan.cn  cart.fan.cn;
  • 通配符匹配
server_name  *.fan.cn;

需要注意的是精确匹配的优先级大于通配符匹配和正则匹配。

  • 正则匹配
server_name ~^[0-9+]\.fan\.cn$;

正则匹配格式,必须以~开头。如果开头没有~,则nginx认为是精确匹配。在逻辑上,需要添加^$锚定符号。
~* 不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)
!~ 区分大小写不匹配
!~* 不区分大小写不匹配

location说明

用于配置指定路径

  • =:精确匹配路径,用于不含正则表达式的 uri 前,如果匹配成功,不再进行后续的查找;
location = /favicon.ico {  
    # 只匹配 /favicon.ico  
}
  • 不使用符号:前缀匹配,匹配所有以指定路径开头的请求。
location /images/ {  
    # 匹配所有以 /images/ 开头的请求  
} 
  • ~:用于表示uri包含正则表达式,并且区分大小写
location ~ \.php$ {  
    # 匹配以 .php 结尾的请求  
}  
  • ~*:用于表示uri包含正则表达式,并且不区分大小写
  • ^*:用于不含正则表达式的uri前,

预定义变量

Nginx 有一些常用的预定义变量,你可以在配置的任何位置使用它们

$arg_query参数名: 获取Query参数中的指定参数名的值。
$args: 请求中的参数字符串。
$binary_remote_addr: 客户端 IP 地址(二进制格式)。
$body_bytes_sent: 发送给客户端的字节数。
$bytes_sent: 发送给客户端的总字节数。
$connection: 连接序列号。
$connection_requests: 已处理的当前连接的请求数量。
$content_length: 请求头中的 Content-Length 字段。
$content_type: 请求头中的 Content-Type 字段。
$cookie_COOKIE: 请求中的指定 Cookie 值。
$document_root: 当前请求的根目录。
$document_uri: 请求的 URI(不包含参数)。
$host: 请求中的主机头字段。
$hostname: 请求的主机名。
$is_args: 如果请求参数存在,则为 "?",否则为空字符串。
$limit_rate: 限制客户端请求的速率。
$msec: 当前时间戳(毫秒级)。
$nginx_version: 当前 NGINX 版本号。
$pid: 当前 NGINX 进程 ID。
$query_string: 请求的查询字符串。
$realpath_root: 请求根目录的真实路径。
$remote_addr: 客户端 IP 地址。
$remote_port: 客户端端口号。
$remote_user: HTTP 认证的用户名。
$request: HTTP 请求行(例如:GET /index.html HTTP/1.1)。
$request_body: 请求的主体内容。
$request_completion: 请求的完成状态("OK" 或空)。
$request_filename: 当前请求的文件路径。
$request_length: 请求的长度(包括请求行、头部和主体)。
$request_method: 请求的 HTTP 方法(例如:GET、POST)。
$request_time: 请求处理时间(秒)。
$request_uri: 请求的 URI(包括参数)。
$scheme: 请求的协议(http 或 https)。
$sent_http_HEADER: 发送给客户端的响应头字段值。
$server_addr: 服务器 IP 地址。
$server_name: 服务器名称。
$server_port: 服务器端口号。
$server_protocol: 服务器协议(例如:HTTP/1.1)。
$status: 服务器响应的 HTTP 状态码。
$tcpinfo_rtt: 客户端到服务器的往返时延(RTT)。
$tcpinfo_rttvar: RTT 方差。
$tcpinfo_snd_cwnd: 发送方拥塞窗口大小。
$time_iso8601: 当前时间(ISO 8601 格式)。
$time_local: 当前时间(本地时间格式)。
$uri: 请求的 URI(不包含参数)。
$variable: 自定义的变量值。
$http_HEADER: 请求头中的指定字段值。
$http_accept: 客户端发送的 Accept 头部。
$http_accept_encoding: 客户端发送的 Accept-Encoding 头部。
$http_accept_language: 客户端发送的 Accept-Language 头部。
$http_cache_control: 客户端发送的 Cache-Control 头部。
$http_connection: 客户端发送的 Connection 头部。
$http_cookie: 客户端发送的 Cookie 头部。
$http_host: 请求中的主机头字段。
$http_referer: 引导用户代理到当前页面的来源页面。
$http_user_agent: 客户端的用户代理字符串。
$http_upgrade: 客户端发送的 Upgrade 头部。
$http_via: 客户端发送的 Via 头部。
$http_x_forwarded_for: 客户端请求中包含的 X-Forwarded-For 头部信息,表示请求经过的代理服务器 IP 地址。
$http_x_real_ip: 客户端请求中包含的 X-Real-IP 头部信息,表示客户端的真实 IP 地址。

负载均衡流量分配策略

轮询(默认):逐一分发,如果服务器down掉会自动剔除

    upstream myserver{
		server 127.0.0.1:8080;
		server 127.0.0.1:8081;
	}

权重(Weight):权重越高,被分配流量越多

    upstream myserver{
		server 127.0.0.1:8080 weight=1;
		server 127.0.0.1:8081 weight=8;
	}

ip_hash:按ip的hash结果分配,这样的话每个ip固定分配到一个服务器上,可以解决session问题

    upstream myserver{
                ip_hash;
		server 127.0.0.1:8080;
		server 127.0.0.1:8081;
	}

fair:按服务器响应时间分配,响应时间短的服务器优先分配

    upstream myserver{
		server 127.0.0.1:8080;
		server 127.0.0.1:8081;
                fair;
	}
posted @ 2022-05-25 23:21  .Neterr  阅读(48)  评论(0编辑  收藏  举报