配置文件
查看配置文件路径
root@nginx:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
默认的配置文件就在/usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
全局块
从开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏
- user 设置Nginx服务的系统用户
- worker_processes 工作进程数 和硬件CPU核数一致
- error_log nginx的错误日志
- pid nginx服务启动时候pid
-
events块
events块主要影响nginx服务器与⽤户的⽹络连接。
worker_connections 1024,标识每个workderprocess⽀持的最⼤连接数为1024http块
http块是对http请求的配置,也是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等 http下可配置多个server,如下实例记载nginx.conf。
default_type表示请求响应的默认数据类型
- include属性表示引入的意思,示例中表示nginx的配置文件引入了mime.types文件
- sendfile属性值为on表示启用sendfile,sendfile的作用是在底层拷贝数据的时候可以跳过应用,直接从内核拷贝到网卡,加快速度
keepalive_timeout表示长连接的一个保活时间,一个连接请求完并不是立马销毁,通过这个属性可以等一段时间,以便下次有请求继续用
server块
配置块代表配置一个虚拟机,用来启动并响应。
server中的listen属性表示监听的端口,不能和其它重复;
- server_name用来配置域名,分发请求的时候会根据访问的域名和配置的域名的对应关系分发;
location表示其中一个请求的地址 后面可以加斜杠,等于号等正则表达式方式匹配,其中的内容是对应的链接和页面,root表示页面所载目录。
upstream块
service反向服务地址加端口
- weight 权重
- max_fails 失败多少次认为主机已挂掉则,踢出
- fail_timeout 踢出后重新探测时间
- backup 备用服务
- max_conns 允许最大连接数
实例记载
nginx 目录: ```bash (base) dh@DHMacBook nginx % tree . ├── conf.d │ └── default.conf ├── fastcgi_params ├── koi-utf ├── koi-win ├── logs │ └── access-es.log ├── mime.types ├── nginx.conf ├── scgi_params ├── uwsgi_params └── win-utf
2 directories, 10 files
```bash
docker run -e TZ="Asia/Shanghai" -it -d -h nginx -p51001-51010:51001-51010 -v /root/***/nginx:/etc/nginx --restart=always --name nginx pub/nginx:v1
其中 nginx.conf 配置 假设部署nginx 的机器地址是11.11.11.13
以下访问地址变为:
http://11.11.11.13:51001/***
http://11.11.11.13:51001/***
http://11.11.11.13:51004/***
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
###################################################### KEYWORD #############################
upstream keywordserver {
server 11.11.11.11:51001;
}
server {
listen 51001;
server_name keywordserver;
location / {
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://keywordserver;
}
}
###################################################### END KEYWORD #############################
###################################################### AIWEB #############################
upstream aiwebserver {
server 11.11.11.12:51002;
server 11.11.11.11:51002;
}
server {
listen 51002;
server_name aiwebserver;
location / {
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://aiwebserver;
}
}
###################################################### END AIWEB #############################
###################################################### EVENT #############################
upstream eventgraphserver {
server 11.11.11.11:54004;
server 11.11.11.12:54004;
}
server {
listen 51004;
server_name eventgraphserver;
location / {
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://eventgraphserver;
}
}
###################################################### END EVENT #############################
}
指令语法
- 配置文件由指令和指令块(配置块)构成
- 每条指令以;分号结尾,指令与参数间以空格符号分隔
- 指令块以大括号{}将多条指令组织在一起,例如上面的event 块
- 指令块和左大括号直接要有空格。
- include 语句允许组合多个配置文件以提升可维护性,eg
include /etc/nginx/conf.d/*.conf;
- 使用# 符号添加注,提高可读性,注释必须是单行的,如果多行注释,那么每行都要以
#
开头。 - 使用$符号使用变量
- 部分指令的参数支持正则表达式
指令层级
```nginx user nobody; # main 级别配置,
events { use epoll; # events级别配置, nginx事件机制 }
http { # http 级别 nginx的http核心模块
server { # server 级别,一个server代表一个虚拟主机
location {
# location级别, 一个location代表一类url
}
}
}
<a name="P43dJ"></a>
## 日志设置
日志类型
- error.log
- access.log 用来定义日志级别,日志位置。
- log_format 设置日志格式
```bash
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;
常见的日志变量
$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user记录客户端用户名称
$request记录请求的URL和HTTP协议(GET,POST,DEL,等)
$status记录请求状态
$body_bytes_sent发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent发送给客户端的总字节数。
$connection连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent记录客户端浏览器相关信息
$request_length请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local通用日志格式下的本地时间
gzip 压缩
gzip压缩后页面大小可以变为原来的更小,提高用户浏览页面的访问速度
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 2;
gzip_min_length 100;
gzip_types application/javascript text/css text/xml;
gzip_disable "MSIE [1-6]\.";
gzip_vary off;
gzip配置的常用参数
gzip on|off; #是否开启gzip
gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css
gzip_vary on|off # 是否传输gzip压缩标志