阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

支持高并发Web服务器搭建

431次阅读
没有评论

共计 11270 个字符,预计需要花费 29 分钟才能阅读完成。

一、搭建

 服务器环境:

操作系统:CentOS7,16G 内存,8 核 cpu

安装软件版本: ,php5.6,php-fpm,nginx1.8.1,openresty-1.9.3

安装位置:/nginxLua

openresty 所在目录:/nginxLua/openresty

nginx 所在目录:/nginxLua/openresty/nginx

nginx.conf 所在目录:/nginxLua/openresty/nginx/conf

nginx 启动项所在目录:/nginxLua/openresty/nginx/sbin/nginx

linux 内核参数配置项(sysctl.conf):/etc/sysctl.conf

php-fpm.conf 所在:/etc/php-fpm.conf

php-fpm 配置项:/etc/php-fpm.d/www.conf

web 目录:/web/html

lua 代码目录:/web/lua

 什么是 openresty?

Openresty 是一款 nginx+lua 的集成包,在目前相对 lua 扩展不是很健全,openresty 是一个很好的选择,里面集成 lua 的基本模板

 什么是 lua?

Lua 详细的可以百度,作用就是结合 nginx 可以实现非常高并发的接口,所以 lua 主要是用来写接口

 什么是 nginx?

一种类似 apache 的 web 服务器,强大的负载均衡和高并发,epoll 的高效处理模式是它的优势,但其实他处理 php 的速度是跟 apache 不相上下的,但整体来说效率还是比 apache 快很多,因为他的异步非阻塞的处理机制

 编译安装 openresty

下载安装包(ngx_openresty-1.9.3.1.tar.gz 解压密码:0516)把压缩包拷到服务器上进行解压(创建一个文件夹 openresty)

tar -zxvf ngx_openresty-1.9.3.1.tar.gz -C /openresty

 在编译之前你需要安装一些基本的依赖包

yum update
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel readline-devel
yum -y install make

nginx 相关命令:

开启:/nginxLua/openrety/nginx/sbin/nginx
关闭:/nginxLua/openrety/nginx/sbin/nginx -s stop
平滑关闭 /nginxLua/openrety/nginx/sbin/nginx -s quit
重新加载配置 /nginxLua/openrety/nginx/sbin/nginx -s reload

 防火墙相关配置

firewall-cmd –permanent –query-port=9000/tcp 查看是否开启 9000 端口
firewall-cmd –permanent –add-port=9000/tcp 添加防火墙对 9000 端口开放
systemctl start firewalld.service 开启防火墙
systemctl stop firewalld.service 禁止使用防火墙
firewall-cmd –reload 防火墙配置加载

php-fpm 相关命令

/usr/sbin/php-fpm -c /etc/php.ini 启动
kill -SIGUSR2 cat /run/php-fpm/php-fpm.pid 重启
kill -SIGINT cat /run/php-fpm/php-fpm.pid 关闭

 进入 openresty 开始编译安装

./configure –prefix=/openresty
–with-luajit
–with-http_iconv_module
–with-http_postgres_module

make && make install

 测试是否安装成功

开启 nginx:/openresty/openrety/nginx/sbin/nginx

修改配置文件:vi /openresty/openresty/conf/nginx.conf

在配置文件中的 server 中加一个 location:
location /lua {
default_type‘text/html’;
content_by_lua‘
ngx.say(“hellow,word”)
’;
}

开启 nginx 服务:/openresty/openrety/nginx/sbin/nginx

curl 127.0.0.1/lua

可以看到结果:hellow,word 说明 nginx 加 lua 已经编译安装好了

  • 安装 php-5.6

    添加 yum 源

CentOs 5.x
rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm
CentOs 6.x
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
CentOs 7.X
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

 安装 php-5.6

yum -y install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-MySQL.x86_64 php56w-pdo.x86_64 php56w-pear.noarch php56w-process.x86_64 php56w-xml.x86_64 php56w-xmlrpc.x86_64

 安装 php56w-fpm(nginx 编译 php 文件的关键)

