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

Nginx配置及内核优化详解

448次阅读
没有评论

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

在日常的运维工作中,经常会用到 Nginx 服务,也时常会碰到 Nginx 因高并发导致的性能瓶颈问题。今天这里简单梳理下 Nginx 性能优化的配置(如有不妥,敬请指出~)

一、这里的优化主要是指对 nginx 的配置优化,一般来说 nginx 配置文件中对优化比较有作用的主要有以下几项:
1)nginx 进程数,建议按照 cpu 数目来指定,一般跟 cpu 核数相同或为它的倍数。
worker_processes 8;
2)为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一个进程分配到多个 cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
3)下面这个指令是指当一个 nginx 进程打开的最多文件描述符数目,理论值应该是系统的最多打开文件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit - n 的值保持一致。
worker_rlimit_nofile 65535;
4)使用 epoll 的 I / O 模型,用这个模型来高效处理异步事件
use epoll;
5)每个进程允许的最多连接数,理论上每台 nginx 服务器的最大连接数为 worker_processes*worker_connections。
worker_connections 65535;
6)http 连接超时时间,默认是 60s,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!否则会导致许多无效的 http 连接占据着 nginx 的连接数,终 nginx 崩溃!
keepalive_timeout 60;
7)客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分页大小可以用命令 getconf PAGESIZE 取得。
client_header_buffer_size 4k;
8)下面这个参数将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=102400 inactive=20s;
9)下面这个是指多长时间检查一次缓存的有效信息。
open_file_cache_valid 30s;
10)open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive 时间内一次没被使用,它将被移除。
open_file_cache_min_uses 1;

11)隐藏响应头中的有关操作系统和 web server(Nginx)版本号的信息,这样对于安全性是有好处的。
server_tokens off;
12)可以让 sendfile()发挥作用。sendfile()可以在磁盘和 TCP socket 之间互相拷贝数据 (或任意两个文件描述符)。Pre-sendfile 是传送数据之前在用户空间申请数据缓冲区。之后用 read() 将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到 OS 缓存。因为这种拷贝是在内核完成的,sendfile()要比组合 read()和 write()以及打开关闭丢弃缓冲更加有效 (更多有关于 sendfile)。
sendfile on;
13)告诉 nginx 在一个数据包里发送所有头文件,而不一个接一个的发送。就是说数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。
tcp_nopush on;
14)告诉 nginx 不要缓存数据,而是一段一段的发送 – 当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
tcp_nodelay on;
比如:
http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
……
}
15)客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。
分页大小可以用命令 getconf PAGESIZE 取得。
[root@test-huanqiu ~]# getconf PAGESIZE
4096
但也有 client_header_buffer_size 超过 4k 的情况,但是 client_header_buffer_size 该值必须设置为“系统分页大小”的整倍数。
16)为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=65535 inactive=60s;
17)open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive 时间内一次没被使用,它将被移除。
open_file_cache_min_uses 1;
18)指定多长时间检查一次缓存的有效信息。
open_file_cache_valid 80s;

—————————————————————-
下面是一个本人使用的简单的 nginx 配置文件:

[root@www.linuxidc.com ~]# cat /usr/local/nginx/conf/nginx.conf

user  www www;

worker_processes 8;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;

error_log  /www/log/nginx_error.log  crit;

pid        /usr/local/nginx/nginx.pid;

worker_rlimit_nofile 65535;

events

{

  use epoll;

  worker_connections 65535;

}

http

