转载自:https://www.cnblogs.com/fanbi/p/12375023.html

1 前言

在腾讯云上pip install sklearn时报这个错误,如下:

  File "/usr/local/python3/lib/python3.7/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'

原因:Python3中有个内置模块叫ctypes,它是Python3的外部函数库模块,它提供兼容C语言的数据类型,并通过它调用Linux系统下的共享库(Shared library),此模块需要使用CentOS7系统中外部函数库(Foreign function library)的开发链接库(头文件和链接库)。
由于在CentOS7系统中没有安装外部函数库(libffi)的开发链接库软件包,所以在安装pip的时候就报了”ModuleNotFoundError: No module named ‘_ctypes'”的错误。

2 步骤

  1. 安装外部函数库(libffi)

    yum install libffi-devel -y

  2. 重新安装python

    yum install python

  3. 用pip3 Install 安装需要的包

    pip3 install sklearn

3 参考

Python3.7.0以上版本安装pip报错ModuleNotFoundError: No module named ‘_ctypes’解决方法

发表于wooder | 留下评论

本文复制咱贴自https://itlanyan.com/wordpress-behind-proxy/#bnp_i_3

wordpress再经过反代后,会遇到后台循环重定向,静态资源不能正常加载等情况,以下为解决参考办法

WordPress通过Nginx反代

假设WordPress以http方式监听服务器上的8080端口,Nginx监听443端口,WordPress网站要求以 https://域名 的形式访问,Nginx配置里直接 proxy_pass 会遇到两个问题:

  1. WordPress网站的css、js、图片等资源无法加载,浏览器控制台报“mixed content”的错误。这是因为网站以https形式访问,而WordPress页面的资源是http形式,因此浏览器拒绝加载;
  2. 登录WordPress管理后台,出现循环重定向,导致登录页和管理后台都无法打开。

经过分析,问题出现的原因分别为:

  1. WordPress不知道网站通过https访问,因此页面中输出的链接是http形式;
  2. WordPress获取到的信息是端口为8080,而站点设置的端口是443,因此循环重定向。

知道了原因,解决办法就有了。具体操作是:Nginx转发时,告诉后端通信协议是https;告诉后端访问端口是443。

下面给出Nginx反向代理的关键配置:

location / {
        # 一些其他设置

        # 关键设置
        proxy_set_header      X-Forwarded-Proto https;
        proxy_set_header      X-Forwarded-Port 443;
        # 转发到后端
        proxy_pass http://localhost:8080;
    }

WordPress位于trojan后面

如果参考 trojan伪装建站 的操作,会遇到与上述情形不同的问题:trojan转发基于tcp实现,不能设置头部,甚至不能告诉后端用户的真实ip。

前端给不了后端想要的东西,只能自己解决。分析上面的问题和原理,其实只要让WordPress知道用https和443端口就可以了。所以一个可行、简单的办法是在WordPress中直接设置这两个值。操作为:编辑WordPress的 index.php 或 wp-config.php 文件,在文件开头放入如下两句话:

$_SERVER["HTTPS"] = "on";
$_SERVER["SERVER_PORT"] = 443;

index.php 可能在升级时被覆盖,因此建议放在 wp-config.php 文件里。

如果8080端口的WordPress用的Nginx,也可以在Nginx里设置。即转发到后端php-fpm时设置fastcgi变量:

fastcgi_param HTTPS "on";
fastcgi_param SERVER_PORT 443;

修改好后重新加载Nginx:systemctl reload nginx

参考

  1. The trick to get your wordpress behind a reverse proxy
发表于wooder | 留下评论

原issue见https://github.com/linuxserver/Heimdall/issues/471

Setting up Heimdall behind an nginx reverse proxy from selfhosted

为了能够在外网使用Heimdall,我使用nginx进行反代,但是在外网访问时css出现跨域错误,最开始以为是端口问题,因为我用的是默认端口,而不是80或者443。但是具体检查没有发现是端口的报错,因为nginx上面已经进行了端口设置。

后面github上面找到很多类似的issue,有的是版本本身的问题,找了一个按照他的方法,改了下nginx的配置就可以正常使用了。

我用的是nginx作为反代,搜了下网上需要添加以下header:

 

location / {

proxy_set_header Host $host;

proxy_set_header X-Forwarded-Scheme $scheme;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_set_header X-Real-IP $remote_addr;

proxy_pass $forward_scheme://$server:$port$request_uri;

}

发表于wooder | 留下评论

背景如下:

使用了官方了onlyoffice/documentserver镜像启动onlyoffice, 但是因为我有一台nginx主机专门用来代理内网服务,所以容器本身没有配置ssl。在nginx反代这个onlyoffice容器之后,去nextcloud主机添加onlyoffice报错404,具体报错如下:

