分类 Server 下的文章

通常提示为:无法启动此程序,因为计算机中丢失VCRUNTIME140.dll,尝试重新安装此程序以解决此问题方案合集。

如下图所示:
QQ20230906-075748@2x.png

网上有许多种解决办法,但最安全有效的办法就是安装微软的C++程序集。

第一步:网盘下载微软的安装程包.exe

链接: https://pan.baidu.com/s/1RObq8NIB40YXZRhCmz4iaA 
提取码: fmyv


第二步:下一步下一步即可,连重启都不用。

QQ20230906-080010@2x.png

最后,就安装完成,问题解决。

1.Nginx 实现一个 IP 访问总流量限制

http {
    limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
    # 其他配置
}
server {
    listen 80;
    server_name example.com;

    # 限制单个客户端 IP 最大连接数为 2
    limit_conn conn_zone 2;
    # 限制单个客户端 IP 1s 内最多发起 1 个请求
    limit_req zone=req_zone burst=5;
    # 计算客户端 IP 累计请求流量,限制累计请求流量为 1GB
    set $limit_rate 128k;
    limit_rate_after 500M;
    limit_rate 1m;
    # 其他处理逻辑
}

2. 统计服务器所有 url 被请求的数量

#统计其他端口时:netstat -pnt | grep :xx | wc -l
netstat -pnt | grep :443 | wc -l

3. 查找请求数前 20 个 IP

#服务器被恶意高频访问时可以用到
netstat -ant |awk '/:443/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20

4. 统计文件中某个字符转出现的次数

#如统计文件api_error.log中error关键词出现的次数
grep -o 'error' /www/payment/runtime/logs/api_error.log | wc -l

5. 监听文件

#可以监听整个文件,也可根据关键词监听
cd /www/payment/runtime/logs/

tail -f xxx.log #监听整个文件
tail -f xxx.log | grep 'xxx' #根据关键词监听

6. 查看文件大小

#以下是本人开发中常用到的
一、du命令
du命令是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

du -h filepath 直接得出人好识别的文件大小

du -h ljl.txt

或者
du -ah 当前目录下所有文件的大小

二、ls命令
ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。

ls -l filepath 第五列为文件字节数

ls -l ljl.txt

ls -h filepath h表示human, 加-h参数得到人好读的文件大小

ls -lh ljl.txt

7. 查看 ip 来源地

#使用这个是为了查看异常登录地址
yum -y install whois
whois 119.53.224.203

8. 查看磁盘使用情况

df -h

9. 创建软链接

ln -s [源文件或目录] [目标文件或目录]

例如:创建软链时,先进入根目录的bin目录下

cd /bin

从/bin这个路径创建软链nginx 引入/usr/local/nginx/sbin/nginx

ln -s /usr/local/nginx/sbin/nginx nginx

创建软链之后 重载nginx 
就可以从 /usr/local/nginx/sbin/nginx -s reload 简化为 nginx -s reload

10. 查看是否监听 9000 端口(其他端口雷同)

netstat -ant | grep 9000

11.Nginx 解决跨域问题

#server模块中添加以下内容,修改完后,记得重启nginx
add_header  Access-Control-Allow-Headers '*';
add_header  Access-Control-Allow-Origin '*';
add_header  Access-Control-Allow-Credentials 'true';
add_header  Access-Control-Allow-Methods 'GET,POST,OPTIONS';

#跨域参数解释
#Access-Control-Allow-Origin:服务器默认是不被允许跨域的。给Nginx服务器配置Access-Control-Allow-Origin *后,表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求。
#Access-Control-Allow-Methods:允许通过的方法,可以防止Content-Type is not allowed by Access-Control-Allow-Headers in preflight response的错误信息
#Access-Control-Allow-Credentials true 表示允许跨域请求携带 cookie
#Access-Control-Allow-Headers:为了防止出现Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response的错误信息。这个错误表示当前请求Content-Type的值不被支持。其实是我们发起了”application/json”的类型请求导致的

12.Nginx 配置 ssl (小白看过来)

server {
    listen 443 ssl;#监听443端口
    #server_name 购买域名后解析到该服务器上,如果没有域名,也可以给此项目单独开端口
    server_name  api.applet.xxx.com;
    root        /xxx/xxxx/xxxx;#root 项目地址
    index       index.php index.html index.htm;#项目入口文件

    #存放证书的地址.pem和.key文件
    ssl_certificate /usr/local/nginx/conf/vhost/cert/xxx.pem;
    ssl_certificate_key /usr/local/nginx/conf/vhost/cert/xxx.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    if (!-e $request_filename){
        rewrite ^/(.*) /index.php last;
    }

    location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
    }
    error_log  /var/log/nginx/api_applet.log error;
}

13.Nginx 开放防火墙端口

#这里讲到的是CentOS7,CentOS7的防火墙和CentOS6不一样了, CentOS 6 系列中的 iptables 相关命令不能用了,Centos7中使用firewalld代替了原来的iptables。

#停止firewall
systemctl stop firewalld.service

#禁止firewall开机启动
systemctl disable firewalld.service

#添加8022端口
firewall-cmd --zone=public --add-port=8022/tcp --permanent

#多个端口:
firewall-cmd --zone=public --add-port=80-90/tcp --permanent

#命令含义:
--zone #作用域
--add-port=8022/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

#centos7查看防火墙所有信息
firewall-cmd --list-all

