Nginx 基本优化

2023-11-01

一、一般来说nginx 配置文件中对优化比较有作用的为以下几项:

1. worker_processes 8;

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

2. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

为每个进程分配cpu,上例中将8 个进程分配到8 个cpu,当然可以写多个,或者将一
个进程分配到多个cpu。

3. worker_rlimit_nofile 65535;

这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。

现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。

这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。

查看linux系统文件描述符的方法:

[root@web001 ~]# sysctl -a | grep fs.file

fs.file-max = 789972

fs.file-nr = 510 0 789972

4. use epoll;

使用epoll 的I/O 模型

(

补充说明:

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

A)标准事件模型
Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
B)高效事件模型 
Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.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. 为了防止出现内核崩溃的问题, 有必要安装安全补丁。

5. worker_connections 65535;

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

6. keepalive_timeout 60;

keepalive 超时时间。

7. client_header_buffer_size 4k;

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

分页大小可以用命令getconf PAGESIZE 取得。

[root@web001 ~]# getconf PAGESIZE

4096

但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。

8. open_file_cache max=65535 inactive=60s;

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

9. open_file_cache_valid 80s;

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

10. open_file_cache_min_uses 1;

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

11.client_body_buffer_size 10M
Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中,client_body_temp 指定的路径中,默认该路径值是/tmp/ 

12.client_max_body_size 10M

client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。

二、关于内核参数的优化:

net.ipv4.tcp_max_tw_buckets = 6000

timewait 的数量,默认是180000。

net.ipv4.ip_local_port_range = 1024 65000

允许系统打开的端口范围。

net.ipv4.tcp_tw_recycle = 1

启用timewait 快速回收。

net.ipv4.tcp_tw_reuse = 1

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

net.ipv4.tcp_syncookies = 1

开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。

net.core.somaxconn = 262144

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

net.core.netdev_max_backlog = 262144

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

net.ipv4.tcp_max_orphans = 262144

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

net.ipv4.tcp_max_syn_backlog = 262144

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

net.ipv4.tcp_timestamps = 0

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

net.ipv4.tcp_synack_retries = 1

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

net.ipv4.tcp_syn_retries = 1

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

net.ipv4.tcp_fin_timeout = 1

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

net.ipv4.tcp_keepalive_time = 30

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

 

三、下面贴一个完整的内核优化设置:

vi /etc/sysctl.conf CentOS5.5中可以将所有内容清空直接替换为如下内容:

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
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 = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

使配置立即生效可使用如下命令:
/sbin/sysctl -p

四、下面是关于系统连接数的优化

linux 默认值 open files 和 max user processes 为 1024

#ulimit -n

1024

#ulimit Cu

1024

问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程

使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。

新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。

解决方法:

使用 ulimit Cn 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)

有如下三种修改方式:

1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最后增加:

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果

# ulimit -n

65535

# ulimit -u

65535

备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制

soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。 soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。

 

五、下面是一个简单的nginx 配置文件:

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 204800;
events
{
use epoll;
worker_connections 204800;
}
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 4k;
   fastcgi_buffers 8 4k;
   fastcgi_busy_buffers_size 8k;
   fastcgi_temp_file_write_size 8k;
   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 backup.aiju.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 的几个指令:

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10minactive=5m;

这个指令为FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。

fastcgi_connect_timeout 300;

指定连接到后端FastCGI 的超时时间。

fastcgi_send_timeout 300;

向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间。

fastcgi_read_timeout 300;

接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应答的超时时间。

fastcgi_buffer_size 4k;

指定读取FastCGI 应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k。

fastcgi_buffers 8 4k;

指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答。

fastcgi_busy_buffers_size 8k;

这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers 的两倍。

fastcgi_temp_file_write_size 8k;

在写入fastcgi_temp_path 时将用多大的数据块,默认值是fastcgi_buffers 的两倍。

fastcgi_cache TEST

开启FastCGI 缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误。

fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;

为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟。

fastcgi_cache_min_uses 1;

缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除。

fastcgi_cache_use_stale error timeout invalid_header http_500;

不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的。以上为nginx 中FastCGI 相关参数,另外,FastCGI 自身也有一些配置需要进行优化,如果你使用php-fpm 来管理FastCGI,可以修改配置文件中的以下值:

<value name=”max_children”>60</value>

同时处理的并发请求数,即它将开启最多60 个子线程来处理并发连接。

<value name=”rlimit_files”>102400</value>

最多打开文件数。