{

  include      mime.types;

  default_type  application/octet-stream;

  charset  utf-8;

  server_names_hash_bucket_size 128;

  client_header_buffer_size 2k;

  large_client_header_buffers 4 4k;

  client_max_body_size 8m;

  sendfile on;

  tcp_nopush    on;

  keepalive_timeout 60;

  fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2

                keys_zone=TEST:10m

                inactive=5m;

  fastcgi_connect_timeout 300;

  fastcgi_send_timeout 300;

  fastcgi_read_timeout 300;

  fastcgi_buffer_size 16k;

  fastcgi_buffers 16 16k;

  fastcgi_busy_buffers_size 16k;

  fastcgi_temp_file_write_size 16k;

  fastcgi_cache TEST;

  fastcgi_cache_valid 200 302 1h;

  fastcgi_cache_valid 301 1d;

  fastcgi_cache_valid any 1m;

  fastcgi_cache_min_uses 1;

  fastcgi_cache_use_stale error timeout invalid_header http_500;

  open_file_cache max=204800 inactive=20s;

  open_file_cache_min_uses 1;

  open_file_cache_valid 30s;

  tcp_nodelay on;

 

  gzip on;

  gzip_min_length  1k;

  gzip_buffers    4 16k;

  gzip_http_version 1.0;

  gzip_comp_level 2;

  gzip_types      text/plain application/x-Javascript text/css application/xml;

  gzip_vary on;

  server

  {

    listen      8080;

    server_name  huan.wangshibo.com;

    index index.php index.htm;

    root  /www/html/;

    location /status

    {

        stub_status on;

    }

    location ~ .*\.(php|php5)?$

    {

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;

        include fcgi.conf;

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$

    {

      expires      30d;

    }

    log_format  access  ‘$remote_addr – $remote_user [$time_local] “$request” ‘

              ‘$status $body_bytes_sent “$http_referer” ‘

              ‘”$http_user_agent” $http_x_forwarded_for’;

    access_log  /www/log/access.log  access;

      }

}

二、关于 FastCGI 的几个指令

1)这个指令为 FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
2)指定连接到后端 FastCGI 的超时时间。
fastcgi_connect_timeout 300;
3)向 FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向 FastCGI 传送请求的超时时间。
fastcgi_send_timeout 300;
4)接收 FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收 FastCGI 应答的超时时间。
fastcgi_read_timeout 300;
5)指定读取 FastCGI 应答第一部分 需要用多大的缓冲区,这里可以设置为 fastcgi_buffers 指令指定的缓冲区大小,上面的指令指定它将使用 1 个 16k 的缓冲区去读取应答的第一部分,即应答头,其实这个应答头一般情况下都很小(不会超过 1k),但是你如果在 fastcgi_buffers 指令中指 定了缓冲区的大小,那么它也会分配一个 fastcgi_buffers 指定的缓冲区大小去缓存。
fastcgi_buffer_size 16k;
6)指定本地需要用多少和多大的缓冲区来 缓冲 FastCGI 的应答,如上所示,如果一个 php 脚本所产生的页面大小为 256k,则会为其分配 16 个 16k 的缓冲区来缓存,如果大于 256k,增大 于 256k 的部分会缓存到 fastcgi_temp 指定的路径中,当然这对服务器负载来说是不明智的方案,因为内存中处理数据速度要快于硬盘,通常这个值 的设置应该选择一个你的站点中的 php 脚本所产生的页面大小的中间值,比如你的站点大部分脚本所产生的页面大小为 256k 就可以把这个值设置为 16 16k,或者 4 64k 或者 64 4k,但很显然,后两种并不是好的设置方法,因为如果产生的页面只有 32k,如果用 4 64k 它会分配 1 个 64k 的缓冲区去缓存,而如果使用 64 4k 它会分配 8 个 4k 的缓冲区去缓存,而如果使用 16 16k 则它会分配 2 个 16k 去缓存页面,这样看起来似乎更加合理。
fastcgi_buffers 16 16k;
7)这个指令我也不知道是做什么用,只知道默认值是 fastcgi_buffers 的两倍。
fastcgi_busy_buffers_size 32k;
8)在写入 fastcgi_temp_path 时将用多大的数据块,默���值是 fastcgi_buffers 的两倍。
fastcgi_temp_file_write_size 32k;
9)开启 FastCGI 缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低 CPU 负载,并且防止 502 错误。但是这个缓存会引起很多问题,因为它缓存的是动态页面。具体使用还需根据自己的需求。
fastcgi_cache TEST
10)为指定的应答代码指定缓存时间,如上例中将 200,302 应答缓存一小时,301 应答缓存 1 天,其他为 1 分钟。
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
11)缓存在 fastcgi_cache_path 指令 inactive 参数值时间内的最少使用次数,如上例,如果在 5 分钟内某文件 1 次也没有被使用,那么这个文件将被移除。
fastcgi_cache_min_uses 1;
12)不知道这个参数的作用,猜想应该是让 nginx 知道哪些类型的缓存是没用的。
fastcgi_cache_use_stale error timeout invalid_header http_500;

———————————–
以上为 nginx 中 FastCGI 相关参数,
另外,FastCGI 自身也有一些配置需要进行优化,如果你使用 php-fpm 来管理 FastCGI,可以修改配置文件中的以下值:
1)同时处理的并发请求数,即它将开启最多 60 个子线程来处理并发连接。
<value name=”max_children”>60</value>
2)最多打开文件数。
<value name=”rlimit_files”>65535</value>
3)每个进程在重置之前能够执行的最多请求数。
<value name=”max_requests”>65535</value>