GuzzleHttp\Exception\ClientException: Client error: `GET http://onlyoffice.*.*/cache/files/conv_check_1691855337_docx/output.docx/check_1691855337.docx?md5=_zTHiuEWC9wwWGN50IR4Hw&expires=1655468312&filename=check_1691855337.docx` resulted in a `404 Not Found` response: <!DOCTYPE html> <html> <head> <title>Not Found</title> <style> body { width: 35em; margin: 0 auto; (truncated…)

这个报错,我在很多地方都能搜到,但是都没有写太多的解决办法,最后大多是没下文,我在nextcloud主机用curl直接访问onlyoffice,报错如下

 

[[email protected] ~]# curl -v https://onlyoffice.*.*/
* About to connect() to onlyoffice.*.* port 443 (#0)
* Trying 1.14.48.241...
* Connected to onlyoffice.*.* (*.*.*.*) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
* Server certificate:
* subject: CN=onlyoffice.*.*
* start date: Jun 17 08:14:33 2022 GMT
* expire date: Sep 15 08:14:32 2022 GMT
* common name: *.*.*
* issuer: CN=R3,O=Let's Encrypt,C=US
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: onlyoffice.*.*
> Accept: */*
> 
< HTTP/1.1 302 Moved Temporarily
< Server: nginx
< Date: Fri, 17 Jun 2022 12:03:51 GMT
< Content-Type: text/html
< Content-Length: 138
< Connection: keep-alive
< Location: http://onlyoffice.*.*/welcome/
< Cache-Control: no-cache
< 
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host onlyoffice.*.* left intact

 

***注意上面那个标粗放大的部分,以及我本身访问的域名,可以看到,我访问的https,但是跳转到了http,猜测这个跳转是onlyoffice自己跳转的,因为我在proxy这边用https映射onlyoffice的http链接,proxy的配置检查过也没发现什么不对的地方,就是很正常的proxy配置。

最后的解决办法:直接快刀斩乱麻吧,我最后把证书文件挂载到了容器里面,也就是启用onlyoffice的https,然后再代理这个https链接,问题得到解决。

 

[[email protected] ~]# curl -v https://onlyoffice.*.*/
* About to connect() to onlyoffice.fencatn.cn port 443 (#0)
* Trying 1.14.48.241...
* Connected to onlyoffice.*.* (*.*.*.*.) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
* Server certificate:
* subject: CN=onlyoffice.*.*
* start date: Jun 17 08:14:33 2022 GMT
* expire date: Sep 15 08:14:32 2022 GMT
* common name: onlyoffice.*.*
* issuer: CN=R3,O=Let's Encrypt,C=US
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: onlyoffice.*.*
> Accept: */*
> 
< HTTP/1.1 302 Moved Temporarily
< Server: nginx
< Date: Fri, 17 Jun 2022 12:35:35 GMT
< Content-Type: text/html
< Content-Length: 138
< Connection: keep-alive
< Location: https://onlyoffice.*.*/welcome/
< Strict-Transport-Security: max-age=31536000
< X-Content-Type-Options: nosniff
< Cache-Control: no-cache
< 
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host onlyoffice.*.* left intact

 

重新把https链接填入nextcloud,一切正常,测试也正常了

参考链接:

https://dev.to/powerflo/setup-onlyoffice-document-server-with-let-s-encrypt-3a6

https://github.com/ONLYOFFICE/document-server-proxy/blob/master/nginx/proxy-https-to-http.conf

https://helpcenter.onlyoffice.com/installation/docs-community-proxy.aspx

发表于wooder | 留下评论

我在安装了wp hide login之后,发现没法使用自定义的PATH去登录后台,找了一圈,发现是网站没有打开伪静态。我是BT面板安装的,因此打开就好了。

发表于wooder | 留下评论

转载自https://note.qidong.name/2020/05/docker-proxy/

有时因为网络原因,比如公司NAT,或其它啥的,需要使用代理。 Docker的代理配置,略显复杂,因为有三种场景。 但基本原理都是一致的,都是利用Linux的http_proxy等环境变量。

dockerd代理

在执行docker pull时,是由守护进程dockerd来执行。 因此,代理需要配在dockerd的环境中。 而这个环境,则是受systemd所管控,因此实际是systemd的配置。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

其中,proxy.example.com:8080要换成可用的免密代理。 通常使用cntlm在本机自建免密代理,去对接公司的代理。 可参考《Linux下安装配置Cntlm代理》。

Container代理

在容器运行阶段,如果需要代理上网,则需要配置~/.docker/config.json。 以下配置,只在Docker 17.07及以上版本生效。

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:8080",
     "httpsProxy": "http://proxy.example.com:8080",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}

这个是用户级的配置,除了proxiesdocker login等相关信息也会在其中。 而且还可以配置信息展示的格式、插件参数等。

此外,容器的网络代理,也可以直接在其运行时通过-e注入http_proxy等环境变量。 这两种方法分别适合不同场景。 config.json非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。 在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用-e注入这种显式配置会更好,减轻对构建、部署环境的依赖。 当然,在这些环境中,最好用良好的设计避免配置代理上网。

docker build代理

虽然docker build的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。 在构建时,需要注入http_proxy等参数。

docker build . \
    --build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
    --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

注意:无论是docker run还是docker build,默认是网络隔绝的。 如果代理使用的是localhost:3128这类,则会无效。 这类仅限本地的代理,必须加上--network host才能正常使用。 而一般则需要配置代理的外部IP,而且代理本身要开启gateway模式。

重启生效

代理配置完成后,reboot重启当然可以生效,但不重启也行。

docker build代理是在执行前设置的,所以修改后,下次执行立即生效。 Container代理的修改也是立即生效的,但是只针对以后启动的Container,对已经启动的Container无效。

dockerd代理的修改比较特殊,它实际上是改systemd的配置,因此需要重载systemd并重启dockerd才能生效。

sudo systemctl daemon-reload
sudo systemctl restart docker

参考

发表于wooder | 留下评论

转载自https://www.unixso.com/NetWork/netstat.html

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
常见参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
状态列表:

LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态

常用使用方法:

并发请求数及其TCP连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

显示当前所有活动的网络连接:
netstat -na

列出所有端口 (包括监听和未监听的)
netstat -a

只显示监听端口 netstat -l
netstat -l

只列出所有监听 tcp 端口 netstat -lt
netstat -lt

只列出所有监听 udp 端口 netstat -lu
netstat -lu

只列出所有监听 UNIX 端口 netstat -lx
netstat -lx

显示所有端口的统计信息 netstat -s
netstat -s

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
netstat -st 
netstat -su

在 netstat 输出中显示 PID 和进程名称 netstat -p
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
netstat -pt

显示系统不支持的地址族 (Address Families)
netstat --verbose

显示核心路由信息 netstat -r
netstat -r

显示网络接口列表
netstat -i

显示出所有处于监听状态的应用程序及进程号和端口号:
netstat -aultnp

如果想对一个单一的进行查询,只需要在命令后面再加上“| grep $”。这里就用到了管道符,以及grep筛选命令,$代表参数,也就是你要查询的那个。
如要显示所有80端口的网络连接:
netstat -aultnp | grep 80

如果还想对返回的连接列表进行排序,这就要用到sort命令了,命令如下:
netstat -aultnp | grep :80 | sort

当然,如果还想进行统计的话,就可以再往后面加wc命令。如:
netstat -aultnp | grep :80 | wc -l

其实,要想监测出系统连接是否安全,要进行多状态的查询,以及要分析,总结,还有就是经验。总的下来,才可以判断出连接是否处于安全状态。
netstat -n -p|grep SYN_REC | wc -l

这个命令可以查找出当前服务器有多少个活动的 SYNC_REC 连接。正常来说这个值很小,最好小于5。 当有Dos攻击或者邮件炸弹的时候,这个值相当的高。尽管如此,这个值和系统有很大关系,有的服务器值就很高,也是正常现象。
netstat -n -p | grep SYN_REC | sort -u

先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
[email protected]:~$ netstat -nat |awk '{print $6}'|sort|uniq -c

列出所有连接过的IP地址。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

列出所有发送SYN_REC连接节点的IP地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

使用netstat命令计算每个主机连接到本机的连接数。
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出所有连接到本机的UDP或者TCP连接的IP数量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

检查 ESTABLISHED 连接并且列出每个IP地址的连接数量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
发表于wooder | 留下评论

检测sshd异常登录的脚本,防止暴力破解:

#!/bin/bash
#This is a host.deny Shell Script
#2013-08-24
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2 "=" $1;}' > /tmp/black_ip.txt
DEFINE=10
for i in `cat /tmp/black_ip.txt`
do
IP=`echo $i | awk -F= '{print $1}'`
NUM=`echo $i | awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ]
then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ]
then
echo "sshd:$IP" >> /etc/hosts.deny
fi
fi
done

发表于wooder | 留下评论

今天发现了一个可以更换群晖登录界面壁纸的脚本,拉取的是Bing的图片,代码在下面这个链接:

https://github.com/kkkgo/DSM_Login_BingWallpaper

把它添加到群晖定时任务里边就行了。

发表于wooder | 留下评论

clickhouse统计数据库大小

注意最后以后右边是两个分号

 

select
sum(rows) as "总行数",
formatReadableSize(sum(data_uncompressed_bytes)) as "原始大小",
formatReadableSize(sum(data_compressed_bytes)) as "压缩大小",
round(sum(data_compressed_bytes) / sum(data_uncompressed_bytes) * 100, 0) "压缩率"
from system.parts;;
发表在 clickhouse | 标签为 | 留下评论