<value name=”max_requests”>204800</value>

每个进程在重置之前能够执行的最多请求数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx 基本优化 的相关文章

  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 在用户程序中使用 或在驱动程序模块代码中使用 ...这有关系吗?

    我正在开发一个设备驱动程序模块和关联的用户库来处理ioctl 来电 该库获取相关信息并将其放入一个结构中 该结构被传递到驱动程序模块中并在那里解压 然后进行处理 我省略了很多步骤 但这就是总体思路 一些数据通过结构体传递ioctl is u
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • 如何构建gcc multilib工具链?

    我正在尝试在新安装的 ubuntu 14 04 的 AMD64 版本上构建 gcc multilib 工具链 它只有 x86 64 gcc 和 g 安装 没有 multilib 支持 我的配置行是 configure disable che
  • C++ 自注册类有多安全?

    来自 哪里这个线程 https stackoverflow com questions 77817 c runtime knowledge of classes我用 C 实现了一个与所选解决方案类似的系统 我现在的问题是 用户 Daniel
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav
  • grep 彩色线条

    我编写了一个简单的 PHP shell 脚本 它解析文件并输出某些元素 它产生大量的输出 采用不同的 bash 颜色 绿色表示正常 黄色表示警告 红色表示错误等 在开发过程中我想过滤掉一些行 例如 所有包含红色文本的行 我可以使用grep
  • 通过名称获取进程ID

    我想在 Linux 下获得一个给定其名称的进程 ID 有没有一种简单的方法可以做到这一点 我还没有在 C 上找到任何可以轻松使用的东西 如果追求 易于使用 char buf 512 FILE cmd pipe popen pidof s p
  • Gnu C++ 何时会在没有明确要求的情况下支持 C++11?

    目前 使用 g 4 8 1 您必须通过以下方式在 C 11 模式下编译文件 g std c 11 o prog x prog cpp 当我只能说的时候有计划吗 g o prog x prog cpp 编译prog cpp Maybe pro
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap
  • 为什么GCC编译的应用程序总是包含_mcount符号?

    库并不总是包含 mcount 符号 但应用程序包含 您可以使用 gobjdump 或 nm 实用程序验证这一点 我读过 mcount 用于实现分析 但即使禁用分析并启用优化 O2 该符号仍然存在 它还有其他额外的用途吗 更新 我使用的是 S

