关注小众语言,记录、分享技术点滴!

0%

nginx想支持openresty的功能,需要安装以下模块及依赖luajit2lua-resty-corelua-resty-lrucachelua-nginx-modulengx_devel_kit以下5个依赖包必须先下载,另外如果需要同时支持SSL的话,还需要下载openssl依赖包(ssl只需要下载nginx编译时使用)。

一、安装openresty依赖包
1、安装luajit2(下载最新版本)

1
2
3
4
5
6
7
8
9
wget https://github.com/openresty/luajit2/archive/v2.1-20201229.tar.gz
tar -zxvf luajit2-2.1-20201229.tar.gz
cd luajit2-2.1-20201229
make
make install

#导入环境变量(编译nginx时需要)
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1

2、安装lua-resty-core

1
2
3
4
wget https://github.com/openresty/lua-resty-core/archive/v0.1.21.tar.gz
tar -zxvf lua-resty-core-0.1.21.tar.gz
cd lua-resty-core-0.1.21
make install

3、安装lua-resty-lrucache

1
2
3
4
wget https://github.com/openresty/lua-resty-lrucache/archive/v0.10.tar.gz
tar -zxvf lua-resty-lrucache-0.10.tar.gz
cd lua-resty-lrucache-0.10
make install

4、解压lua-nginx-module

1
2
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.19.tar.gz
tar -zxvf lua-nginx-module-0.10.19.tar.gz

5、解压ngx_devel_kit

1
2
wget https://github.com/vision5/ngx_devel_kit/archive/v0.3.1.tar.gz
tar -zxvf ngx_devel_kit-0.3.1.tar.gz

6、解压openssl

1
2
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -zxvf openssl-1.1.1k.tar.gz

二、编译及安装nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz

./configure --prefix=/usr/local/nginx \
--with-openssl=/usr/local/src/openssl-1.1.1k \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_gzip_static_module \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-http_slice_module \
--with-compat \
--with-file-aio \
--with-http_v2_module \
--with-ld-opt="-Wl,-rpath,/usr/local/lib" \
--add-module=/usr/local/src/ngx_devel_kit-0.3.1 \
--add-module=/usr/local/src/lua-nginx-module-0.10.19

make && make install

三、nginx配置

1
2
3
4
5
6
#设置openresty模块目录
lua_package_path "/usr/local/lib/lua/?.lua;/usr/local/nginx/conf/lua/?.lua;;";

#指定dns解析服务器,实现动态upstream
resolver 114.114.114.114 223.5.5.5 1.1.1.1 8.8.8.8 valid=30;
resolver_timeout 5;

四、hello openresty(/usr/local/nginx/conf/lua/hello.lua)

1
ngx.print("hello openresty!")

一、lsof相关使用
1、系统所有进程打开对应的句柄数

1
lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more

2、查看当前进程实时打开的文件数

1
lsof -p 进程ID |wc -l

3、查看被打开某一文件的相关进程信息

1
lsof /proc

4、查看监听端口25的进程

1
lsof -i:25

5、查看活动的连接

1
lsof -i @192.168.1.2

二、查看当前进程持有文件句柄数量和文件句柄最大限制

1、查看这个PID持有的句柄数

1
ls /proc/进程ID/fd | wc -l

2、查看当前进程句柄数量限制

1
cat /proc/进程ID/limits | grep "files"

三、查看系统总限制

1、查看系统总限制打开文件的最大数量

1
cat /proc/sys/fs/file-max

四、watch命令
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。在Linux下,watch是周期性的执行下个程序,并全屏显示执行结果。

1、每隔一秒高亮显示网络链接数的变化情况

1
watch -n 1 -d netstat -ant

2、每隔一秒高亮显示http链接数的变化情况

1
watch -n 1 -d 'pstree|grep http'

3、实时查看模拟攻击客户机建立起来的连接数

1
watch 'netstat -an | grep:21 | \ grep<模拟攻击客户机的IP>| wc -l'

4、10秒一次输出系统的平均负载

1
watch -n 10 'cat /proc/loadavg'

5、监测磁盘inode和block数目变化情况

1
watch -n 1 'df -i;df'

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

运行 Composer 需要 PHP 5.3.2+ 以上版本。一些敏感的 PHP 设置和编译标志也是必须的,但对于任何不兼容项安装程序都会抛出警告。

全局安装 (推荐)

1
2
3
curl -sS https://getcomposer.org/installer | php

mv composer.phar /usr/local/bin/composer

局部安装

1
curl -sS https://getcomposer.org/installer | php

全局配置(推荐)

阿里 Composer 全量镜像

1
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

取消配置