yum install php56w-fpm -y

 配置 nginx 支持编译 php 文件(编辑 nginx.conf)

location ~ .php(.*){
             root html; 
             fastcgi_pass 127.0.0.1:9000; 
             fastcgi_index  index.php; 
             fastcgi_split_path_info ^(.+.php)(.*)
;// 支持 thinkphp 路由规则的重要配置
fastcgi_param SCRIPT_FILENAME document支持高并发 Web 服务器搭建r 支持高并发 Web 服务器搭建 oot支持高并发 Web 服务器搭建 fastcgi_script_name;
fastcgi_param PATH_INFO fastcgi 支持高并发 Web 服务器搭建 p支持高并发 Web 服务器搭建ath 支持高并发 Web 服务器搭建 i支持高并发 Web 服务器搭建nfo;fastcgi 支持高并发 Web 服务器搭建 p支持高并发 Web 服务器搭建aramPATH 支持高并发 Web 服务器搭建 T支持高并发 Web 服务器搭建RANSLATED 支持高并发 Web 服务器搭建 document_root$fastcgi_path_info;
include fastcgi_params;
}

 启动 nginx 和 php-fpm,测试输出 php 文件是否有效

502 bad getway:很有可能就是你上面配置出现错误了

php 文件被下载了:说明 nginx 不能编译 php 文件,直接坐位普通文件下载了,要检查配置文件是否做了相关的配置

二、支持高并发的配置优化

 优化系统内核

timewait 的数量,默认是 180000。但是多了会影响处理速度,少了无法最大化利用系统性能

net.ipv4.tcp_max_tw_buckets = 20000

允许系统打开的端口范围。不设置的话在高并发的情况下有可能把服务器的端口都占满,那就彻底爆炸了

net.ipv4.ip_local_port_range = 10000 65000

启用 timewait 快速回收,这个必须要打开,很大程度的提高效率

net.ipv4.tcp_tw_recycle = 1

开启 SYN Cookies,当出现 SYN 等待队列溢出时,启用 cookies 来处理。net.ipv4.tcp_syncookies = 1

web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到 128,而 nginx 定义的 NGX_LISTEN_BACKLOG 默认为 511,所以有必要调整这个值

net.core.somaxconn = 262144

每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。net.core.netdev_max_backlog = 262144

系统中最多有多少个 TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的 DoS 攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值 (如果增加了内存之后)。net.ipv4.tcp_max_orphans = 262144

记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有 128M 内存的系统而言,缺省值是 1024,小内存的系统则是 128。net.ipv4.tcp_max_syn_backlog = 262144

时间戳可以避免序列号的卷绕。一个 1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。net.ipv4.tcp_timestamps = 0

为了打开对端的连接,内核需要发送一个 SYN 并附带一个回应前面一个 SYN 的 ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的数量。net.ipv4.tcp_synack_retries = 1

在内核放弃建立连接之前发送 SYN 包的数量。net.ipv4.tcp_syn_retries = 1

如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT- 2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是 60 秒。2.2 内核的通常值是 180 秒,3 你可以按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2 的危险性比 FIN-WAIT-1 要小,因为它最多只能吃掉 1.5K 内存,但是它们的生存期长些。net.ipv4.tcp_fin_timeout = 2

当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度。缺省是 2 小时。net.ipv4.tcp_keepalive_time = 30

详细的系统内核参数配置

CTCDN 系统优化参数

关闭 ipv6

net.ipv6.conf.all.disable_ipv6=1

net.ipv6.conf.default.disable_ipv6=1

避免放大攻击

net.ipv4.icmp_echo_ignore_broadcasts=1

开启恶意 icmp 错误消息保护

net.ipv4.icmp_ignore_bogus_error_responses=1

关闭路由转发

net.ipv4.ip_forward=0