#centos7查看防火墙开放的端口信息
firewall-cmd --list-ports

#删除8022端口
firewall-cmd --zone=public --remove-port=8022/tcp --permanent

#重启防火墙
firewall-cmd --reload

常用命令介绍:
firewall-cmd --state                ##查看防火墙状态,是否是running
firewall-cmd --reload               ##重新载入配置,比如添加规则之后,需要执行此命令
firewall-cmd --get-zones            ##列出支持的zone
firewall-cmd --get-services         ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp    ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp      ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent     ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent  ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent     ##永久添加80端口

转自:https://learnku.com/articles/78462

栈和堆是计算机内存中存储数据的两种方式。

栈是一种数据结构, 采用先进后出 (LIFO) 的方式存储数据。栈的操作只允许在栈顶插入和删除元素,因此栈的访问速度较快。栈本身分配在内存的高地址空间,向低地址扩展,而具体的数据值则按照定义的方式存储在栈帧中。

堆是另一种内存数据存储方式,它在程序运行时动态分配内存,用于存储程序运行期间的数据。堆的内存分配是在程序运行时进行的,并且随着程序执行的进展而不断地增加或减少。由于堆的动态特性,访问堆中的变量速度比访问栈中的变量要慢。

在C#中,所有值类型的变量都存储在栈中,而所有引用类型的变量在栈中只存放引用,而对象则在堆中分配空间。换句话说,引用类型的变量存储的是指向堆中对象的指针。

输入流(读):从文件读到内存的流向。
输出流(写):从内存写入文件的方向。

输入流与输出流.png

系统环境介绍以及准备

查看系统版本

[root@xmg-hk ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

查看openssl版本

[root@xmg-hk ~]# openssl version 
OpenSSL 1.0.2k-fips  26 Jan 2017

官网下载openssl-1.1.1k

其他版本可参考下载: https://www.openssl.org/source/openssl-1.1.1k.tar.gz

cd /usr/local/
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -zcvf openssl-1.1.1k.tar.gz

详细操作步骤

先备份

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

进入目录并编译

cd /usr/local/openssl-1.1.1k
./config --prefix=/usr/local/openssl
make && make install

建立链接

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo “/usr/local/openssl/lib” >> /etc/ld.so.conf
ldconfig -v

查看是否升级成功

[root@xmg-hk ~]# openssl version 
OpenSSL 1.1.1k  25 Mar 2021
说明:需要先进行备份,备份需要在"建立链接"操作以前完成。

转自:https://cloud.tencent.com/developer/article/1907392

PHP扩展gmp被加载两次,报错如下:

PHP Warning: Module "gmp" is already loaded in Unknown on line 0

解决办法:

Not all PHP modules are loaded as separate modules and are part of the
PHP base binary. In this case the module is loaded without a separate
load statement/configuration. If in addition a separate configuration
file exists, e.g. /etc/php7/fpm/conf.d/gmp.ini, the web server tries
to load the module twice which can cause these kind of messages.
//打开.ini配置文件,将下面这行注销即可;
extension=gmp.so

原因:

是因为.ini文件底部又加载了一次,如下:

extension =  /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/gmp.so

步骤一:

先检测本机是否有gmp扩展在mamp下,命令如下:

/Applications/MAMP/bin/php/php8.0.8/bin/php -i | grep gmp

如果没有此扩展,此时什么也不会出现,如果已经成功安装了扩展,将会出现如下所示的提示:

PWD => /Applications/MAMP/bin/php/php8.0.8/include/php/ext/gmp
$_SERVER['PWD'] =>
/Applications/MAMP/bin/php/php8.0.8/include/php/ext/gmp $_ENV['PWD']
=> /Applications/MAMP/bin/php/php8.0.8/include/php/ext/gmp

步骤二:

php官网下载其源码包php-8.0.8.tar.gz
https://www.php.net/releases/

注意:一定要与你的现在版本一致辞,必须,必须,必须!

可以下载到任意目录,下载完成以后,解压。找到目录.
111.png

步骤三:

将目录/Users/liziyu/Downloads/php-8.0.8/ext/,将gmp目录整拷贝到/Applications/MAMP/bin/php/php8.0.8/include/php/ext目录下,如图:
222.png

步骤四:

同时进入该目录下:

cd /Applications/MAMP/bin/php/php8.0.8/include/php/ext/gmp

执行命令:

/Applications/MAMP/bin/php/php8.0.8/bin/phpize

然后执行:

./configure --with-php-config=/Applications/MAMP/bin/php/php8.0.8/bin/php-config

再执行:

make

最后:

make install

3333.png

当出现如下图所示的提示时说明已经安装成功了。
此时重启php,然后执行

php -m 

成功的话会出现如下图的提示:
444.png

如果还没有此提示的话,则进入php的配置文件ini去修改,增加下面一行代码:

extension=gmp.so

再重启php查看。即可

本文参考:https://mycodde.blogspot.com/2020/01/install-php-gmp-extension-in-mamp-2020.html

1、第一步

$ which php
$ vim ~/.bash_profile

2、第二步

$ export PATH=/Applications/MAMP/bin/php/php7.2.7/bin:$PATH
$ #/Applications/MAMP/bin/php/php7.2.7/bin是我的php版本路径

3、第三步

$ source ~/.bash_profile

4、第四步

$ php -v

如果以上步骤仍然没有改变PHP的版本,再执行以下:

1、vim ~/.zshrc
2、source~/.bash_profile