成航先森 成航先森

成都航院计算机系一个学生的个人博客

 

随便看看:

分段图 anylinkaria2CDNkeepalivedLinuxmysqlnginxpycharmpythonredisrsyncUEditorWordPressWordPress插件七牛九价体育部信息志愿服务队光猫免流全体例会向党组织靠拢团学会学习部宣传部影视相关心理部成都航院报社招生信息教学资源文艺部毕业就业流量活动生活杂谈社会实践部站长经历系部介绍系部动态纪检部组织部经验分享老师腾讯云资源下载路由器轻松时刻高考录取分数线

标签:nginx

COS对象存储和CI数据万象未开启CDN,但是却有CDN回源流量

建站分享COS对象存储和CI数据万象未开启CDN,但是却有CDN回源流量

标签:, , | 0条评论 | 2022-06-10

发现的问题对象存储简称COS,数据万象简称CI。由于5月数据万象突然征收“CDN回源流量费”,由于先森图片请求量不大,且还是需要使用数据万象的图片处理功能,所以先森在CDN->COS的中间加了一个Nginx做反向代理,由于Nginx所在的服务器和先森的COS存储桶是同地域的,所以服务器到COS的流量是内网,因此讲道理COS和CI都不会产生CDN回源流量了。但是,先森过了几天又来看数据万象控制台,发现每天还是有产生CDN回源流量,先森这波就无语了,明明都没用CDN了,怎么还会有CDN回源流量呢,这不是无中生有么。数据万象控制台问题原因定位经过排查确认,是由于先森的Nginx直接透传了CDN的回源请求,导致COS和CI判定流量是来自CDN回源。。。先森在服务器上进行抓包确认。同一个图片,CDN回源到CVM服务器:抓包:CDN回源到CVM服务器CVM回源到COS:抓包:CVM回源到COS可以看到,CDN回源到CVM比较有特殊性的请求头是以下两个,在CVM请求到COS时也是带着的: X-NWS-LOG-UUID: 630013543448005765 X-Tencent-Ua: Qcloud那么,就要想办法把这两个请求头去掉,不让其透传。去除Nginx请求头先森百度了一下,Nginx内置的模块中没有删除指定请求头的,只能编译增加headers-more-nginx-module模块。先森图省事,服务器安装了宝塔,Nginx是通过宝塔安装的。看了一下,宝塔安装的Nginx不像Redis等软件,可以在网页上动态添加支持模块,只能命令行编译添加模块。当然编译之前需要看一下宝塔的Nginx会不会已经很好心的帮忙编译了headers-more-nginx-module。查看Nginx已经安装的模块 ./sbin/nginx -V nginx version: nginx/1.22.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)  built with OpenSSL 1.1.1o  3 May 2022 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module肉眼可见的,并没有headers-more-nginx-module模块,只能重新编译一下了。由于宝塔编译的Nginx没有留configure文件,所以先森参考这篇文章:宝塔面板安装的Nginx(已安装)如何添加echo-nginx-module模块,操作了一下编译。其中,有一些点需要注意一下。1、模块的下载地址,下载后解压得到的目录,就是编译时指定的目录: wget https://github.com/openresty/headers-more-nginx-module/archive/refs/tags/v0.33.tar.gz tar -zxvf v0.33.tar.gz -C /www/server/module/ ls /www/server/module/headers-more-nginx-module-0.332、下载的模块目录不要放在/www/server/nginx目录下,使用先森参考的这个方法宝塔在更新Nginx时会清空该目录;修改反向代理配置文件进入宝塔的网站配置页,找到反向代理的配置文件,增加想要去除的请求头即可。 more_clear_input_headers "X-Tencent-Ua"; more_clear_input_headers "X-NWS-LOG-UUID";修改反向代理配置重新抓包确认请求头没有透传修改好了之后,重新抓个包,看看请求头还有没有透传。CDN回源到CVM服务器,可以看到这两个请求头还是在的(肯定在,先森又没删)。CDN回源到CVM然后再看CVM服务器访问COS的请求头,指定清除的两个请求头已经没有了。先森只是刚改好,由于数据万象的控制台对于“CDN回源流量”的监控粒度是1天,所以起码要明天才能看到效果,希望有效。

CentOS 7中的Nginx控制脚本

系统运维, 经验杂笔CentOS 7中的Nginx控制脚本

标签:, | 5 条评论 | 2017-04-26