net.ipv4.conf.all.send_redirects=0

net.ipv4.conf.default.send_redirects=0

开启反向路径过滤

net.ipv4.conf.all.rp_filter=1

net.ipv4.conf.default.rp_filter=1

处理无源路由的包

net.ipv4.conf.all.accept_source_route=0

net.ipv4.conf.default.accept_source_route=0

关闭 sysrq 功能

kernel.sysrq=0

core 文件名中添加 pid 作为扩展名

kernel.core_uses_pid=1

开启 SYN 洪水攻击保护

net.ipv4.tcp_syncookies=1

修改消息队列长度

kernel.msgmnb=65536

kernel.msgmax=65536

设置最大内存共享段大小 bytes

kernel.shmmax=68719476736

kernel.shmall=4294967296

timewait 的数量,默认 180000

net.ipv4.tcp_max_tw_buckets=20000

系统同时保持 TIME_WAIT 的最大数量,如果超过这个数字,TIME_WAIT 将立刻被清除并打印警告信息。默认为 180000

net.ipv4.tcp_sack=1

net.ipv4.tcp_window_scaling=1

net.ipv4.tcp_rmem=4096 87380 4194304

net.ipv4.tcp_wmem=4096 16384 4194304

net.core.wmem_default=8388608

net.core.rmem_default=8388608

net.core.rmem_max=16777216

net.core.wmem_max=16777216

每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目

net.core.netdev_max_backlog=662144

web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到 128,而 nginx 定义的 NGX_LISTEN_BACKLOG 默认为 511,所以有必要调整这个值

net.core.somaxconn=662144

限制仅仅是为了防止简单的 DoS 攻击

net.ipv4.tcp_max_orphans=662144

未收到客户端确认信息的连接请求的最大值 可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_syn_backlog=662144

net.ipv4.tcp_timestamps=0

内核放弃建立连接之前发送 SYNACK 包的数量

net.ipv4.tcp_synack_retries=1

内核放弃建立连接之前发送 SYN 包的数量

net.ipv4.tcp_syn_retries=1

启用 timewait 快速回收

net.ipv4.tcp_tw_recycle=1

开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_mem=94500000 915000000 927000000

net.ipv4.tcp_fin_timeout=3

当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度。缺省是 2 小时

net.ipv4.tcp_keepalive_time=30

允许系统打开的端口范围

net.ipv4.ip_local_port_range=10000 65000

修改防火墙表大小,默认 65536

net.netfilter.nf_conntrack_max=655350

net.netfilter.nf_conntrack_tcp_timeout_established=1200

确保无人能修改路由表

net.ipv4.conf.all.accept_redirects=0

net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.all.secure_redirects=0

net.ipv4.conf.default.secure_redirects=0

sysctl -p 使配置生效

 系统连接数的优化

查看当前系统允许打开的文件数(没修改的话就是 1024)ulimit -n

编辑修改 /etc/security/limits.conf 在末尾添加如下代码,
  • soft noproc 65535
  • hard noproc 65535
  • soft nofile 65535
  • hard nofile 65535

    修改系统运行打开的最大连接数

    ulimit -SHn 65535

    nginx.conf 的优化配置

    nginx 进程数,建议按照 cpu 数目来指定,一般为它的倍数 (如,2 个四核的 cpu 计为 8)。

    worker_processes 8;

    这个指令是指当一个 nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文 件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit - n 的值保持一致。现在在 linux2.6 内核下开启文件打开数为 65535,worker_rlimit_nofile 就相应应该填写 65535。

    worker_rlimit_nofile 65535;

    useepoll;

使用 epoll 的 I /O 模型

(

补充说明:

与 apache 相类,nginx 针对不同的操作系统,有不同的事件模型

 A)标准事件模型
 Select、poll 属于标准事件模型,如果当前系统不存在更有效的方法,nginx 会选择 select 或 poll
 B)高效事件模型  

Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 和 MacOS X. 使用双处理器的 MacOS X 系统使用 kqueue 可能会造成内核崩溃。
Epoll: 使用于 Linux 内核 2.6 版本及以后的系统。

