Linux 系统无须安装客户端实现代理连接

在 Unix/Linux 系统中自带了系统代理环境变量,通过这些变量的简单设置即可实现代理连接功能,常见的代理环境变量包括:

  1. http_proxy:用于 HTTP 请求的代理。
  2. https_proxy:用于 HTTPS 请求的代理。
  3. ftp_proxy:用于 FTP 请求的代理。
  4. no_proxy:不通过代理访问的地址列表,通常以逗号分隔。可以使用通配符。
  5. all_proxy:用于所有协议的代理设置,通常用于 SOCKS5 代理。
  6. rsync_proxy:用于 rsync 工具的代理设置。

命令示例

  • 设置 HTTP 代理
export http_proxy="http://proxy-server:port"
  • 设置 HTTPS 代理
export https_proxy="http://proxy-server:port"
  • 设置不通过代理的地址
export no_proxy="localhost,127.0.0.1,.example.com"

这些代理变量在大多数遵循标准的网络工具中都有效,包括 curlwgetgit 等。

系统可以使用 Socks5 代理。curl 支持 Socks5 代理,可以通过以下方式进行设置。

使用 Socks5 代理的命令

  1. curl 命令: 使用 -x 选项指定 Socks5 代理,例如:
curl -x socks5://proxy-server:port http://www.example.com

若 Socks5 代理需要身份验证,可以使用 -U 选项提供用户名和密码:

curl -U username:password -x socks5://proxy-server:port http://www.example.com
  1. 环境变量: 如果希望通过环境变量设置 Socks5 代理,可以使用以下命令:
export all_proxy="socks5://proxy-server:port"

对于需要身份验证的 Socks5 代理:

export all_proxy="socks5://username:password@proxy-server:port"

通过以上方式,可以方便地使用 Socks5 代理。

通过 export 命令设置的代理仅在当前终端会话有效。这意味着:

  • 当前会话有效:代理设置只在当前打开的终端窗口或会话中有效。
  • 关闭终端后失效:关闭终端或会话时,所有通过 export 设置的环境变量都会消失,打开新的终端窗口时,需要重新设置代理。

要清除临时设置的代理,可以使用 unset 命令。以下是清除 https_proxy 环境变量的步骤:

unset https_proxy

如果还设置了其他代理变量,如 http_proxyall_proxy,可以一并清除:

unset http_proxy
unset all_proxy

执行这些命令后将停用已设置的代理。

Nginx配置请求头以解决CORS跨域问题

当站点未包含 Access-Control-Allow-Origin 请求头时,根据 CORS 将不被允许访问,这个问题出现在独立静态资源站被其它域的网站引用时发生,尤其是发生在前后端部署的站点,在打开 Chrome 开发者工具进行调试时出现错误:from origin has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

配置以下Nginx代码以解决。

    # 允许所有来源访问
    add_header 'Access-Control-Allow-Origin' '*';

    # 允许的请求方法
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';

    # 允许的请求头
    add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';

    # 允许预检请求缓存时间
    add_header 'Access-Control-Max-Age' '1728000'; # 20 天

CentOS 7 官方镜像列表不可用,如何更换 CentOS 7 软件仓库?

CentOS 7 于2020年08月06日停止更新,于2024年6月30日停止维护(EOL),当前官方删除了 mirrorlist.centos.org 域名的解析,这导致使用 CentOS 7 的用户在更新或安装软件时会遇到无法连接到软件仓库的报错提示,因此需要更换软件仓库来解决这个问题。

CentOS 官方提供了名为 Vault 的库,专门用于存放已达 EOL 版本的所有软件包。更换使用官方 Vault 库步骤如下:

1.编辑 CentOS 7 的 yum 源配置文件,路径:/etc/yum.repos.d/CentOS-Base.repo ,将内容替换为:

[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

如要更换为阿里云提供的库,则使用以下内容替换:

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

2.清除 yum 缓存,执行命令:sudo yum clean all

3.更新软件包索引,执行命令:sudo yum makecache

通过以上步骤可以解决 CentOS 7 软件仓库不可用的问题。

阻止搜索引擎和恶意蜘蛛爬虫访问

大量的蜘蛛爬虫访问会消耗服务器性能开销,更有工具类爬虫对网站进行渗透访问,给网站安全造成威胁,本文分享这些爬虫的 User-Agent 以及阻止方法。

现在大部分网站都使用CDN进行加速,建议直接在CDN设置 User-Agent 黑名单

阿里云全站加速 DCDN 设置方法如图所示,在图中填入 User-Agent

*dotbot*|*Go-http-client*|*CensysInspect*|*okhttp*|*MegaIndex*|*MegaIndex.ru*|*BLEXBot*|*Qwantify*|*qwantify*|*semrush*|*Semrush*|*serpstatbot*|*hubspot*|*python*|*Bytespider*|*Go-http-client*|*Java*|*PhantomJS*|*SemrushBot*|*Scrapy*|*Webdup*|*AcoonBot*|*AhrefsBot*|*Ezooms*|*EdisterBot*|*EC2LinkFinder*|*jikespider*|*Purebot*|*MJ12bot*|*WangIDSpider*|*WBSearchBot*|*Wotbox*|*xbfMozilla*|*Yottaa*|*YandexBot*|*Jorgee*|*SWEBot*|*spbot*|*TurnitinBot-Agent*|*mail.RU*|*Perl*|*Python*|*Wget*|*Xenu*|*ZmEu*

Cloudflare设置方法如图,若使用表达式生成器手动一个个添加将耗费太多时间,直接编辑表达式填入如下表达式即可

(http.user_agent contains "Go-http-client") or (http.user_agent contains "CensysInspect") or (http.user_agent contains "okhttp") or (http.user_agent contains "MegaIndex") or (http.user_agent contains "MegaIndex.ru") or (http.user_agent contains "BLEXBot") or (http.user_agent contains "Qwantify") or (http.user_agent contains "qwantify") or (http.user_agent contains "semrush") or (http.user_agent contains "Semrush") or (http.user_agent contains "serpstatbot") or (http.user_agent contains "hubspot") or (http.user_agent contains "python") or (http.user_agent contains "Bytespider") or (http.user_agent contains "Go-http-client") or (http.user_agent contains "Java") or (http.user_agent contains "PhantomJS") or (http.user_agent contains "SemrushBot") or (http.user_agent contains "Scrapy") or (http.user_agent contains "Webdup") or (http.user_agent contains "AcoonBot") or (http.user_agent contains "AhrefsBot") or (http.user_agent contains "Ezooms") or (http.user_agent contains "EdisterBot") or (http.user_agent contains "EC2LinkFinder") or (http.user_agent contains "jikespider") or (http.user_agent contains "Purebot") or (http.user_agent contains "MJ12bot") or (http.user_agent contains "WangIDSpider") or (http.user_agent contains "WBSearchBot") or (http.user_agent contains "Wotbox") or (http.user_agent contains "xbfMozilla") or (http.user_agent contains "Yottaa") or (http.user_agent contains "YandexBot") or (http.user_agent contains "Jorgee") or (http.user_agent contains "SWEBot") or (http.user_agent contains "spbot") or (http.user_agent contains "TurnitinBot-Agent") or (http.user_agent contains "mail.RU") or (http.user_agent contains "perl") or (http.user_agent contains "Python") or (http.user_agent contains "Wget") or (http.user_agent contains "Xenu") or (http.user_agent contains "ZmEu")

在本机装有WAF的情况,例如宝塔WAF,直接导入即可,格式是一行一个UA

可使用AI工具处理格式

在Nginx配置代码如下:

    if ($http_user_agent ~ "MegaIndex|MegaIndex.ru|BLEXBot|Qwantify|qwantify|semrush|Semrush|serpstatbot|hubspot|python|Bytespider|Go-http-client|Java|PhantomJS|SemrushBot|Scrapy|Webdup|AcoonBot|AhrefsBot|Ezooms|EdisterBot|EC2LinkFinder|jikespider|Purebot|MJ12bot|WangIDSpider|WBSearchBot|Wotbox|xbfMozilla|Yottaa|YandexBot|Jorgee|SWEBot|spbot|TurnitinBot-Agent|mail.RU|perl|Python|Wget|Xenu|ZmEu|^$" ) {
        return 444;
    }

Nginx配置网站同时支持多个PHP版本

很多框架系统都有插件应用市场(例如Discuz!),有些插件应用开发者由于各种原因不再对插件应用更新维护,导致该应用不支持PHP7、PHP8,但框架系统已经支持新版PHP。亦或是系统未支持新版PHP,但应用需要新版PHP才能运行。这种情况可以对Nginx进行配置实现同时支持多个PHP。

    location ~ [^/]\.php(/|$)
    {
        if ($request_uri ~*  "archives"){
          fastcgi_pass unix:/tmp/php-cgi-72.sock;
        }
      fastcgi_pass  unix:/tmp/php-cgi-56.sock;
      fastcgi_index index.php;
      include fastcgi.conf;
      include pathinfo.conf;
    }

增加Linux Swap(虚拟内存)大小

Swap是Linux下的虚拟内存,也叫交换分区。当Swap使用率较高时,可通过以下方式增加其大小。

1.查看当前系统Swap空间

# free -mh
              total        used        free      shared  buff/cache   available
Mem:           31Gi        21Gi       414Mi        69Mi       9.0Gi       8.9Gi
Swap:          15Gi        15Gi       723Mi

2.创建Swap目录

# cd /usr
# mkdir swap

3.增加Swap文件

# dd if=/dev/zero of=/usr/swap/swapfile1 bs=1M count=16384
16384+0 records in
16384+0 records out
17179869184 bytes (17 GB, 16 GiB) copied, 32.0021 s, 537 MB/s

bs=1M 表示写入的每个块的大小为1M,count=16384 表示创建大小为16384M(16GB)的Swap文件

4.查看创建的Swap文件

# du -sh /usr/swap/swapfile1
16G     /usr/swap/swapfile1

5.将目标文件标识为Swap分区文件

# mkswap /usr/swap/swapfile1
mkswap: /usr/swap/swapfile1: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 16 GiB (17179865088 bytes)
no label, UUID=386dee2a-bca6-4ca4-a943-5f01aeba9f70

6.激活swap文件

# swapon /usr/swap/swapfile1
swapon: /usr/swap/swapfile1: insecure permissions 0644, 0600 suggested.

7.编辑/etc/fstab文件

vim /etc/fstab

在末行增加以下内容

/usr/swap/swapfile1 swap swap defaults 0 0

8.查看是否挂载成功

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       16506876        15748892        -2
/usr/swap/swapfile1                     file            16777212        0       -3

显示挂载成功后大约在几分钟后在探针中显现,显现后效果如图

%title插图%num
%title插图%num

参考链接:https://timberkito.com/?p=98

在 CentOS 7 安装Go环境

由于要部署的项目使用Go语言开发,但现成编译好的发布包版本较旧,因此只能自行编译。编译的前提是有Go环境,以下记录Go环境在 CentOS 7 的安装过程。

访问 https://go.dev/dl/ ,根据系统和CPU架构选择Go安装包下载

wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz

解压到目录 /usr/local

tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz

配置环境变量

echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bash_profile

source /etc/profile
source ~/.bash_profile

mkdir -p $GOPATH/src
mkdir $GOPATH/bin
mkdir $GOPATH/pkg

最后查看版本验证是否安装成功

go version

解决宝塔登录面板时卡在正在登录的问题

在登录宝塔面板时一直卡在“正在登录…” 进不去,尝试了重启面板、修复面板、清除缓存、清理系统垃圾、更换设备及网络等一系列操作都没解决问题。最后执行了(22) 显示面板错误日志,发现很多错误。

%title插图%num

本文使用的宝塔面板版本:8.0.1,系统:CentOS 7.9.2009 x86_64

宝塔面板每天会自动备份配置文件,保存在 /www/backup/panel/ 目录,最终通过恢复备份成功解决宝塔卡在正在登录的问题,以下是命令执行记录以供参考。

# bt stop
Stopping Bt-Tasks...    done
Stopping Bt-Panel...    done
# mv /www/server/panel/data/default.db /www/backup/default.db
# mkdir /www/backup/db/ -p
# unzip -o -d /www/backup/db /www/backup/panel/2023-08-04.zip
Archive:  /www/backup/panel/2023-08-04.zip
   creating: /www/backup/db/2023-08-04/
   creating: /www/backup/db/2023-08-04/data/
  inflating: /www/backup/db/2023-08-04/data/404.html  
  inflating: /www/backup/db/2023-08-04/data/default.db
# \cp -r -a /www/backup/db/2023-08-04/data/default.db /www/server/panel/data/default.db
# bt start
Starting Bt-Panel....   done
Starting Bt-Tasks...    done
 

为什么恢复4号而不是最近的?
最近5号到8号的备份文件大小一样,可能问题就从5号开始,所以优先恢复4号的。

%title插图%num