三、关于内核参数的优化,在 /etc/sysctl.conf 文件内
1)timewait 的数量,默认是 180000。(Deven: 因此如果想把 timewait 降下了就要把 tcp_max_tw_buckets 值减小)
net.ipv4.tcp_max_tw_buckets = 6000
2)允许系统打开的端口范围。
net.ipv4.ip_local_port_range = 1024 65000
3)启用 TIME-WAIT 状态 sockets 快速回收功能; 用于快速减少在 TIME-WAIT 状态 TCP 连接数。1 表示启用;0 表示关闭。但是要特别留意的是:这个选项一般不推荐启用,因为在 NAT(Network Address Translation) 网络下,会导致大量的 TCP 连接建立错误,从而引起网站访问故障。
net.ipv4.tcp_tw_recycle = 0
———————————————————————————————————————————-
实际上,net.ipv4.tcp_tw_recycle 功能的开启,要需要 net.ipv4.tcp_timestamps(一般系统默认是开启这个功能的)这个开关开启后才有效果;
当 tcp_tw_recycle 开启时(tcp_timestamps 同时开启,快速回收 socket 的效果达到),对于位于 NAT 设备后面的 Client 来说,是一场灾难!
会导致到 NAT 设备后面的 Client 连接 Server 不稳定(有的 Client 能连接 server,有的 Client 不能连接 server)。
也就是说,tcp_tw_recycle 这个功能,是为内部网络(网络环境自己可控”——不存在 NAT 的情况)设计的,对于公网环境下,不宜使用。
通常来说,回收 TIME_WAIT 状态的 socket 是因为“无法主动连接远端”,因为无可用的端口,而不应该是要回收内存(没有必要)。
即:需求是 Client 的需求,Server 会有“端口不够用”的问题吗?
除非是前端机,需要大量的连接后端服务,也就是充当着 Client 的角色。

正确的解决这个总是办法应该是:
net.ipv4.ip_local_port_range = 9000 6553 #默认值范围较小
net.ipv4.tcp_max_tw_buckets = 10000 #默认值较小,还可适当调小
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
———————————————————————————————————————————-

4)开启重用功能,允许将 TIME-WAIT 状态的 sockets 重新用于新的 TCP 连接。这个功能启用是安全的,一般不要去改动!
net.ipv4.tcp_tw_reuse = 1
5)开启 SYN Cookies,当出现 SYN 等待队列溢出时,启用 cookies 来处理。
net.ipv4.tcp_syncookies = 1
6)web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到 128,而 nginx 定义的 NGX_LISTEN_BACKLOG 默认为 511,所以有必要调整这个值。
net.core.somaxconn = 262144
7)每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.core.netdev_max_backlog = 262144
8)系统中最多有多少个 TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的 DoS 攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值 (如果增加了内存之后)。
net.ipv4.tcp_max_orphans = 262144
9)记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有 128M 内存的系统而言,缺省值是 1024,小内存的系统则是 128。
net.ipv4.tcp_max_syn_backlog = 262144
10)时间戳可以避免序列号的卷绕。一个 1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。
net.ipv4.tcp_timestamps = 1
——————————————————————————————————————————————————-
有不少服务器为了提高性能,开启 net.ipv4.tcp_tw_recycle 选项,在 NAT 网络环境下,容易导致网站访问出现了一些 connect 失败的问题
个人建议:
关闭 net.ipv4.tcp_tw_recycle 选项,而不是 net.ipv4.tcp_timestamps;
因为在 net.ipv4.tcp_timestamps 关闭的条件下,开启 net.ipv4.tcp_tw_recycle 是不起作用的;而 net.ipv4.tcp_timestamps 可以独立开启并起作用。
——————————————————————————————————————————————————-
11)为了打开对端的连接,内核需要发送一个 SYN 并附带一个回应前面一个 SYN 的 ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的数量。
net.ipv4.tcp_synack_retries = 1
12)在内核放弃建立连接之前发送 SYN 包的数量。
net.ipv4.tcp_syn_retries = 1
13)如果套接字由本端要求关闭,这个参数 决定了它保持在 FIN-WAIT- 2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是 60 秒。2.2 内核的通常值是 180 秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT- 2 的危险性比 FIN-WAIT- 1 要小,因为它最多只能吃掉 1.5K 内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 30
14)当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度。缺省是 2 小时。
net.ipv4.tcp_keepalive_time = 30

