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;
}