Nginx 四七层代理 日志 重写

Nginx 代理 日志 重写

Nginx的四七层代理

  • 四层是指传输层的tcp/udp
    • NAT技术,网络地址转换,修改数据包里面的目标和源IP和端口
  • 七层是指应用层,通常是http
    • 需要读取http请求内容,然后根据具体内容(url,参数,cookie,请求头)然后转发到对应的服务器,转发过程:建立和目标机器的连接,然后转发请求,收到响应数据在转发给请求客户端的
Nginx四层代理例子
#四层代理
events {
	worker_connections 1024;
}
stream {
	server { 
		listen 80;
		proxy_pass cluster;  #监听80端口  直接转发给后端服务器
	}
	upstream appserver {
		server 192.168.1.5:8080 weight=2;
		server 192.168.1.6:8080 weight=3;
	}
}
http {
....
}
Nginx七层代理例子
http {
	upstream appserver {
		server 192.168.1.5:8080 weight=2;
		server 192.168.1.6:8080 weight=2;
	}
	server {
		listen 80;
		server_name localhost
		location / {  #匹配任意请求
			proxy_pass http://appserver;
		}
		location ~ .(gif|jpg|jpeg)$ { #匹配url
			proxy_pass http://appserver;
			#也可以重写地址
			#rewrite .(gif|jpg|jpeg)$ /logo.png; 
		}
	}
}

Nginx的location语法

说明
location = {}严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
location ~ {}区分大小写匹配(可用正则)
location ~* {}不区分大小写匹配(可用正则)
location !~ {}区分大小写不匹配
location !~* {}不区分大小写不匹配
location ^~ {}^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)

Rewrite全局变量

变量说明
$args这个变量等于请求行中的参数,同$query_string
$content_length请求头中的Content-length字段
$content_type请求头中的Content-Type字段
$document_root当前请求在root指令中指定的值
$host请求主机头字段,否则为服务器名称
$http_user_agent客户端agent信息
$http_cookie客户端cookie信息
$limit_rate这个变量可以限制连接速率
$request_method客户端请求的动作,通常为GET或POST
$remote_addr客户端的IP地址
$remote_port客户端的端口
$remote_user已经经过Auth Basic Module验证的用户名
$request_filename当前请求的文件路径,由root或alias指令与URI请求生成
$schemeHTTP方法(如http,https)
$server_protocol请求使用的协议,通常是HTTP/1.0或HTTP/1.1
$server_addr服务器地址,在完成一次系统调用后可以确定这个值
$server_name服务器名称
$server_port请求到达服务器的端口号
$request_uri包含请求参数的原始URI ,不包含主机名,如"/state/bar.php?arg=bbb".
$uri不带请求参数的当前URI,$uri不包含主机名,如“/state/bar.html”
$document_uri同$uri

例子

#限制IP访问
if ($remote_addr = 192.168.1.5) {
	return 403;
}
#限制浏览器访问
if ($http_user_agent ~ Firefox) {
	rewrite ^(.*)$ /firefox/$1  break;    #跳转到专门的目录下
}

Nginx信号控制

信号说明
TERM,INT快速停止(杀死进程)
QUIT优雅的关闭进程,即等请求结束后再关闭
HUP改变配置文件,平滑的重读配置文件
USR1重读日志,在日志按月/日分割时有用
USR2平滑升级
WINCH优雅关闭旧的进程(配合USR2进行升级)

Nginx日志格式

vim /usr/local/nginx/conf/nginx.conf
==================================
.....
access_log logs/access.log main;                 #main格式
.....
=======================================
  • main格式参数表

    • 参数说明
      $remote_addr客户端的ip地址(代理服务器,显示代理服务Ip)
      $remote_user用于记录远程客户端的用户名称(一般为"-")
      $time_local用于记录访问时间和时区
      $request用于记录请求的url以及请求方法
      $status响应状态码,如200、404
      $body_bytes_sent给客户端发送的文件主体内容字节数
      $http_user_agent用户所使用的代理(浏览器)
      $http_x_forwarded_for可以记录客户端IP 通过代理服务器来记录客户端的Ip地址
      $http_referer可以记录用户是从哪个链接访问过来的
    • #查看日志   对面上面的变量
      tail -f /usr/local/nginx/logs/access.log
      ======================================
      192.168.1.252 - - [10/Mar/2021:17:30:32 +0800] "GET / HTTP/1.1" 200 51 "-" "curl/7.29.0"
      
      71.6.232.4 - - [10/Mar/2021:20:06:40 +0800] "GET / HTTP/1.1" 200 51 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"
      
      ==============================================
      
  • Nginx日志切割脚本

    • vim   nginx_log.sh
      =========================
      #!/bin/bash
      #目录变量
      LOG_HOME="/usr/local/nginx/logs"
      
      #备份文件名称
      LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".bak.access.log
      #重命名nginx的日志文件
      mv ${LOG_HOME}/access.log    ${LOG_HOME}/${LOG_PATH_BAK}
      
      #向nginx主进程发信号重新打开日志
      kill -USR1  `cat /usr/local/nginx/logs/nginx.pid`
      
      #nginx接到信号后会从配置文件冲读取日志文件名称,重新打开日志文件,并以工作进程的用户作为日志文件的所有者。
      ====================================================================
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值