1
composer config -g --unset repos.packagist

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。
  Xftp是一种灵活且轻量级的SFTP/FTP客户端,用于需要安全地通过网络传输文件的用户。文件传输被简化,使用拖拽、直接编辑和增强的同步,这些特性在直观的标签界面中被封装。

Xshell & Xftp 显示评估期已过,怎么解决?

一、 卸载所有版本的Xshell,Xmanager,Xftp,Xldp和Netsarang产品,并从注册表中删除 NetSarang 目录 (HKEY_CURRENT_USER\Software\NetSarang)。

二、下载 Xshell 6 & Xftp 6

下载方式

http://www.netsarang.com/download/main.html 选择下载评估版,收到下载地址后将下载地址加上r。
例如 https://cdn.netsarang.net/f8a8d224/XmanagerPowerSuite-6.0.0009.exe
改为 https://cdn.netsarang.net/f8a8d224/XmanagerPowerSuite-6.0.0009r.exe
如果下载不带r的版本,无法输入序列号,注意不要下载到“思杰马克丁”特供版,下载完毕后,对安装包右键,属性,数字签名,如果是官方版则是“NetSarang Computer, Inc.”。

三、 添加路由到 C:\Windows\System32\drivers\etc\hosts

127.0.0.1 transact.netsarang.com
127.0.0.1 update.netsarang.com
127.0.0.1 www.netsarang.com
127.0.0.1 www.netsarang.co.kr
127.0.0.1 sales.netsarang.com

四、一定要在前三步骤做完之后再安装带r版本的 Xshell6 & Xftp6

注册码
Xshell Plus 6 : 180505-117501-020791
Xmanager Power Suite 6 :180429-116253-999126

五、安装完成后,将对应的程序运行一次后,打开注册表,将下列字段设置为当前用户拒绝全部权限,否则会反弹

HKEY_CURRENT_USER\Software\NetSarang\Xftp\6\LiveUpdate
HKEY_CURRENT_USER\Software\NetSarang\Xlpd\6\LiveUpdate
HKEY_CURRENT_USER\Software\NetSarang\Xmanager\6\LiveUpdate
HKEY_CURRENT_USER\Software\NetSarang\Xshell\6\LiveUpdate

打开注册表程序(开始 -> 运行 -> regedit 或 win + R 打开运行输入 regedit 回车进入注册表编辑器)

点击 “高级”

禁用继承

权限转换

编辑并取消各用户的所有权限

已注册的Xshell6

Xftp同样按照以上步骤操作,把权限去掉即可。

六、彻底禁用 Xshell & Xftp 更新

xshell菜单—-工具—选项
在选项设置里面,点击更新选项卡,去掉实时更新的勾选

删除更新程序

也可以把 LiveUpdate.exe 换成别的一个空文件来替换

注册码可以用这个生成
https://github.com/DoubleLabyrinth/Xmanager-keygen
需要用Python3.6 执行

最近在工作中遇到一个问题,尝试直接将服务运行在高配(40core, 192GB;相比虚拟机来说) 的物理机上,但是发现服务打开的文件句柄达到 80 万左右就不能再开更多了。

80 万已经是一个不小的值了,通常情况下,Linux 默认的值都很小,例如:Debian 8(jessie) 给普通用户设置的 open file(s) 限制为 65536, 可以通过下面的命令查看当前限制。

1
2
3
$ ulimit -n
$ ulimit -Sn
$ ulimit -Hn

ulimit 是一个 shell(这里使用的是 bash) 内置命令,可以通过 type ulimit 验证。

-n 即表示查看或者设置 open file(s) 的限制,在 ulimit 中,每个限制都有两种类型:

  • -S, soft limit, 软限制,用户可以上调软限制到硬限制
  • -H, hard limit, 硬限制,非 root 用户不能修改

如果没有指明,则同时修改软限制和硬限制。

修改 ulimit

修改分为临时修改和永久修改,临时修改只对当前 session 有效,登出和重启后都恢复系统设置。

临时修改使用 ulimit 命令,以修改 open file(s) 为例。

1
2
3
$ ulimit -n 1024000
$ ulimit -n
1024000

永久修改需要修改 /etc/security/limits.conf 或者在 /etc/security/limits.d/ 目录下添加一个文件。具体格式参考 /etc/security/limits.conf,里面有详细说明。

open file(s) 上限

回到遇到的问题中来:服务打开 80 万个左右的文件句柄就不能再打开了。所以, 尝试将 ulimit 设置为 1000 万,结果提示出错:

1
2
$ ulimit -n 10000000
-bash: ulimit: open files: cannot modify limit: Operation not permitted

