当前位置: 首页 > news >正文

Nginx之日志切割,正反代理,HTTPS配置

1 nginx日志切割

1.1 日志配置

./configure --prefix=path指定的path中切换进去,找到log文件夹,进去后找到都是对应的日志文件
在这里插入图片描述
其中的nginx.pid是当前nginx的进程号,当使用ps -ef | grep nginx获得就是这个nginx.pid的值

nginx.conf中定义的日志格式如下:

#定义日志main 的格式
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的地址
access_log  logs/access.log  main;

局部日志:在每个server中都配置单独的日志文件
全局日志:在http那里配置的是全局日志

1.2 日志切分

第一:如何实现日志切分,编写shell脚本
第二:定时任务对脚本进行调度:crontab -e

1.2.1 切分日志的shell脚本

#!/bin/sh
BASE_DIR=/usr/local/nginx
BASE_FILE_NAME=access.log
CURRENT_PATH=$BASE_DIR/logs
BAK_PATH=$BASE_DIR/datalogs
CURRENT_FILE=$CURRENT_PATH/$BASE_FILE_NAME
#假设是每分钟都要备份一次的
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
echo $BAK_FILE
$BASE_DIR/sbin/nginx -s stop
mv $CURRENT_FILE $BAK_FILE
$BASE_DIR/sbin/nginx

1.2.2 定时任务调度

执行crontab -e后:

*/1 * * * * sh /usr/local/nginx/sbin/log.sh

crontab语法 :
crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用-u user的话,就是表示设定自己的时程表。
crontab参数 :

  • -e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI
  • -r [UserName]: 删除目前的时程表
  • -l [UserName]: 列出目前的时程表
  • -v [UserName]:列出用户cron作业的状态

crontab时程表的格式如下 :

  • f1 f2 f3 f4 f5 program
  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天,program 表示要执行的程式
  • f1 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
  • f1a-b时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2a-b 时表示从第 a 到第 b 小时都要执行,其余类推
  • f1*/n 时表示每 n 分钟个时间间隔执行一次,f2*/n表示每 n 小时个时间间隔执行一次,其余类推
  • f1a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推

注意:新创建的 cron 任务,不会马上执行,至少要过2分钟后才可以,当然你可以重启 cron 来马上执行

2 正向与反向代理

2.1 定义

2.1.1 正向代理(Forward Proxy)

一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。
关于正向代理的概念如下:
正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。如下图
在这里插入图片描述
从上面的概念中,我们看出,文中所谓的正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】
这就是正向代理的意义所在。而为什么要用代理服务器去代替访问方【用户A】去访问服务器B呢?这就要从代理服务器使用的意义说起。

使用正向代理服务器作用主要有以下几点:

  1. 访问本无法访问的服务器B
    在这里插入图片描述
    我们抛除复杂的网络路由情节来看上图,假设图中路由器从左到右命名为R1,R2
    假设最初用户A要访问服务器B需要经过R1和R2路由器这样一个路由节点,如果路由器R1或者路由器R2发生故障,那么就无法访问服务器B了。但是如果用户A让代理服务器Z去代替自己访问服务器B,由于代理服务器Z没有在路由器R1或R2节点中,而是通过其它的路由节点访问服务器B,那么用户A就可以得到服务器B的数据了。
    现实中的例子就是"Over the wall"。不过自从VPN技术被广泛应用外,"Over the wall"不但使用了传统的正向代理技术,有的还使用了VPN技术。
  2. 加速访问服务器B
    这种说法目前不像以前那么流行了,主要是带宽流量的飞速发展。早期的正向代理中,很多人使用正向代理就是提速。还是如上图
    假设用户A到服务器B,经过R1路由器和R2路由器,而R1到R2路由器的链路是一个低带宽链路。而用户A到代理服务器Z,从代理服务器Z到服务器B都是高带宽链路。那么很显然就可以加速访问服务器B了
  3. Cache作用
    Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。还如上图所示,如果在用户A访问服务器B某数据J之前,已经有人通过代理服务器Z访问过服务器B上得数据J,那么代理服务器Z会把数据J保存一段时间,如果有人正好取该数据J,那么代理服务器Z不再访问服务器B,而把缓存的数据J直接发给用户A。这一技术在Cache中术语就叫Cache命中。如果有更多的像用户A的用户来访问代理服务器Z,那么这些用户都可以直接从代理服务器Z中取得数据J,而不用千里迢迢的去服务器B下载数据了。
  4. 客户端访问授权
    这方面的内容现今使用的还是比较多的,例如一些公司采用ISA SERVER做为正向代理服务器来授权用户是否有权限访问互联网
    在这里插入图片描述
    上图防火墙作为网关,用来过滤外网对其的访问。假设用户A和用户B都设置了代理服务器,用户A允许访问互联网,而用户B不允许访问互联网(这个在代理服务器Z上做限制)这样用户A因为授权,可以通过代理服务器访问到服务器B,而用户B因为没有被代理服务器Z授权,所以访问服务器B时,数据包会被直接丢弃。
  5. 隐藏访问者的行踪
    如下图所示,我们可以看出服务器B并不知道访问自己的实际是用户A,因为代理服务器Z代替用户A去直接与服务器B进行交互。如果代理服务器Z被用户A完全控制(或不完全控制),会惯以“肉鸡”术语称呼。
    在这里插入图片描述

