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.18)
$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的虚拟主机

1) 创建目录
mkdir -p /var/www/(www,bbs,blog)

2) 创建对应的配置文件
vim /etc/nginx/conf.d/www.conf
server {
    listen 172.16.1.7:80;
    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:80;
    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:80;
    server_name blog.xiao.com;

    location / {
        root /var/www/blog;
        index index.html;
    }
}

解法2:基于端口

vim /etc/nginx/conf.d/www.conf
server {
    listen 80;
    server_name www.xiao.com;

    location / {
        root /var/www/www;
        index index.html;
    }
}

vim /etc/nginx/conf.d/bbs.conf
server {
    listen 81;
    server_name bbs.xiao.com;

    location / {
        root /var/www/bbs;
        index index.html;
    }
}

vim /etc/nginx/conf.d/blog.conf
server {
    listen 82;
    server_name blog.xiao.com;

    location / {
        root /var/www/blog;
        index index.html;
    }
}

3) 语法测试,重载nginx
nginx -t
nginx -s reload

4) 写hosts解析
10.0.1.7 www.xiao.com bbs.xiao.com blog.xiao.com

[[email protected] ~]# mkdir -p /var/www/{www,bbs,blog}
[[email protected] ~]# echo www > /var/www/www/index.html
[[email protected] ~]# echo bbs > /var/www/bbs/index.html
[[email protected] ~]# 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 80;
    server_name www.xiao.com;

    location / {
        root /var/www/www;
        index index.html;
    }
}

vim /etc/nginx/conf.d/bbs.conf
server {
    listen 80;
    server_name bbs.xiao.com;

    location / {
        root /var/www/bbs;
        index index.html;
    }
}

vim /etc/nginx/conf.d/blog.conf
server {
    listen 80;
    server_name blog.xiao.com;

    location / {
        root /var/www/blog;
        index index.html;
    }
}

3) 语法测试,重载nginx
nginx -t
nginx -s reload

4) 写hosts解析
10.0.1.7 www.xiao.com bbs.xiao.com blog.xiao.com

5) 测试
http://www.xiao.com/
http://bbs.xiao.com/
http://blog.xiao.com/

增加需求:实现每个站点日志独立

1)修改配置文件
/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;    

2)创建对应的目录
[[email protected] ~]# mkdir -p /code/log

7.Nginx Location

使用Nginx Location可以控制访问网站的路径

匹配符    匹配规则                        优先级
=        精确匹配                        1
^~       以某个字符开头                   2
~        区分大小写的正则匹配              3
~*       不区分大小写的正则匹配            4
!~       区分大小写不匹配的正则            5
!~*      不区分大小写不匹配的正则           6
/        通用匹配,任何请求都会匹配到        7

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 403 "启用访问控制成功";
}

原文地址:https://www.cnblogs.com/xmtxh/p/12273802.html

时间: 2024-07-30 22:45:53

NGINX常用模块(二)的相关文章

常用模块二---time--random--collections--json--pickle--shelve

常用模块二 ================= collections 模块 ================== ========= namedtuple 可以命名的元组 ============from collections import namedtuple Point=namedtuple('Point',['x','y']) p=Point(1,2)circle=namedtuple('Circle',['x','y','r'])c=circle(1,2,1)print(p.x)pr

常用模块二(configparser

阅读目录 常用模块二 hashlib模块 configparse模块 logging模块 常用模块二 返回顶部 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过. 摘要算法之所以能指出数

Nginx 常用模块

Nginx 常用模块 1. ngx_http_autoindex_module # ngx_http_autoindex_module模块处理以斜杠字符(' / ')结尾的请求,并生成一个目录列表. # 通常,当ngx_http_index_module模块找不到索引文件时,请求被传递给ngx_http_autoindex_module模块. `# Example location / { autoindex on; } `# 启用或禁用目录列表输出. autoindex # Syntax: a

Nginx常用模块和请求处理流程简介

Nginx由内核和模块组成的,其中内核完成的工作比较简单,仅仅通过查找配置文件见客户端请求映射到一个location block,然后又这个location block中所配置的每个指令将会启动不同的模块去完成相应的工作. 一.nginx模块 (1)从结构上nginx分为核心模块,基础模块和第三方模块,例如 HTTP模块.MAIL模块.EVENT模块属于核心模块: HTTP ACCESS模块.HTTP REWRITE模块.HTTP FastCGI模块.HTTP PROXY模块属于基础模块: HT

02 nginx常用模块

4. 企业中网站的安全访问配置 a 根据用户访问的地址进行控制 10.0.0.0/24 www.oldboy.com/AV/ 不能访问 172.16.1.0/24 www.oldboy.com/AV/ 可以访问 nginx访问模块: ngx_http_access_module 举例配置: location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all;

nginx常用模块

1.nginx开启目录浏览 提供下载功能 默认情况下,网站返回index指定的主页,但如果该网站不存在主页,则将请求交给autoindex模块 如果开启autoindex模块,则提供一个下载的页面, 如果没有开启autoindex 则会报错 403 [[email protected] centos]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf server { listen 80; server_name mirror.oldxu.com; cha

Day12:常用模块二(sys,logging,json)

一.sys模块 1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操作系统平台名称 二.logging模块 2.1 函数式的简单配置 import logging logging.debug

常用模块二

时间模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time() 获取当前时间戳 表示时间的三种方式 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.t

python全栈开发【第十篇】Python常用模块二(时间、random、os、sys和序列化)

一.time模块 表示时间的三种方式: 时间戳:数字(计算机能认识的) 时间字符串:t='2012-12-12' 结构化时间:time.struct_time(tm_year=2017, tm_mon=8, tm_mday=8, tm_hour=8, tm_min=4, tm_sec=32, tm_wday=1, tm_yday=220, tm_isdst=0)像这样的就是结构化时间 #time模块的常用方法及三种时间之间的转换 import time # 对象:对象.方法 # --------