Nginx虚拟主机配置与日志管理
- 虚拟主机配置
- 配置文件解读,分析nginx.conf配置文件
#开启进程数 <=CPU数 设置超过CPU数无效
worker_processes 1;
#错误日志保存位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#进程号保存文件
#pid logs/nginx.pid;
#每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024
events {
worker_connections 1024;
use epoll;
}
http {
#文件扩展名与文件类型映射表
include 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 logs/access.log main;
#错误指令
fastcgi_intercept_errors on;
#设置格式
charset utf-8;
#hash表存储的大小
server_names_hash_bucket_size 128;
#设定请求缓冲
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
#文件上传大小
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#设定负载均衡的服务器列表
upstream web_app {
#weigth参数表示权值,权值越高被分配到的几率越大
#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
}
#配置虚拟主机,基于域名、ip和端口
server {
#监听端口
listen 80;
#监听域名
server_name localhost:80;
#charset koi8-r;
#nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式)
#access_log logs/host.access.log main;
#返回的相应文件地址
location {
#设置客户端真实ip地址
proxy_set_header X-real-ip $remote_addr;
#负载均衡反向代理
proxy_pass http://web_app;
}
#错误页面及其返回地址
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
- 配置实例截图
server {
#监听端口
listen 80;
#监听域名
server_name localhost:80;
#返回的相应文件地址
location {
root 路径;
index 返回页面;
}
}
#只要写了这些配置,一个简单的虚拟主机就配置好了
#配置思路
#1. 修改配置文件
#2. 读取配置文件(kill -HUP `cat logs/nginx.pid` 或者 nginx路径/sbin/nginx -s reload)
#3. 如果是域名需要修改host,在host添加上自己写的域名,使其不在互联网上解析 (host路径 `C:\Windows\System32\drivers\etc`)
2. 日志管理
- 常规管理
```
#access_log logs/host.access.log main;
#access_log 访问成功的日志
#logs/host.access.log 存储的路径
#main 使用“main”格式
# 分析main格式里面的内容
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#$remote_addr 远程地址
#$remote_user 访问用户
#$time_local 访问时间
#$request 请求方式(GET/POST/PUT/DELETE)
#$status 请求状态
#$body_bytes_sent 发送的字节
#$http_referer 前置页面
#$http_user_agent 用户代理
#$http_x_forwarded_for http来源
#配置的时候一定要先把配置文件中的main格式先打开
```
![配置访问日志](https://img-blog.csdnimg.cn/20190515121209146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9xaV8w,size_16,color_FFFFFF,t_70)
- 日志切割
日志分割步骤:
1. 将原有的日志重命名
2. 创建一个与原有日志一样的名称
3. 重新读取配置文件
日志定时分割步骤
1. 编写shell脚本(脚本中实现日志分割的步骤)
2. 执行shell脚本
日志分割的shell脚本
#日志的路径
LOGPATH =/usr/local/nginx/logs/z.com.log
#备份日志路径
BASEPATH=/data
#备份日志名称 (+%Y%m%d%H%M 相当于是yyyyMMddHHmm 年月日时分)
bask=$BASEPATH/$(data -d yesterday +%Y%m%d%H%M).zcom.access.log
#将/usr/local/nginx/logs/z.com.log的日志转移到$bask下
mv $LOGPATH $bask
#修改文件
touch $LOGPATH
#重新读取配置文件
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
日志根据日期存储到不同文件夹shell脚本
#日志的路径
LOGPATH =/usr/local/nginx/logs/z.com.log
#备份日志路径
BASEPATH=/data/$(data -d yesterday +%Y%m%d)
#创建目录(多了创建目录)
mkdir -p $BASEPATH
#备份日志名称 (+%Y%m%d%H%M 相当于是yyyyMMddHHmm 年月日时分)
bask=$BASEPATH/$(data -d yesterday +%H%M).zcom.access.log
#将/usr/local/nginx/logs/z.com.log的日志转移到$bask下
mv $LOGPATH $bask
#修改文件
touch $LOGPATH
#重新读取配置文件
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
设置定时器(crontab -e)
*/1 * * * * sh /data/runlog.sh (分 时 日 月 周 命令)