我们总结一下:
正向代理是一个位于客户端原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

2.1.2 反向代理(reverse proxy)

反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

使用反向代理服务器的作用如下:

  1. 保护和隐藏原始资源服务器
    在这里插入图片描述
    用户A始终认为它访问的是原始服务器B而不是代理服务器Z,但实用际上反向代理服务器接受用户A的应答,从原始资源服务器B中取得用户A的需求资源,然后发送给用户A。由于防火墙的作用,只允许代理服务器Z访问原始资源服务器B。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了原始资源服务器B,但用户A并不知情。
  2. 负载均衡
    如下所示:
    在这里插入图片描述
    当反向代理服务器不止一个的时候,我们甚至可以把它们做成集群,当更多的用户访问资源服务器B的时候,让不同的代理服务器Z(x)去应答不同的用户,然后发送不同用户需要的资源。
    当然反向代理服务器像正向代理服务器一样拥有CACHE的作用,它可以缓存原始资源服务器B的资源,而不是每次都要向原始资源服务器B请求数据,特别是一些静态的数据,比如图片和文件,如果这些反向代理服务器能够做到和用户X来自同一个网络,那么用户X访问反向代理服务器X,就会得到很高质量的速度。这正是CDN技术的核心
    在这里插入图片描述

反向代理结论与正向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
基本上,网上做正反向代理的程序很多,能做正向代理的软件大部分也可以做反向代理。开源软件中最流行的就是squid,既可以做正向代理,也有很多人用来做反向代理的前端服务器

2.1.3 透明代理

如果把正向代理反向代理透明代理按照人类血缘关系来划分的话。那么正向代理透明代理是很明显堂亲关系,而正向代理和反向代理就是表亲关系了
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了
透明代理实践的例子就是时下很多公司使用的行为管理软件
在这里插入图片描述

用户A和用户B并不知道行为管理设备充当透明代理行为,当用户A或用户B向服务器A或服务器B提交请求的时候,透明代理设备根据自身策略拦截并修改用户A或B的报文,并作为实际的请求方,向服务器A或B发送请求,当接收信息回传,透明代理再根据自身的设置把允许的报文发回至用户A或B,如上图,如果透明代理设置不允许访问服务器B,那么用户A或者用户B就不会得到服务器B的数据

2.2 正反代理区别

  • 位置不同
    正向代理:架设在客户端与目标主机之间
    反向代理:架设在服务器端
  • 代理对象不同
    正向代理:代理客户端,服务器不知道实际发起请求的客户端
    反向代理:代理服务器端,客户端不知道实际提供服务的服务端
    类似于在前端和后端服务之间的中介,中间倒了一把手

2.3 配置反向代理

2.3.1 只获得代理ip

找到conf/nginx.conf文件,在相应的server中添加关键字proxy_pass ,这样可以隐藏web端访问地址,而后端服务获得的是代理后的nginxip地址

# 把任何后缀为jsp的都用https://192.168.1.2:8080地址为代理
location ~ \.jsp$ {   # \.中的\是转义点符号proxy_pass https://192.168.1.2:8080;
}

2.3.2 获得客户端真实ip

