WordPress在账号未登录时,访问wp-json/wp/v2/可能会泄露信息。

解决方法:

在当前主题目录的functions.php文件里添加以下代码:

// 在账号未登录时禁用wp-json/wp/v2/,防止泄露信息
add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result;
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error( 'Access denied', 'You have no permission to handle it.', array( 'status' => 401 ) );
    }
    return $result;
});

我们在用服务器配置网站的时候,对于PHP软件的参数配置中upload_max_filesize设置还是比较讲究的。如果配置的不好,可能负载在线人数就支持不多,如果配置的好可以负载就更高一些。

upload_max_filesize 是 PHP 配置项,用于设置允许上传的单个文件的最大大小。下面是一些设置 upload_max_filesize 的技巧:

1、参数值

upload_max_filesize 的值可以使用字节(例如 100M 表示 100 兆字节)或其他有效的单位(如 K、KB、M、MB、G、GB)。确保正确理解和使用适当的单位。

编辑 php.ini 文件:在服务器上找到 php.ini 文件,并使用文本编辑器打开。搜索 upload_max_filesize 配置项,在等号后面设置所需的值。例如:

upload_max_filesize = 100M

2、设置合适的文件大小限制

根据实际需求和应用场景,设置适当的文件大小限制。考虑上传文件的类型和服务器资源的可用性,以避免出现过大的文件导致服务不稳定或资源耗尽的问题。

3、重启服务器

保存 php.ini 文件并重新启动服务器,使新的配置生效。这样,PHP 将按照新的 upload_max_filesize 值处理文件上传请求。

4、处理其他相关配置项

上传文件大小还受到其他相关 PHP 配置项的影响,如 post_max_size 和 memory_limit。确保将这些配置项与 upload_max_filesize 协调一致,以确保完整的文件上传过程。

5、考虑安全性

在设置 upload_max_filesize 时,要谨慎考虑安全性问题。确保合理限制上传文件的大小,以防止恶意用户滥用和服务器资源受到过大文件的影响。

总结,一般我们在用成熟的一键安装面板和软件包的时候,会自动根据我们的服务器配置设置初始的值,如果我们后续调整过服务器配置那就需要自己手工再调整PHP的一些参数值。

Nginx 可以采用以下几种方式来防止被 CC(DDoS 攻击):

1. 限制连接速率:可以通过 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块限制每个 IP 的连接速率和请求速率,以确保服务器的连接和请求资源分配公平。

2. 过滤恶意请求:可以通过 ngx_http_access_module 模块进行黑白名单控制,阻止恶意请求来自黑名单 IP,减轻服务器的压力。在此基础上可以使用 ngx_http_referer_module 模块进行防盗链。

3. 控制请求大小:可以使用 ngx_http_request_limit_zone_module 和 ngx_http_client_body_module 模块来限制请求大小,防止非法的大量数据提交。

4. 开启缓存:建立服务器缓存来避免过多的请求将达到后端服务器,可以使用 ngx_http_proxy_module 和 ngx_http_fastcgi_module 模块来提高网站的访问速度,同时缓存能够帮助减轻服务器压力并防止被 CC 攻击。

5. 配置 Keep-Alive:启动 keep-alive 功能可以让浏览器和服务器之间的TCP连接保持长连接,有效减轻服务器压力同时提高访问速度。可以使用 ngx_http_headers_module 模块来配置 keep-alive 功能。

6. 使用专业的防火墙及负载均衡:在高访问量的情况下,使用专业的防火墙及负载均衡设备,将请求分配到不同服务器上,提高服务器性能,同时可以在防火墙上进行过滤非法IP,增强安全性。

这些方法可以有效地增强 Nginx 的安全性,更好地防止 CC(DDoS 攻击)和其他安全问题。

在PHP中,可以通过修改php.ini中的memory_limit指令来设置可用内存的大小。默认情况下,这个指令设置为128MB。

要更改此设置,请按照以下步骤操作:

1. 找到php.ini文件。这个文件通常在PHP安装的目录中。

2. 使用文本编辑器打开php.ini文件。

3. 找到以下行:

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M

4. 将memory_limit值更改为新大小,例如256M或512M。

5. 保存文件并重新启动PHP务器,以便更改生效。

请注意,如果您正在使用共享服务器,请先检查您是否有权更改此设置。一些虚拟主机提供商可能会限制您对php.ini文件的访问权限。

在 PHP 中获取 URL 参数可以通过 $_GET 超全局变量来实现。

例如,如果您想获取名为 id 的 URL 参数的值,可以使用以下代码:

$id = $_GET['id'];

如果 URL 中有多个参数,您可以通过类似的方式获取它们的值,例如:

$id = $_GET['id'];
$name = $_GET['name'];

请注意,$_GET 超全局变量仅能获取通过 GET 方法传递的参数,如果您使用 POST 方法传递参数,需要使用 $_POST 超全局变量或者 $_REQUEST 超全局变量获取参数。

一、问题描述:

用VSCode书写代码利用mysqli语句连接Mysql数据库的时候,没有出现智能提示:

二、原因:没有安装PHP Intelephense插件(注意有相似名字的插件不要安装错误)

三、安装:PHP Intelephense

打开VSCode编辑器,

(1)点击扩展;

(2)在打开的扩展商店中搜索“PHP Intelephense”;

(3)安装(下图为已经安装成功的截图);

四、配置:PHP Intelephense 插件:

打开VS Code编辑器,(1)点击左下角的小齿轮图标【管理】->(2)选择【命令面板】