———————————————————————-
下面贴出一个本人常用的内核参数的标准配置
[root@www.linuxidc.com ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1            // 这四行标红内容,一般是发现大量 TIME_WAIT 时的解决办法
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
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 = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 1            // 在 net.ipv4.tcp_tw_recycle 设置为 1 的时候,这个选择最好加上
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1          // 开启此功能可以减少 TIME-WAIT 状态,但是 NAT 网络模式下打开有可能会导致 tcp 连接错误,慎重。
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_conntrack_max = 6553500

————————————- 记一次小事故 —————————————————-
net.ipv4.tcp_tw_recycle = 1 这个功能打开后,确实能减少 TIME-WAIT 状态,习惯上我都会将这个参数打开。
但是也因为这个参数踩过一次坑:
公司的一个发布新闻的 CMS 后台系统,采用 haproxy+keepalived 代理架构,后端的 real server 服务器外网 ip 全部拿掉。
现象:在某一天早上发文高峰期,CMS 后台出现访问故障,重启 php 服务后会立刻见效,但持续一段时间后,访问就又出现故障。
排查 nginx 和 php 日志也没有发现什么,后来 google 了一下,发现就是 net.ipv4.tcp_tw_recycle 这个参数捣的鬼!
这种网络架构对于后端的 realserver 来说是 NAT 模式,打开这个参数后,会导致大量的 TCP 连接建立错误,从而引起网站访问故障。
最后将 net.ipv4.tcp_tw_recycle 设置为 0,关闭这个功能后,后台访问即刻恢复正常
—————————————————————————————————–

——————————-Nginx 安全配置小提示 ————————————
下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你的 Nginx 部署是安全的。

1)禁用 autoindex 模块。这个可能在你使用的 Nginx 版本中已经更改了,如果没有的话只需在配置文件的 location 块中增加 autoindex off; 声明即可。

2)禁用服务器上的 ssi (服务器端引用)。这个可以通过在 location 块中添加 ssi off;。

3)关闭服务器标记。如果开启的话(默认情况下)所有的错误页面都会显示服务器的版本和信息。将 server_tokens off; 声明添加到 Nginx 配置文件来解决这个问题。

4)在配置文件中设置自定义缓存以限制缓冲区溢出攻击的可能性。

client_body_buffer_size  1K;

client_header_buffer_size 1k;

client_max_body_size 1k;

large_client_header_buffers 2 1k;

5)将 timeout 设低来防止 DOS 攻击。所有这些声明都可以放到主配置文件中。

client_body_timeout  10;

client_header_timeout 10;

keepalive_timeout    65;

send_timeout          10;

6)限制用户连接数来预防 DOS 攻击。

limit_zone slimits $binary_remote_addr 5m;

limit_conn slimits 5;

7)试着避免使用 HTTP 认证。HTTP 认证默认使用 crypt,它的哈希并不安全。如果你要用的话就用 MD5(这也不是个好选择但负载方面比 crypt 好)。

下面关于 Nginx 的文章您也可能喜欢,不妨参考下:

Nginx 403 forbidden 的解决办法  http://www.linuxidc.com/Linux/2017-08/146084.htm

CentOS 7 下 Nginx 服务器的安装配置  http://www.linuxidc.com/Linux/2017-04/142986.htm

CentOS 上安装 Nginx 服务器实现虚拟主机和域名重定向  http://www.linuxidc.com/Linux/2017-04/142642.htm

CentOS 6.8 安装 LNMP 环境(Linux+Nginx+MySQL+PHP)http://www.linuxidc.com/Linux/2017-04/142880.htm

Linux 下安装 PHP 环境并配置 Nginx 支持 php-fpm 模块  http://www.linuxidc.com/Linux/2017-05/144333.htm

Nginx 服务的 SSL 认证和 htpasswd 认证  http://www.linuxidc.com/Linux/2017-04/142478.htm

Ubuntu 16.04 上启用加密安全的 Nginx Web 服务器  http://www.linuxidc.com/Linux/2017-07/145522.htm

Linux 中安装配置 Nginx 及参数详解  http://www.linuxidc.com/Linux/2017-05/143853.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

CentOS 7.2 下 Nginx+PHP+MySQL+Memcache 缓存服务器安装配置  http://www.linuxidc.com/Linux/2017-03/142168.htm

CentOS6.9 编译安装 Nginx1.4.7  http://www.linuxidc.com/Linux/2017-06/144473.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-01/150100.htm

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7989007
文章搜索
热门文章
星哥带你玩飞牛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-提高用户访问的响应速度和成功率
随机文章
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...

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

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

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

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...