注意,使用的可以 root 用户,居然没有权限,然后尝试降低到:

  • 500 万,依然错误
  • 300 万,依然错误
  • 200 万,依然错误
  • 100 万,成功了

显然,这里有一个上限,大概在 100-200 万之间。

所以,解决问题的办法,在于怎样提高这个上限!

通过一番搜索,发现 open file(s) kernel 级别有 2 个配置,分别是:

fs.nr_open,进程级别
fs.file-max,系统级别

fs.nr_open 默认设置的上限是 1048576,所以用户的 open file(s) 不可能超过这个上限。

1
2
3
4
$ sysctl -w fs.nr_open=10000000
$ ulimit -n 10000000
$ ulimit -n
10000000

修改后即可设置更大的 open file(s) 了。

同样,对于 kernel 参数的修改,sysctl 命令修改的是当前运行时,如果需要永久修改, 则将配置添加到 /etc/sysctl.conf 中,例如:

1
2
$ echo "fs.nr_open = 10000000" >> /etc/sysctl.conf
$ echo "fs.file-max = 11000000" >> /etc/sysctl.conf

注意:fs.nr_open 总是应该小于等于 fs.file-max

如果要查看当前打开的文件数,使用下面的命令:

1
2
$ sysctl fs.file-nr
$ fs.file-nr = 1760 0 11000000

不过,增大这些值意味着能够打开更多的文件(在 Linux 中,everything is file,包括 socket),但是同时也意味着消耗更多的资源,所以基本上在物理机上才会遇到这种问题。

一、Go get命令出现terminal prompts disabled解决

原因go get disable “terminal prompt” by default(Go get 命令默认禁用terminal prompt,即终端提示)

解决方案

设置环境变量:GIT_TERMINAL_PROMPT=1, 可以把上面的命令写到 .bashrc.bash_profile 文件当中。

二、一键解决 go get golang.org/x 包失败

当我们使用 go getgo installgo mod 等命令时,会自动下载相应的包或依赖包。但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况。如下所示:

1
2
3
$ go get -u golang.org/x/sys  

go get golang.org/x/sys: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

我们可以通过设置GOPROXY 环境变量来解决,我们知道从 Go 1.11 版本开始,官方支持了 go module 包依赖管理工具。其实还新增了 GOPROXY 环境变量。

解决方案

设置环境变量:GOPROXY=https://goproxy.io, 可以把上面的命令写到 .bashrc.bash_profile 文件当中。

三、总结

解决 terminal prompts disabled

export GIT_TERMINAL_PROMPT=1

解决 go get golang.org/x 包失败

export GOPROXY=https://goproxy.io

启用 Go Modules 功能

export GO111MODULE=on

报错信息:

1
fatal: unable to access 'https://github.com/***/***': SSL connect error

解决办法:

1
git config --global http.sslversion tlsv1

或者

1
git config --global http.sslVerify false   #设置跳过SSL证书验证

如果还不行,可能是ssh版本过低需要升级ssh。执行命令:

1
yum update nss     #redhat  centos

GraphicsMagick 是 ImageMagick 的另一个分支功能和 ImageMagick 类似。下面我们介绍一下在PHP7下如何安装扩展。

一、安装 GraphicsMagick 依赖

1
yum install GraphicsMagick-devel

二、选择手动方式安装gmagick(php扩展)
我们这里选择最新稳定版(gmagick-2.0.5RC1)

1
2
3
4
5
6
wget https://pecl.php.net/get/gmagick-2.0.5RC1.tgz  
tar -zxvf gmagick-2.0.5RC1.tgz
cd gmagick-2.0.5RC1
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

三、选择pecl方式安装gmagick(php扩展)

1
pecl install gmagick

四、修改php.ini 增加 extension,同时reload php-fpm 完成。

ps:
安装过程中可能出现以下问题
linux ‘….’:is not a valid libtool object”错误
解决方法

1
make clean

然后在重新执行命令,原因是编译的时候有问题重新编译一下文件就解决了

错误描述:

1
2
3
4
5
6
yum install libmcrypt libmcrypt-devel

Setting up Install Process
No package libmcrypt available.
No package libmcrypt-devel available.
Error: Nothing to do

我们会看到centos yum从仓库中根本找不到这几个包。但我不想使用源码编译就想使用yum安装,怎么办?
解决方法:

1
2
yum install epel-release  #扩展包更新包
yum update #更新yum源

然后再重新

1
yum install libmcrypt libmcrypt-devel

把某些目录或文件加入.gitignore规则,发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:

1
2
3
git rm -r --cached .
git add .
git commit -m 'update .gitignore'