如果想让后端得到真正的web端地址添加如下:

# nginx的配置如下
location ~ \.jsp$ {   #proxy_set_header 是把正确ip放到请求头中 X-real-ip是自定义的变量名proxy_set_header X-real-ip $remote_addr;proxy_pass http://192.168.1.2:8080;
}# 后端配置如下,就可以得到真正的ip
request.getHeader("X-real-ip");

3 HTTPS配置

3.1 检查环境

查看 nginx 是否安装 http_ssl_module 模块
nginxsbin目录下执行.nginx -V来查看

nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments: --prefix=/home/software/nginx-1.18.0

如果出现 configure arguments:--with-http_ssl_module, 则已安装,否则需要安装

3.2 安装SSL模块

./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module

再次验证,执行.nginx -V
在这里插入图片描述

3.3 配置HTTPS

ssl证书 *.crt 和 私钥 *.key 拷贝到/home/software/nginx-1.18.0/conf目录中
新增 server 监听 443 端口:

# ----------HTTPS配置-----------
server {# 监听HTTPS默认的443端口  listen       443;# 监听 配置的项目的域名 访问部署了nginx那台服务器的域名、ip、localhostserver_name  www.imoocdsp.com;# 开启sslssl     on;# 输入域名后,首页文件所在的目录  root html;  # 配置首页的文件名  index index.html index.htm index.jsp index.ftl; # 配置ssl证书ssl_certificate      1_www.imoocdsp.com_bundle.crt;# 配置证书秘钥ssl_certificate_key  2_www.imoocdsp.com.key;# ssl会话cachessl_session_cache    shared:SSL:1m;# 停止通信时,加密会话的有效期,在该时间段内不需要重新交换密钥 ssl_session_timeout  5m;# 配置加密套件,写法遵循 openssl 标准,服务器支持的TLS版本  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# TLS握手时,服务器采用的密码套件ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;# 开启由服务器决定采用的密码套件ssl_prefer_server_ciphers on;location / {proxy_pass http://tomcats/;index  index.html index.htm;}
}# ---------HTTP请求转HTTPS-------------  
server {  # 监听HTTP默认的80端口  listen 80;  # 如果80端口出现访问该域名的请求  server_name www.xxx.com;  # 将请求改写为HTTPS(这里写你配置了HTTPS的域名)  rewrite ^(.*)$ https://www.xxx.com;  
}
http://www.lryc.cn/news/434655.html

相关文章:

  • Mysql数据量大,如何拆分Mysql数据库(垂直拆分)
  • 机器人可能会在月球上提供帮助
  • 真实案例分享:零售企业如何避免销售数据的无效分析?
  • ctfshow-文件包含
  • Qt事件处理机制
  • vue axios 如何读取项目下的json文件
  • 燃气涡轮发动机性能仿真程序GSP12.0.4.2使用经验(二):使用GSP建立PG9351FA燃气轮机性能仿真模型
  • 迟滞比较器/施密特触发器
  • LeetCode_sql_day22(1112.每位学生的最高成绩)
  • OFDM信号PARP的CCDF图
  • LeetCode之高频SQL50题
  • echarts多组堆叠柱状图
  • 打造安心宠物乐园:EasyCVR平台赋能猫咖/宠物店的智能视频监控解决方案
  • springboot请求传参常用模板
  • HTML/CSS/JS学习笔记 Day4(HTML--C3 表格)
  • WPF中创建横向的ListView
  • A表和B表公共元素产生链表C
  • Rust运算符
  • Oracle rman 没有0级时1级备份和0级大小一样,可以用来做恢复 resetlogs后也可以
  • idea中配置Translation插件完成翻译功能
  • 如何看待:低代码开发平台的兴起无需经验?
  • OpenCV-轮廓检测
  • vue页面使用自定义字体
  • C++——list常见函数的使用和模拟实现(2)
  • C 标准库 - `<float.h>`
  • 【机器人工具箱Robotics Toolbox开发笔记(二)】Matlab中机器人工具箱的下载与安装
  • ROS2 Nav2 - Smac 规划器
  • LabVIEW环境中等待FPGA模块初始化完成
  • 手机TF卡格式化后数据恢复:方法、挑战与预防措施
  • ceph对象存储使用的一些思考