============
== 白菜 ==
============
一个勤奋的代码搬运工!

跨域方案Nginx配置

技术分享 跨域 CORS

什么是浏览器同源策略?

同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

如何实现跨域?

跨域是个比较古老的命题了,历史上跨域的实现手段有很多,我们现在主要介绍Nginx的跨域方案,其余的方案我们就不深入讨论了。

方便的跨域方案Nginx

nginx是一款极其强大的web服务器,其优点就是轻量级、启动快、高并发。

现在的新项目中nginx几乎是首选,我们用node或者go开发的服务通常都需要经过nginx的反向代理。

反向代理的原理很简单,即所有客户端的请求都必须先经过nginx的处理,nginx作为代理服务器再讲请求转发给node或者go服务,这样就规避了同源策略。

#进程, 可更具cpu数量调整
worker_processes  1;

events {
    #连接数
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #连接超时时间,服务器会在这个时间过后关闭连接。
    keepalive_timeout  10;

    # gizp压缩
    gzip  on;

    # 直接请求nginx也是会报跨域错误的这里设置允许跨域
    # 如果代理地址已经允许跨域则不需要这些, 否则报错(虽然这样nginx跨域就没意义了)
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers X-Requested-With;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

    # srever模块配置是http模块中的一个子模块,用来定义一个虚拟访问主机
    server {
        listen       80;
        server_name  localhost;
        
        # 根路径指到index.html
        location / {
            root   html;
            index  index.html index.htm;
        }

        # localhost/api 的请求会被转发到192.168.0.103:8080
        location /api {
            rewrite ^/b/(.*)$ /$1 break; # 去除本地接口/api前缀, 否则会出现404
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.0.103:8080; # 转发地址
        }
        
        # 重定向错误页面到/50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

MAC命令快速模糊查找文件

mac命令行 mac find

find命令

描述:通过 find命令查找 语法:find ~ -iname “文件名*”

/**
* 比如我要查找一个以‘vue-’开头的.zip文件,
* 但是你忘了它的全名也忘了在那个文件夹,
* 查找范围是‘~’节点以内
* 就可以用这种方式进行模糊搜索
*/

 find ~ -iname "vue-*.zip"

/**
* 然后它就把所有包含符合条件的文件和路径都打印出来了
*/

find不但能查找文件,还能查找文件夹

/**
* 比如我要查找所有包含‘vue’的文件或文件夹
*/
find ~ -iname "*vue*"

/**
* 结果它找到了所有包含‘vue’的文件或文件夹
*/

find方式很简单但是需要一点专业知识,需要知道一些正则的基本常识,需要指定路径范围,搜索的名字需要加引号等等

mdfind命令

描述:通过 mdfind命令查找 语法:mdfind -name 文件名

/**
* 比如我要查找所有包含‘vue’的文件或文件夹
*/
mdfind -name vue

/**
* 看,我直接输入我要找的关键字‘vue’
* 就把所有文件和文件夹都输出出来了,是不是很方便
*/

mdfind 简单粗暴,没缺点,但有个前提是你mac电脑要支持Spotlight功能,不过也不用担心,一般mac默认是支持的

在 shell 中执行命令

你是找到这个文件或文件夹了,但是你想直接打开它,那么怎么打开呢,看下面

若要运行当前用户个人文件夹中的命令,请在前面加上文件夹说明符。例如,若要运行 MyCommandLineProg,请使用以下命令:

Read more...

Rust 镜像源

技术分享 Rust

通常cargo跑得挺顺畅,不怎么需要proxy。但有备无患。

crates.io 和 rustup 的国内镜像源

字节跳动提供的:https://rsproxy.cn/

中国科技大学的:https://mirrors.ustc.edu.cn/help/crates.io-index.html

清华大学的:https://mirrors.tuna.tsinghua.edu.cn/help/rustup/

上海交通大学的:https://git.sjtu.edu.cn/sjtug/crates.io-index

更换国内源

更换为国内源,否则安装太慢了。 新建文件:~/.cargo/config,内容替换为如下,replace-with 这行可自己 ping 文件中各个国内源头,看哪个源快用哪个:

[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"

# 替换成你偏好的镜像源
replace-with = 'sjtu'

# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

# 中国科学技术大学
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

# rustcc社区
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"

# 字节跳动
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"

给我来点酷炫玩意-Sharkle

web前端 创意 网页特效

网页前端是一门技术活!出色的网站除了后台够快够可靠,也非常需要前端吸引眼球。在这个网站里,点击SHOW ME SOMETHING AWESOME就能随机跳转到一个新页面,往往是一些用了平时不太多见的网页设计元素制作出来的页面演示,有时候也会有独到设计的网页游戏,或许还有些别的内容。这个网站收录的内容都挺不错,有些网站的质量完全可以拿出来单独写一篇文章。

传送门 https://sharkle.com/

方法

进入网站直接点击SHOW ME SOMETHING AWESOME即可欣赏!

Cargo Wix 创建Windows安装程序的cargo子命令

wix Rust

cargo-wix:创建Windows安装程序的cargo子命令 它使用二进制项目的发行版中的构建Windows安装程序(msi)。 如果可以使用提供的应用程序提供代码签名证书,则它还支持对Windows安装程序进行签名。

快速开始

启动命令提示符(cmd.exe),然后执行以下命令:

C:\>cargo install cargo-wix
C:\>cd Path\To\Project
C:\Path\To\Project\>cargo wix init
C:\Path\To\Project\>cargo wix

该项目的Windows安装程序(msi)将位于C:\Path\To\Project\target\wix文件夹中。

官方文档

https://crates.io/crates/cargo-wix

用 Deskreen 将你的 Linux 屏幕镜像或串流到任何设备上

linux deskreen

如果你有多显示器设置,你会意识到拥有多个屏幕的好处。而且,有了 Deskreen,你可以把任何设备变成你的副屏。

Deskreen:将任何设备变成你的 Linux 系统的副屏

Deskreen 是一个自由开源的应用,可以让你使用任何带有 Web 浏览器的设备来作为电脑的副屏。

如果你愿意,它还支持多个设备连接。

Deskreen 很容易使用,当你的所有设备都连接到同一个 Wi-Fi 网络时,它可以正常工作。

让我们来看看它的功能和工作原理。 Deskreen 的功能

Deskreen 的功能包括以下要点:

  • 分享整个屏幕的能力
  • 选择一个特定的应用窗口进行串流
  • 翻转模式,将你的屏幕作为提词器使用
  • 支持多种设备
  • 高级视频质量设置
  • 提供端对端加密
  • 最小的系统要求
  • 黑暗模式

没有一个冗长的功能列表,但对大多数用户来说应该是足够的。

如何使用 Deskreen 应用?

Deskreen 使用分为三个简单的步骤,让我为你强调一下,以便你开始使用:

首先,当你启动该应用时,它会显示一个二维码和一个 IP 地址,以帮助你用 Web 浏览器连接其他设备,以串流你的屏幕。

你可以按你喜欢的方式,在你的辅助设备上的 Web 浏览器的帮助下建立连接。

当你扫描二维码或在浏览器的地址栏中输入 IP 地址,你会在 Deskreen 应用上得到一个提示,允许或拒绝连接。除非是你不认识它,否则就允许吧。

接下来,你将被要求选择你想要串流的内容(你的整个屏幕或特定的应用窗口):

你可以选择串流整个屏幕或选择你想串流的窗口。然而,并不是每个应用窗口都能被检测到。

你只需要选择源并确认,就可以了。你应该注意到它在你的副屏(手机/桌面)上开始串流。

Deskreen 还为你提供了管理连接设备的能力。因此,如果你需要断开任何会话或所有会话的连接,你可以从设置中进行操作。

在 Linux 中安装 Deskreen

你会找到一个用于 Linux 机器的 DEB 包和 AppImage 文件。如果你不知道,可以通过我们的 安装 DEB 包 和 使用 AppImage 文件 指南来安装它。

Read more...

为你营造专注冥想的时间-The Zen Zone

专注 冥想 小游戏

网站为你营造了专注冥想的时间,通过三个简单的小游戏,你可以进入一个精神集中的状态,从而让大脑思维平静下来!

传送门 https://thezen.zone/

方法

进入网站直接开始冥想吧!

全球高清实况摄像头-Skylinewebcams

全球 摄像头 风景

网站收录了全球范围内的公开实况摄像头,你可以看到世界各地的文化遗产、城市风光、人气景点!

传送门 https://www.skylinewebcams.com/

方法

网站支持中文,进入后直接观看!

Linux 常用命令

Shell脚本 linux

Linux 常用命令

日期

$(date -d '1 day ago' '+%Y-%m-%d')

常用方法

数字格式化

part=`printf "%03d" $i` # 左补0

删除旧文件

# 找出5天前修改的文件名以.tar结尾的文件进行删除
find /www/backup -mtime +5 -name "*.tar"  |xargs rm

for循环

for ((i=0;i<10;i++))
do
_date=$(date +%Y-%m-%d -d "${i} day")
echo $_date
done
#
for i in {1..10}
do
        echo $i
done

文件合并

find ./ -name "item*" | xargs sed 'a\' > all.txt
find ./ -name "item*" | xargs cat > all.txt
:s/old/new           #替换当前行的第一个old为new
:s/old/new/g         #替换当前行的所有的old为new
:.,$s/old/new        #替换当前行到最后行的第一个old为new
:.,$s/old/new/g      #替换当前行到最后行的所有old为new
:N,Ms/old/new        #替换第N行到第M行的第一个old为new
:N,Ms/old/new/g      #替换第N行到第M行的所有old为new
:N,Ms/old/new/gc     #替换第N行到第M行的所有old为new,且逐一询问是否删除
:%s/old/new          #替换所有行的第一个old为new
:%s/old/new/g        #替换所有行的所有old为new

文件排序、交集、并集、差集

#排序
sort a.txt |uniq -c
#一、交集
sort a.txt b.txt | uniq -d
#二、并集
sort a.txt b.txt | uniq
#三、差集 a.txt-b.txt:
sort a.txt b.txt b.txt | uniq -u
#差集 b.txt - a.txt:
sort b.txt a.txt a.txt | uniq -u

删除重复行

sort -k2n all.txt | uniq > real.out
sort -k2n all.txt | awk '{if ($0!=line) print;line=$0}'
sort -k2n all.txt | sed '$!N; /^\(.*\)\n\1$/!P; D'

删除空格

cat all.txt |sed s/[[:space:]]//g

awk 去重

awk '!($1 in a){a[$1];print $1}'
#或
sort $1 | uniq 
# awk结果使用逗号间隔拼接
awk -F ',' '{print $1}' | xargs | tr ' ' ','

常用状态查看

# 按CPU和内存倒序前n个进程
ps -aux --sort -pcpu,+pmem | head -n 5
# 按进程名查看
ps -f -C java

文件同步rsync

rsync -zvrtopgl --progress --delete /fromDist/ root@s1:/toDist/

链接状态统计

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# TCP连接状态详解 
# LISTEN: 服务器在侦听来自远方的TCP端口的连接请求
# SYN-SENT: 在发送连接请求后等待匹配的连接请求
# SYN_RECV: 一个连接请求已经到达,等待确认
# SYN-RECEIVED: 再收到和发送一个连接请求后等待对方对连接请求的确认
# ESTABLISHED: 代表一个打开的连接/正常数据传输状态/当前并发连接数
# FIN_WAIT1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认/应用说它已经完成
# FIN_WAIT2: 从远程TCP等待连接中断请求/另一边已同意释放
# CLOSE-WAIT: 等待从本地用户发来的连接中断请求
# CLOSING: 等待远程TCP对连接中断的确认/两边同时尝试关闭
# LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认/等待所有分组死掉
# TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认/另一边已初始化一个释放
# ITMED_WAIT:  等待所有分组死掉
# CLOSED: 没有任何连接状态

CPU/内存/系统信息查看

# cpu
grep "model name" /proc/cpuinfo 
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo | grep physical | uniq -c
# cpu位数
echo $HOSTTYPE
# 内存
grep MemTotal /proc/meminfo 
# linux 版本
cat /etc/redhat-release
cat /etc/os-release
cat /etc/lsb-release
# linux 内核版本
uname -a 
uname -r

常用监控工具

# 网络监控
iftop
# IO监控
iotop
# 负载监控
htop
top

进程监控

pidstat -p 843 1 3 -u -t
# -u:代表对 CPU 使用率的监控
# 参数 1 3 代表每秒采样一次,一共三次
# -t:将监控级别细化到线程

ssh相关

# 秘钥生成
ssh-keygen -t rsa -b 4096 -C "your_hostname"
# 免密登录
cat ~/.ssh/id_rsa.pub | ssh  root@ip "cat >> .ssh/authorized_keys"

firewalld防火墙使用

# 禁止ping
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
# 允许192.168.1.0/24主机所有连接
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0" accept'
# 禁止某IP访问
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address='123.56.247.76/24' reject"
# 开放端口
firewall-cmd --zone=public --permanent --add-port=8080/tcp
firewall-cmd --reload

文件统计

ls -g |awk 'BEGIN{sum=0}{sum+=$4}END{print sum/(1024*1024*1024)}'

history格式及数量修改

export HISTSIZE=10000
export HISTTIMEFORMAT=" %Y-%m-%d %H:%M:%S - `who am i 2>/dev/null | awk '{print $NF}'|sed -e 's/[()]//g'` - `who -u am i |awk '{print $1}'` "
export PROMPT_COMMAND="history 1 >> /var/log/.myhistory" #将命令记录输出到文本中
touch /var/log/.myhistory
chmod  /var/log/.myhistory

awk 分析 nginx 运行日志常用指令

Shell脚本 awk

awk 分析 nginx 运行日志常用指令

1.独立IP

awk '{print $1}' access.log | sort -r |uniq -c | wc -l

2.统计PV

awk '{print $6}' access.log | wc -l

3.查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

4.查询访问最频繁的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

5.UV统计:

awk '{print $6}' access.log | sort -r |uniq -c |wc -l

6.按小时统计

cat access.log |awk '{print $4}' | awk -F ':' '{print $1,$2}'|uniq -c | awk '{print $2" "$3" "$1}'
Previous Page 7 of 9 Next Page