yum install -y epel-release yum install nginx # 安装 EPEL源和nginx服务
/usr/share/nginx/html
/etc/nginx/nginx.conf
user nginx; # 运行用户 worker_processes auto; # 工作进程数量 error_log /var/log/nginx/error.log; # 错误日志文件的位置 pid /run/nginx.pid; # PID文件的位置
events { Use epoll; # 使用epoll模型 worker_connections 1024; # 每个进程处理1024个连接 }
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; server { listen 80 default_server; # 监听端口配置 listen [::]:80 default_server; server_name _; # 网站名称 charest utf-8 # 网页的默认字符集 root /usr/share/nginx/html; # 默认首页 include /etc/nginx/default.d/*.conf; location / { # 根目录配置 } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
location / { root /data/www/file # 指定实际目录绝对路径; autoindex on; # 开启目录浏览功能; autoindex_exact_size off; # 关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b; autoindex_localtime on; # 开启以服务器本地时区显示文件修改日期! }
Nginx内置了HTTP_STUB_STATUS状态统计模块,可使用nginx -V
查看安装的Nginx是否包含这个模块。
vim /etc/nginx/nginx.conf # 配置访问状态统计 location /status { # 设置访问位置 stub_status on; # 打开状态统计功能 access_log off; # 关闭此位置的日志记录 } systemctl restart nginx
访问localhost/status
Active connections: 1 # 当前的活动连接数 server accepts handled requests # 已经处理的连接信息 2 2 3 # 己处理的连接数 成功的TCP握手次数 已处理的请求数 Reading: 0 Writing: 1 Waiting: 0
Nginx基于授权的访问控制配置与Apache网页认证实现步骤基本一致:
# 第一步:使用htpasswd生成用户认证用户文件 htpasswd -c /etc/nginx/passwd.db admin New password: Re-type new password: # 如何命令不能使用,安装 httpd-tools chmod 400 /etc/nginx/passwd.db chown nginx /etc/nginx/passwd.db # --------------------------------- # 第二步:修改主配置文件,添加认证配置项 location /status { auth_basic "secret"; auth_basic_user_file /etc/nginx/passwd.db; stub_status on; access_log off; } # ---------------------------------- # 第三步:重启服务、访问测试 systectl restart nginx
# Nginx基于客户端的访问相比Apache配置更为简单,规则如下: deny IP/IP段 allow IP/IP段 # 规则从上往下执行,一旦匹配则停止,不再往下执行。 # 拒绝192.168.10.1访问网站,配置如下: location /status { deny 192.168.10.1; allow all; }
vi /etc/hosts # 在/etc/hosts中追加一行: ######################### 192.168.75.128 www.test.com 192.168.75.128 www.hr.com ######################### # 修改nginx配置文件 vim /etc/nginx/nginx.conf # 在文件最后一个}号前添加: ########################## include vhost/*.conf; ########################## # 在/etc/nginx目录下新建vhost目录,并在下面新test.conf与hr.conf两个域名配置文件,并作如下编辑。 vim test.conf ########################### server{ listen 192.168.75.131:80; server_name www.test.com; location / { root /data/test; index index.html; } } ############################ vim hr.conf ############################ server{ listen 192.168.75.131:80; server_name www.hr.com; location / { root /data/hr; index index.html; } } ############################ # 将公司网站文件test和hr都放到/data/目录下 # 配置完成后重启服务: systemctl restart nginx # 访问测试
# 为系统配置多个IP地址 ifconfig ens33:0 192.168.10.100 ifconfig ens33:1 192.168.10.200 # 编辑配置文件 vim /etc/nginx/nginx.conf ######################### server{ listen 192.168.75.100:80; server__name 192.168.75.100:80; ....................... } server{ listen 192.168.75.200:80; server__name 192.168.75.200:80; ....................... } ##########################
vim /etc/nginx/nginx.conf ########################## server{ listen 192.168.75.100:6666; server__name 192.168.75.100:6666; ....................... } server{ listen 192.168.75.100:8888; server__name 192.168.75.100:8888; ....................... } ###########################
Nginx日志主要分为两种:
访问日志主要记录客户端的请求。
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; access_log off; # 关闭访问日志,当前作用域下的所有的请求日志都被关闭
选项说明:
选项 | 说明 |
---|---|
path | 指定日志的存放位置。 |
format | 指定日志的格式。默认使用预定义的combined。 |
buffer | 用来指定日志写入时的缓存大小。默认是64k。 |
gzip | 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。 |
flush | 设置缓存有效时间。如果超过flush指定的时间,缓存中的内容将被清空。 |
if | 条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志 |
可以应用access_log指令的作用域分别有http,server,location,limit_except,如果在这几个作用域外使用该指令,Nginx会报错。
access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m # 指定日志的写入路径为/var/logs/nginx-access.log # 日志格式使用默认的combined # 指定日志的缓存大小为32k # 日志写入前启用gzip进行压缩,压缩比使用默认值1 # 缓存数据有效时间为1分钟。
Nginx预定义了名为combined日志格式,如果没有明确指定日志格式默认使用该格式:
################################ log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; ################################ # 如不想使用Nginx预定义的格式,可以通过log_format指令来自定义,语法结构如下: log_format name [escape=default|json] string ...;
选项说明:
选项 | 说明 |
---|---|
name | 格式名称。在access_log指令中引用。 |
escape | 设置变量中的字符编码方式是json还是default,默认是default。 |
string | 要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx变量。 |
log_format常用变量:
变量 | 含义 |
---|---|
$bytes_sent | 发送给客户端的总字节数 |
$body_bytes_sent | 发送给客户端的字节数,不包括响应头的大小 |
$connection | 连接序列号 |
$connection_requests | 当前通过连接发出的请求数量 |
$msec | 日志写入时间,单位为秒,精度是毫秒 |
$pipe | 如果请求是通过http流水线发送,则其值为"p",否则为“." |
$request_length | 请求长度(包括请求行,请求头和请求体) |
$request_time | 请求处理时长,单位为秒,精度为毫秒,从读入客户端的第一个字节开始,直到把最后一个字符发送张客户端进行日志写入为止 |
$status | 响应状态码 |
$time_iso8601 | 标准格式的本地时间,形如“2017-05-24T18:31:27+08:00” |
$time_local | 通用日志格式下的本地时间,如"24/May/2017:18:31:27 +0800" |
$http_referer | 请求的referer地址。 |
$http_user_agent | 客户端浏览器信息。 |
$remote_addr | 客户端IP |
$http_x_forwarded_for | 当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置。 |
$request | 完整的原始请求行,如 “GET / HTTP/1.1” |
$remote_user | 客户端用户名称,针对启用了用户认证的请求 |
$request_uri | 完整的请求地址,如 “https://daojia.com/” |
错误日志在Nginx中是通过error_log指令实现,该指令记录服务器和请求处理过程中的错误信息,可以配置在main, http, mail, stream, server, location作用域。
# 语法格式: error_log file [level];
选项 | 说明 |
---|---|
file | 指定日志的写入位置 |
level | 指定日志级别,如:debug, info, notice, warn, error, crit, alert,emerg。只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error。 |
error_log /var/logs/nginx/nginx-error.log # 指定错误日志的路径为:/var/logs/nginx/nginx-error.log # 日志级别使用默认的error
每一条日志记录的写入都是先打开文件再写入记录,然后关闭日志文件。如果你的日志文件路径中使用了变量,如access_log /var/logs/$host/nginx-access.log
,为提高性能,可以使用open_log_file_cache
指令设置日志文件描述符的缓存。它可以配置在http、server、location
作用域中
# 语法格式: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2; # 设置缓存最多缓存1000个日志文件描述符。 # 20s内如果缓存中的日志文件描述符至少被被访问2次,才不会被缓存关闭。 # 每隔1分钟检查缓存中的文件描述符的文件名是否还存在。
选项 | 说明 |
---|---|
max | 设置缓存中最多容纳的文件描述符数量,如被占满采用LRU算法将描述符关闭。 |
inactive | 设置缓存存活时间,默认是10s。 |
min_uses | 在inactive时间段内,日志文件最少使用几次,该日志文件描述符记入缓存,默认是1次。 |
Valid | 设置多久对日志文件名进行检查,看是否发生变化,默认是60s。 |
Off | 不使用缓存。默认为off。 |
Nginx没有类似Apache的cronlog日志分割处理能力,但可以通过Nginx的信号控制功能脚本
来实现日志的自动切割,将将脚本加入到Linux的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。
/opt/logbak.sh
把Nginx的日志文件/var/log/nginx/access.log
移动到目录/mnt/log/nginx
下面,以当前时间做为日志的文件名称,然后用kill-USR1
创建新的日志文件/var/log/nginx/access.log
,最后删除30天以前的日志文件。vim /opt/logbak.sh ############################## #!/bin/bash #Filename:logbak.sh d=$(date -d "-l day" "+%Y%m%d") logs_path="/mnt/log/nginx" pid_path="/run/nginx.pid" [ -d $logs_path ] || mkdir -p $logs_path mv /var/log/nginx/access.log ${logs_path}/nginx-access.log-$d kill -USR1 $(cat $pid_path) find $logs_path -mtime +30|xargs rm -rf ############################## # 设置crontab任务,定期执行脚本自动进行日志分割。 crontab -e ########### 30 1 * * * /opt/logbak.sh ###########