NGINX常用模块(二)
5.Nginx日志配置
Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式 通过log_format命令定义格式
1.log_format指令
# 配置语法:包括:error.log access.log
Syntax: log_format name [escape=default|json|none] string ...;
Default:
log_format combined "...";
Context: http # 默认Nginx定义的日志语法
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
10.0.1.1 - - [07/Feb/2020:12:50:29 +0800] "GET /img/favicon.png HTTP/1.1" 401 581 "http://www.xiao.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" "-"
# Nginx日志格式允许包含的变量
$remote_addr # 记录客户端的IP地址
$remote_user # 记录客户端的用户名
$body_bytes_sent # 发送给客户端的字节数,不包括头部响应的大小
$http_x_forwarded_for # 记录客户端的IP地址
$http_user_agent # 记录客户端的浏览器的相关信息
$http_referer # 记录从哪个页面链接过来访问的
$bytes_sent # 发送给客户端的字节数
$connection # 连接序列号
$connection_requests # 通过连接发出的当前请求数(1.1.)
$msec # 日志写入时的时间(以毫秒为单位),以毫秒为单位
$pipe # “ p”(如果请求已传递),.否则为“ ”
$request # 记录请求的方法及请求的协议
$request_length # 请求长度(包括请求行,标头和请求正文)
$request_time # 要求以毫秒为单位的处理时间(以毫秒为单位);从客户端读取第一个字节到将最后一个字节发送到客户端后的日志写入之间经过的时间
$status # 回应状态
$time_iso8601 # ISO 8601标准格式的当地时间
$time_local # 通用日志格式的本地时间
# 注:如果Nginx位于负载均衡器,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中。
# 增加X-Forward-For信息,用来记录客户端IP地址和客户端请求的服务器地址。
2.access_log指令
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default:
access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except Example:
server {
...
access_log /var/log/nginx/www.oldboy.com.log main;
...
}
$http_x_forwarded_for
6.Nginx虚拟站点
环境:在一台服务器上实现多个站点
托管业务:
小型机
unix
工作站
unix
X86服务器 实现虚拟就主机的方式:
基于IP
不同的IP
基于端口 ***
相同的IP,不同的端口
基于域名 *****
相同的IP,相同的端口,不同的域名
需求,公司需要三个站点,分别是www,bbs,blog
解法1:基于IP的虚拟主机
) 创建目录
mkdir -p /var/www/(www,bbs,blog) ) 创建对应的配置文件
vim /etc/nginx/conf.d/www.conf
server {
listen 172.16.1.7:;
server_name www.xiao.com; location / {
root /var/www/www;
index index.html;
}
} vim /etc/nginx/conf.d/bbs.conf
server {
listen 172.16.1.8:;
server_name bbs.xiao.com; location / {
root /var/www/bbs;
index index.html;
}
} vim /etc/nginx/conf.d/blog.conf
server {
listen 172.16.1.9:;
server_name blog.xiao.com; location / {
root /var/www/blog;
index index.html;
}
}
解法2:基于端口
vim /etc/nginx/conf.d/www.conf
server {
listen ;
server_name www.xiao.com; location / {
root /var/www/www;
index index.html;
}
} vim /etc/nginx/conf.d/bbs.conf
server {
listen ;
server_name bbs.xiao.com; location / {
root /var/www/bbs;
index index.html;
}
} vim /etc/nginx/conf.d/blog.conf
server {
listen ;
server_name blog.xiao.com; location / {
root /var/www/blog;
index index.html;
}
} ) 语法测试,重载nginx
nginx -t
nginx -s reload ) 写hosts解析
10.0.1.7 www.xiao.com bbs.xiao.com blog.xiao.com [root@web01 ~]# mkdir -p /var/www/{www,bbs,blog}
[root@web01 ~]# echo www > /var/www/www/index.html
[root@web01 ~]# echo bbs > /var/www/bbs/index.html
[root@web01 ~]# echo blog > /var/www/blog/index.html
验证结果:
在验证过程中,使用www.xiao.com后加81、82端口号,都能访问到bbs.xiao.com,blog.xiao.com的首页,反之一样
解法3:基于域名
vim /etc/nginx/conf.d/www.conf
server {
listen ;
server_name www.xiao.com; location / {
root /var/www/www;
index index.html;
}
} vim /etc/nginx/conf.d/bbs.conf
server {
listen ;
server_name bbs.xiao.com; location / {
root /var/www/bbs;
index index.html;
}
} vim /etc/nginx/conf.d/blog.conf
server {
listen ;
server_name blog.xiao.com; location / {
root /var/www/blog;
index index.html;
}
} ) 语法测试,重载nginx
nginx -t
nginx -s reload ) 写hosts解析
10.0.1.7 www.xiao.com bbs.xiao.com blog.xiao.com ) 测试
http://www.xiao.com/
http://bbs.xiao.com/
http://blog.xiao.com/
增加需求:实现每个站点日志独立
)修改配置文件
/etc/nginx/nginx.conf
# access_log /var/log/nginx/access.log main; /etc/nginx/conf.d/www.conf
access_log /code/log/www.xiao.com.log main;
/etc/nginx/conf.d/bbs.conf
access_log /code/log/bbs.xiao.com.log main;
/etc/nginx/conf.d/blog.conf
access_log /code/log/blog.xiao.com.log main; )创建对应的目录
[root@web01 ~]# mkdir -p /code/log
7.Nginx Location
使用Nginx Location可以控制访问网站的路径
匹配符 匹配规则 优先级
= 精确匹配
^~ 以某个字符开头
~ 区分大小写的正则匹配
~* 不区分大小写的正则匹配
!~ 区分大小写不匹配的正则
!~* 不区分大小写不匹配的正则
/ 通用匹配,任何请求都会匹配到
Location应用场景
# 通用匹配,任何请求都会匹配到
location / { } # 严格区分大小写,匹配以.php结尾的都走这个location
location ~ \.php$ {
fastcgi_pass http://127.0.0.1:9000;
} # 严格区分大小写,匹配以.jsp结尾的都走这个location
location ~ \.jsp$ {
proxy_pass http://127.0.0.1:8080;
} # 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css都走这条location
location ~* .*\.(jpg|png|gif|js|css)$ {
rewrite (.*) http://cdn:xiao.com$requet_uri;
} # 不区分大小写匹配
location ~* "\.(sql|bak|tgz|tar.gz|.git)$" {
default_type text/html;
return "启用访问控制成功";
}
NGINX常用模块(二)的更多相关文章
- 常用模块二(hashlib、configparser、logging)
阅读目录 常用模块二 hashlib模块 configparse模块 logging模块 常用模块二 返回顶部 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SH ...
- nginx常用模块(三)
Nginx常用模块(三) ngx_http_proxy_module模块配置(http或https协议代理) proxy_pass URL; 应用上下文:location, if in locatio ...
- Nginx 常用模块
Nginx 常用模块 1. ngx_http_autoindex_module # ngx_http_autoindex_module模块处理以斜杠字符(' / ')结尾的请求,并生成一个目录列表. ...
- (转)nginx 常用模块整理
原文:http://blog.51cto.com/arm2012/1977090 1. 性能相关配置 worker_processes number | auto: worker进程的数量:通常应该为 ...
- python之常用模块二(hashlib logging configparser)
摘要:hashlib ***** logging ***** configparser * 一.hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法 ...
- python14 常用模块 二
一.json模块 强大:不同语言之间可以进行数据交换 序列化:把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serializati ...
- Python自动化开发 - 常用模块(二)
本节内容 1.shutil模块 2.shelve模块 3.xml处理模块 4.configparser模块 5.hashlib模块 6.subprocess模块 7.re模块 一.shutil模块 高 ...
- Python常用模块二
一.time & datetime #_*_coding:utf-8_*_ import time # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了t ...
- Python常用模块(二)
一.json与pickle json与pickle模块是为了完成数据的序列化. 序列化是指把对象(变量)从内存中变成可存储或传输的过程,在Python中叫picking,在其他语言中也由其他的叫法,但 ...
随机推荐
- T_SQL 将一列多行数据合并为一行
SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象 ...
- [APIO2012]派遣 可并堆
Background 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. Description 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者 ...
- python连接 ssh
import paramiko # private = paramiko.RSAKey.from_private_key() 秘钥 trans = paramiko.Transport((" ...
- RobotFramwork中实现oracle数据库的连接(终于解决cx_oracle问题)
RobotFramework连接数据库有java实现,也有python实现的,现在研究的python实现的,java还没尝试.有兴趣的参考后面的转载文章. 步骤(也转载了别人的文章,因为写的比 ...
- HTTP TCP UDP ICMP IP ARP 协议详解(10.15 第二十一天)
ARP协议 ARP(Address Resolution Protocol)协议 地址解析协议 把网络层的IP地址翻译成在数据链路层寻址的48位硬件地址(MAC地址) 在OSI模型中ARP协议属于链路 ...
- UVA - 11105 Semi-prime H-numbers(H-半素数)
题意:所有形如4n+1(n为非负整数)的数叫H数.定义1是唯一的单位H数,H素数是指本身不是1,且不能写成两个不是1的H数的乘积.H-半素数是指能写成两个H素数的乘积的H数(这两个数可以相同也可以不同 ...
- PythonTwo
格式化输出: % 占位符 s(str 字符串) d(digit 数字) %% 只单纯显示% Str 索引切片 captlze 首字母大写 upper 全大写 lower 全小写 find 通过元 ...
- 9 ~ express ~ 用户注册
一,/public/js/index.js //登陆 $login.find('button').on('click',()=>{ $.ajax({ type:'post', url:'/api ...
- Aduino Nano 技术性能指标
纵览 在Adnuino Nano网站上节选了该控制器的价格等,在中国买非常便宜,我用10元左右的人民币就买到了这个产品,在Arduino网站上的价格是22美金,还不包括税.这种差别是如何造成的?是国外 ...
- C++基础--引用做函数参数
引用,简单粗暴的解释叫做别名,简单粗暴的例子就是,我是熊叫大雄,但是很多时候别人不叫我熊叫大雄,会叫我大雄,粤语地区朋友爱叫我阿雄,有人叫我雄,所以,熊叫大雄这个变量的值是我,雄.大雄.阿雄是熊叫大雄 ...