/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。

   Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题,有必要安装安全补丁。

)

 每个进程允许的最多连接数,理论上每台 nginx 服务器的最大连接数为 worker_processes*worker_connections。

worker_connections 65535;

keepalive 超时时间。

keepalive_timeout 60;

 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。

client_header_buffer_size 4k;

7. 这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。

open_file_cachemax=65535 inactive=60s;

 这个是指多长时间检查一次缓存的有效信息。

open_file_cache_valid80s;

open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive 时间内一次没被使用,它将被移除。

open_file_cache_min_uses 1;

 开启进程复用

multi_accept on;

 单个客户端在 keep-alive 连接上可以发送的请求数量,在测试环境中,需要配置个比较大的值。

keepalive_requests 200000;

gzip 相关配置

gzip on;
gzip on;
gzip_min_length 5k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 4;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;

 缓存配置

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
}

 引入 lua 库

lua_package_path“/nginxLua/openresty/lualib/resty/?.lua;;”;

 配置调用执行 ua 代码


location /redis {
default_type‘text/html’;
content_by_lua_file /lua/redis.lua;
}

 优化的 nginx 配置

user nobody;

worker_processes 8;
worker_rlimit_nofile 65535;

error_log logs/error.log;

error_log logs/error.log notice;

error_log logs/error.log info;

error_log off;

pid logs/nginx.pid;

events {
use epoll;
multi_accept on; #开启进程复用
worker_connections 65535;
}

http {
include mime.types;
default_type application/octet-stream;

#log_format  main  '$remote_addr - $remote_user [$time_local]"$request" '
#                  '$status $body_bytes_sent"$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;
access_log off;# 正式环境最好注释掉

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  0;
keepalive_requests 200000;# 单个客户端在 keep-alive 连接上可以发送的请求数量,在测试环境中,需要配置个比较大的值。gzip  on;
#gzip on;
gzip_min_length  5k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 4;
gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;

lua_package_path "/nginxLua/openresty/lualib/resty/?.lua;;";

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }

    location /redis {
     default_type 'text/html';
     content_by_lua_file /lua/redis.lua;            
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #    root   html;
    #}
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php(.*)$ {
         root html;
    #fastcgi_pass unix:/dev/shm/fpm-cgi.sock;
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_split_path_info ^(.+\.php)(.*)$;
         fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param   PATH_INFO       $fastcgi_path_info;
         fastcgi_param   PATH_TRANSLATED $document_root$fastcgi_path_info;
         include fastcgi_params;
    }

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {expires       30d;}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename  alias  another.alias;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}


# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;

#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;

#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

}

php-fpm 配置优化

配置目录:/etc/php-fpm.d/www.conf

php-fpm 初始 / 空闲 / 最大 worker 进程数

pm.max_children = 300
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

 最大处理请求数是指一个 php-fpm 的 worker 进程在处理多少个请求后就终止掉,master 进程会重新 respawn 一个新的。这个配置的主要目的是避免 php 解释器或程序引用的第三方库造成的内存泄露。

pm.max_requests = 10240

所有配置修改都要记得重启服务,确保配置加载
三、压力测试

 测试项目

worker_rlimit_nofile(最大可用文件描述符数量)worker_connections 单个进程允许的最大连接数
worker_processes 服务开启的进程数
keepalive_timeout 自动关闭连接时间
multi_accept 是否开启进程复用
gzip_comp_level
keepalive_requests 单个客户端在 keep-alive 连接上可以发送的请求数量

测试数据(点击可以下载):参数设置:

worker_rlimit_nofile worker_connections worker_processes keepalive_timeout multi_accept gzip_comp_level keepalive_requests
65535 65535 8 0 on 4 65535

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-10/135848.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计11270字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7984793
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...