随机推荐

  • 【从零开始】力扣刷题(1)

    文章目录 前言 数组 数组的遍历 485 最大连续的一个数 495 提莫攻击 414 第三大的数 628 三个数的最大乘积 数组 统计数组中的元素 645 错误的集合 697 数组的度 484 找到所有数组中消失的数组 442 数组中重复的
  • Linux下用C编写WebSocet服务以响应HTML5的WebSocket请求

    在HTML5中新增了WebSocket 使得通讯变得更加方便 这样一来 Web与硬件的交互除了CGI和XHR的方式外 又有了一个新的方式 那么使用WebSocket又如何与下层通信呢 看看WebSocket的相关介绍就会发现 其类似于HTT
  • HTML介绍及代码

    1 HTML介绍 超文本 标记 语言 用来描述网页的一种语言 1 1 HTML CSS JS三者关系 HTML 结构 决定网页的结构和内容 是什么 CSS 表现 样式 设定网页的表现样式 什么样子 JavaScript JS 行为 控制网页
  • 华为手机计算机删除怎么恢复出厂设置,华为手机恢复出厂设置后怎么还原【图文】...

    华为手机我想大家一定听说过 这是国内最有名气的手机品牌了 华为手机经过这几年的不断发展 现在已经完全可以与三星 苹果 等这些国际大牌手机相提并论了 而且华为手机比它们还有很大的价格优势 华为手机固然好 但是用的时间长了也会出现一些状况 比方
  • DEDE调用指定文章ID来调用特定文档

    指定文章的id来调用特定文档在某些情况下还是比较实用的 下面有个示例 需要的朋友可以了解下 代码如下 dede arclist row 1 idlist 6 li a href field description a li dede arc
  • 【C++】STL——vector的使用、 vector增删查改函数的介绍和使用、push_back和pop_back、operator[]

    文章目录 1 vector的使用 2 vector的增删查改 1 push back 尾插 2 pop back 尾删 3 find 查找 4 insert 在position之前插入val 5 erase 删除指定位置的数据 6 swap
  • Python项目代码结构详解

    目录结构组织方式 简要解释一下 bin 存放项目的一些可执行文件 当然你可以起名script 之类的也行 luffy 存放项目的所有源代码 1 源代码中的所有模块 包都应该放在此目录 不要置于顶层目录 2 其子目录tests 存放单元测试代
  • QML 中播放PPT文件

    效果 一 思路 MFC 操作PPT 然年将MFC封装成dll 供Qt使用 案例分享 Qt的PPT播放器 长沙红胖子Qt的博客 CSDN博客 qt 打开ppt Qt将mfc中的句柄 加载到QWidget中 QML 通过 QQuickWidge
  • 用户态和内核态的区别

    1 操作系统需要两种CPU状态 内核态 Kernel Mode 运行操作系统程序 操作硬件 用户态 User Mode 运行用户程序 2 指令划分 特权指令 只能由操作系统使用 用户程序不能使用的指令 举例 启动I O 内存清零 修改程序状
  • 计网

    实验目的和要求 熟悉交换机各种命令模式和基本命令 学习交换机的基本配置 制作网络拓扑图 1台交换机 2台PC 2台PC能够ping通 截图 截图网络拓扑图 2台PC 2台pc机分别用连通线和交叉线连接 然后测试其连通性 学习交换机VLAN的
  • 【crypto】基于crypto.js的web前端加解密系统实现

    文章目录 一 概念介绍 1 1 crypto js介绍 1 2 加密 哈希 编码 1 2 1 加密 解密 1 2 2 散列 哈希 1 2 3 BASE64编解码 二 加解密思想 以md5为例 三 前端加密系统实现代码 3 1 加解密 3 2
  • C++称硬币(枚举)

    有12枚硬币 其中有11枚真币和1枚假币 假币和真币重量不同 但不知道假币比真币轻还是重 现在 用一架天平称了这些币三次 告诉你称的结果 请你找出假币并且确定假币是轻是重 数据保证一定能找出来 输入 第一行是测试数据组数 每组数据有三行 每
  • java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES)报错原因

    1 第一个 用户名和密码不匹配 或者是在连接池里多打了空格之类的 就是配置文件的问题 2 第二个 可能是用户的权限不够 给他添加权限 授予权限 grant all privileges on databasename tablename t
  • 关于键盘盲打的一些小技巧

    当然也是很久以前在某个网站搜索一下 然后保存的 个人觉得比较有用 具体的也不太清了 电脑键盘指法作为使用电脑的基本功 在初期养成正确的键盘指法十分重要 很多朋友由于初期没有养成正确键盘指法的习惯 导致后期习惯了错误的键盘指法 要更正已经相当
  • No module named ‘tensorflow.contrib‘问题解析以及tensorflow的卸载安装和向下兼容

    0 问题原因 TensorFlow 2 0中contrib被弃用 1 卸载原Tensorflow 重新安装 卸载 在开始安装前 如果你的电脑装过tensorflow 请先把他们卸载干净 包括依赖的包 tensorflow estimator
  • Github Fork 使用详解

    Fork 是对一个仓库的克隆 克隆一个仓库允许你自由试验各种改变 而不影响原始的项目 一般来说 forks 被用于去更改别人的项目 贡献代码给已经开源的项目 或者使用别人的项目作为你自己想法的初始开发点 提出更改别人的项目 使用 forks
  • 【React】函数组件 hooks-useState

    React 函数组件 hooks useState 使用hooks理由 useState 保存组件状态 切换数值 实现todolist增加和删除 最终结果 使用hooks理由 高阶组件为了复用 导致代码层级复杂 生命周期的复杂 写成func
  • angular4 通过httpclient调http接口,出现access-control-allow-origin跨域问题解决办法

    最近项目中在用angular4 在调试后台http接口时 会出现跨域问题 在chrom浏览器控制台报错如下 在浏览器属性中增加几行命令 即可解决该问题 具体做法如下 右击浏览器 选择属性 目标那一栏中增加如下命令 args disable
  • MQTT异步使用

    目录 1 结构体 1 1 MQTTAsync 1 2 MQTTAsync connectOptions 1 3 MQTTAsync disconnectOptions 1 4 MQTTAsync responseOptions 1 5 MQ
  • Nginx 基本优化

    一 一般来说nginx 配置文件中对优化比较有作用的为以下几项 1 worker processes 8 nginx 进程数 建议按照cpu 数目来指定 一般为它的倍数 如 2个四核的cpu计为8 2 worker cpu affinity