先森安装Nginx都是编译安装,所以不像yum安装的自带控制脚本,也就是不能通过service nignx start这种方式启动Nginx。不过在CentOS 6中,Nginx的启动脚本早已备好,增加控制脚本轻轻松松。不过,先森公司的客户要求新的服务器全用CentOS 7的操作系统,如此一来,先森之前的控制脚本就没用了。虽然先森当初培训的时候学习的就是RedHat 7,但是参加工作以来,一直使用的CentOS 6的操作系统,早已把7版本的命令习惯忘完。先森觉得,CentOS 6和CentOS 7的变化最明显的就是控制服务启动关闭的命令,由service换成了systemctl。虽然在CentOS 7中service命令依旧可以用,但是使用的效果已经大打折扣了。在网上找了半天,想要找到与CentOS 6类似的控制脚本,用service启动的,但是效果差强人意,甚至可以说无效。最后终于找到了使用systemctl的控制脚本,下面分享一波。控制脚本第一步:编辑vim /usr/lib/systemd/system/nginx.service文件,添加以下内容:注意要修改nginx的目录,先森的是放在默认的/usr/local/nginx中。[Unit]Description=nginx - high performance web serverDocumentation=http://nginx.org/en/docs/After=network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.confExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target第二步:添加可执行权限:chmod 755 /usr/lib/systemd/system/nginx.service第三步:添加开机启动:systemctl enable nginx控制Nginx:systemctl start nginx    # 启动Nginxsystemctl stop nginx    # 关闭Nginxsystemctl status nginx    # 查看Nginx状态总结唉,CentOS 7咋用咋不习惯,但是系统版本的升级总是大势所趋,还是得慢慢习惯。运维的路,还很长。

Nginx日志切割

脚本编程, 系统运维, 经验杂笔Nginx日志切割

标签:, | 2 条评论 | 2017-02-06

Nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析,也会造成服务器硬盘占用越来越大。我们通常是每天对Nginx的日志做切割。Nginx日志切割方法有很多种,本文主要讲的是用shell脚本对日志压缩切割。Nginx日志切割-单个日志有时候我们的日志只有两个,一个access的,一个error的。可能只有access的日志比较大,通常错误日志又不会太大,那么需求只对access的日志进行切割。这时候用这个单个日志切割的脚本即可,优点是比较简单。#!/bin/shcd /usr/local/nginx/logs/#压缩并按日期命名access.log日志tar -zcvf log_history/access_`date +%Y%m%d`.log.tar.gz access.log#删除源日志rm -fr access.log#删除15天前的切割日志find /usr/local/nginx/logs/ -name "*.log.tar.gz" -type f -mtime +15 -exec rm {} \; > /dev/null 2>&1#向 Nginx 的进程发送 USR1 信号以重新打开日志文件killall -s USR1 nginxNginx日志切割-多个日志若Nginx配置了虚拟主机等会保存多个日志的,可能还需要对多个日志进行切割,那么就可以使用以下脚本进行多个日志切割。#!/bin/shif [ ! -d /usr/local/nginx/logs/log_history ]; then  mkdir /usr/local/nginx/logs/log_historyficd /usr/local/nginx/logs/array=(access error host.access host.error host.ssl-access host.ssl-error)for data in ${array[@]}  dotar -zcvf log_history/${data}_`date +%Y%m%d`.log.tar.gz ${data}.log >> /dev/nullrm -fr ${data}.log donefind /usr/local/nginx/logs/log_history/ -name "*.log.tar.gz" -type f -mtime +15 -exec rm {} \; > /dev/null 2>&1killall -s USR1 nginxNginx日志切割-定时任务无论是单个日志切割,还是多个日志切割,都需要使用cron服务定期执行该脚本,下面设置成的是每晚23点59执行,这样nginx访问日志正好记录的是全天的访问记录。#crontab -e59 23 * * * /usr/local/nginx/logs/nginx_access_log.sh定时任务

解决Nginx报错The plain HTTP request was sent to HTTPS port

系统运维, 经验杂笔解决Nginx报错The plain HTTP request was sent to HTTPS port

标签:, | 3 条评论 | 2016-12-09

先森给现网业务搭建了Nginx做反向代理服务,包括http协议和https协议,结果申请公网IP后访问发现报错“The plain HTTP request was sent to HTTPS port”。经过一番研究后解决了问题,这里做个记录。Nginx 400错误解决问题解决方式1:使用https://ip:port/*方式访问,如果直接ip:port/*则是http协议,所以会报错The plain HTTP request was sent to HTTPS port(普通的HTTP请求被发送到HTTPS端口)解决方式2:打开配置文件,查看HTTPS server段的配置:修改前:server {        listen       443 ssl;        server_name  localhost;        ...}修改方式,将监听端口后的“ssl”删除,即:server {        listen       443;        server_name  localhost;        ...}这样再直接用ip:port/*访问则不会再报The plain HTTP request was sent to HTTPS port错误了。

官方微信
返回顶部