(3)输入”settings.json”来搜索;点击【首选项:打开用户设置 (JSON)】即可进入用户设置settings.json文件

(4)配置:php.validate.executablePath路径(按自身情况填写,就是php.exe文件的路径),比如我的:”php.validate.executablePath”:

“D:\\phpstudy_pro\\Extensions\\php\\php7.3.4nts\\php.exe”

五、验证:插件使用效果

前言

最近有些 MJJ 采集博客,使内存有些超标,看了下文件发现军哥的 LNMP 的php-fpm配置是按最低标准设置的,这里可以稍微修改下,适用于自己的 VPS 配置。

修改说明

php-fpm设置动态还是静态,要根据你的 VPS 内存来定,如果内存小,比如 1G,那么指定静态的进程数量更加有利于服务器的稳定。这样可以保证 php-fpm 只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。

如果你的内存足够大,例如 4G 或 4G 以上你可以将 pm 设置成静态(static),因为这样不需要进行额外的进程数目控制,会提高效率(频繁开关 php-fpm 进程也会有时滞的)所以内存够大的情况下开静态效果会更好。
比如 4GB 内存可以设置为pm.max_children = 80,那么按照每个进程占用 15~30M 内存计算,php-fpm 耗费的内存就能控制在 1.2G-2.5G 的样子。

这里主要修改几个参数,说明一下:

  • pm.max_children:静态方式下开启的 php-fpm 进程数量;
  • pm.start_servers:动态方式下的起始 php-fpm 进程数量;
  • pm.min_spare_servers:动态方式下的最小备用 php-fpm 进程数量;
  • pm.max_spare_servers:动态方式下的最大备用 php-fpm 进程数量;

这里是军哥 LNMP 的/usr/local/php/etc/php-fpm.conf默认 1G 配置,LNMP 也会根据内存大小安装后配置不同,仅用于参考

pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

博主的机器是 1G 内存,修改后的配置可以参考,具体参数要设多少,可自己慢慢测试

pm = dynamic
pm.max_children = 24
pm.start_servers = 6
pm.min_spare_servers = 3
pm.max_spare_servers = 9
pm.max_requests = 2048
pm.process_idle_timeout = 10s
request_terminate_timeout = 120
request_slowlog_timeout = 0
slowlog = var/log/slow.log

结语

博主在使用pm = dynamic,  有时日志(/usr/local/php/var/log/php-fpm.log)里提示  pm.max_children  过小,  调大  pm.max_children  值, 日志里的 pm.max_children  警告就没有了。

nginx 发现警告日志提示:

WARNING: [pool www] server reached pm.max_children setting (5), consider raising it

原因是max_children设置太小了。

php-fpm.conf有两个至关重要的参数:

一个是”max_children”,另一个是”request_terminate_timeout”。

pm.max_children 表示 php-fpm 能启动的子进程的最大数量。

request_terminate_timeout 表示将执行时间太长的进程直接终止。

我的两个设置的值一个是”40″,一个是”900″,但是这个值不是通用的,而是需要自己计算的。

一、pm.max_children 多大合适?

这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。

设置”max_children” 也需要根据服务器的性能进行设定。

计算方式如下:

一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M~30M左右,因此我的”max_children”我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存2Gb。

而如果我 的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累“,处理速度也很慢,等待的时间也较长,占用的CPU也很高。

如果长时间没有得到处理的请求就会出现 504 Gateway Time-out 这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现 502 Bad gateway 这个错误。

max_children较好的设置方式根据req/s(吞吐率,单位时间里服务器处理的最大请求数,单位req/s)来设置,若程序是 100 req/s 的处理能力,那么就设置 100比较好,这是动态来调整的。

二、request_terminate_timeout 多大合适?

计算方式如下:

如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有循环或BUG的话你可以直接将”request_terminate_timeout”设 置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。

而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给”request_terminate_timeout”赋一个值,这个值可以根 据你服务器的性能进行设定。

一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了900秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。

解决执行 pecl upgrade-all 提示 Error getting channel info from pear.php.net: Connection to `ssl://pear.php.net:443' failed:Connection to 'ssl://pecl.php.net:443' failed: Unable to find the socket 错误。

出现这个错误主要是因为缺失默认证书导致的,具体原因不明。

下面说一下解决方案:

1、查看 default_cert_file 的路径

php -r "print_r(openssl_get_cert_locations());"

2、下载证书

wget -P /etc/ssl/ http://curl.haxx.se/ca/cacert.pem
chmod 744 /etc/ssl/cacert.pem

注意:其中 /etc/ssl/cacert.pem 替换为自己的真实路径

1、准备编译环境

yum install autoconf automake libtool make gcc libwebp libwebp-devel -y

2、下载并解压

wget https://imagemagick.org/download/ImageMagick.tar.gz
tar -xzf ImageMagick.tar.gz
#注意:如果是CnetOS 8则需要输入完整路径
cd ImageMagick*

3、配置并编译

由于7.0之后的版本默认开启webp支持,所以不再需要 --with-webp 参数

./configure --prefix=/usr
make
sudo make install
ldconfig

4、PHP 安装 imagick 模块

pecl install imagick

会提示:Please provide the prefix of ImageMagick installation [autodetect] :,输入ImageMagick的安装路径:

/usr

回车,等待完成安装。

5、配置 imagick 模块

在php.ini文件加入一行

extension=imagick.so

然后重启 php-fpm,使 imagick 模块生效