worker_processes 8;
Nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
worker_rlimit_nofile 102400;
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
use epoll;
使用epoll的I/O模型,这个不用说了吧。
worker_connections 102400;
每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。
keepalive_timeout 60;
keepalive超时时间。
client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
内核参数的优化
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秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_keepalive_time = 30
当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。
一个完整的内核优化配置
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
一个简单的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 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 ad.test.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:10m inactive=5m;
这个指令为FastCGI缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。
fastcgi_connect_timeout 300;
指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout 300;
向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_read_timeout 300;
接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_buffer_size 16k;
指定读取FastCGI应答第一部分需要用多大的缓冲区,这里可以设置为fastcgi_buffers指令指定的缓冲区大小,上面的指令指定它将使用1个16k的缓冲区去读取应答的第一部分,即应答头,其实这个应答头一般情况下都很小(不会超过1k),但是你如果在fastcgi_buffers指令中指定了缓冲区的大小,那么它也会分配一个fastcgi_buffers指定的缓冲区大小去缓存。
fastcgi_buffers 16 16k;
指定本地需要用多少和多大的缓冲区来缓冲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_busy_buffers_size 32k;
这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size 32k;
在写入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>
每个进程在重置之前能够执行的最多请求数。
nginx 优化
如何恢复linux和windows服务器被误删除文件
服务器是企业和个人重要的存储设备之一,而数据是企业和个人的珍贵财富,一旦服务器出现故障,会导致数据丢失或者受损,对公司或个人造成巨大的损失。因此,服务器备份和恢复数据备受
Tomcat服务器如何配置ssl证书
目录 一:证书配置 二:Tomcat配置 http自动跳转 https 总结一:证书配置下载已签发的证书、选择 Tomcat 版本 进入 Tomcat 目录创建个 cert 文件夹 将下载好的 SSL证书压缩包里的
CentOS修改服务器登录密码的详细指南
目录 一、引言 二、基本概念 三、修改密码的步骤 3.1 登录到 CentOS 服务器 3.2 修改当前用户的密码 3.3 修改其他用户的密码 3.4 密码复杂性检查 四、解决密码复杂性
Nginx解决跨域访问的完整实例
目录 引言 1. Nginx简介 2. 跨域问题简介 3. 解决跨域问题的方法 步骤一:安装和配置Nginx 步骤二:测试跨域访问 结论 总结 引言在现代的Web开发中,跨域访问是一种常见的
linux查看服务端证书方式(keytool和openssl)
目录 方法 1:直接从服务器上抓取并查看证书 方法 2:通过 openssl 抓取并查看证书 方法 3:下载并查看证书文件 证书信息解析 总结 查看服务器端的证书时,可以通过导入服务器
Ubuntu设置静态IP地址的方法步骤(亲测有效)
目录 一、找到位于 /etc/netplan 的 netplan 目录 二、修改或创建配置文件 三、配置与本机相符的网络适配器 四、禁用DHCP 五、配置静态IP、子网掩码、网关 六、配置DNS服务
Ubuntu配置静态IP的两种方法
目录 方法一 第一步:查看当前主机网络信息 第二步:修改配置文件 进入配置文件夹 第三步:使配置生效且检查网络连接状况 方法二 第一步:查看当前主机网络信息 第二步:修改
在LINUX系统上使用rsync命令详解
目录 LINUX使用rsync命令 Rsync 命令语法 Rsync 命令选项 Rsync 命令 命令示例 Rsync命令的基本语法 使用 Rsync 命令传输文件和目录 使用 Rsync 命令镜像数据
Linux系统中如何将普通用户权限提升至root权限
目录 首先重来就没有设置过ROOT用户 1.使用普通用户登录后输入以下命 2.设置root用户密码 3.输入“su”切换为root用户登录 4.输入“Visudo”命令
Linux解决Unknown filesystem问题
目录 Linux解决「Unknown filesystem」 遇到这种情况应该如何修复 总结Linux解决「Unknown filesystem」不知道大家在使用 Linux 系统的时候有没有遇见过 「Unknown filesys
nginx部署前端dist包详细图文教程
目录 下载nginx 配置 启动 总结 下载nginx下载地址https://nginx.org/en/download.htmldownload > Stable version 可选择稳定版的nginxnginx压缩包解压后的目录配置1.将打
VScode连接远程服务器踩坑实战记录(新版离线vscode-server安装)
目录 1、VScode扩展安装与配置 (1)vscode扩展安装 (2)vscode远程配置 2、vscode-server离线下载 (1)Commit ID查看 (2)安装包下载 3、文件解压缩 4、移动文件到指定位置
Linux系统中检查系统重启记录方案
目录 Linux中监控系统重启的重要性 深入探究:Linux 重启日志 使用last命令 uptime 命令 利用journalctl获取重启历史记录 who -b 命令 总结借其强大的架构和无与伦比的灵活性
LINUX中关于mkdir命令语法和实例解读
目录 MKDIR 命令的语法 mkdir 命令可用的选项 深入了解 MKDIR 命令示例 使用 mkdir 创建简单目录 在以其绝对功能和灵活性而闻名的 Linux 操作系统的动态世界中,有大量
Nginx 只允许 www 域名访问并禁止裸域名访问的实现步骤
目录 如何通过 Nginx 只允许 www 域名访问并禁止裸域名访问 步骤 1:配置 Nginx 处理 www 域名 步骤 2:禁止裸域名访问 步骤 3:重定向裸域名到 www 域名(可选) 步骤 4:重启 Ng
Nginx设置目录的访问权限实现访问静态资源
从日志信息来看,确实是权限问题(Permission denied)。我们可以重新检查并设置权限,确保 Nginx 用户有权限访问这些文件。检查 Nginx 用户:首先确认 Nginx 使用的用户,一般是 www-d
telnet Connection refused端口不通如何处理
目录 一、telnet简述 二、telnet Connection refused不通处理思路 一般对应上面的后两种情况 排查目的主机服务 总结 一、telnet简述telnet一般用于测试本机到目的主机
linux下图形界面和命令行界面的切换方式
目录 在linux下图形界面和命令行界面的切换 1. 图形界面和命令行界面的切换 2. 修改系统开机进入的界面 总结 在linux下图形界面和命令行界面的切换我估计好多喜欢用li
telnet nc命令返回“连接失败”问题及解决
目录 telnet nc命令返回“连接失败” 1、端口没有被监听 2、防火墙策略 3、目标主机不接受外部连接 总结 telnet nc命令返回“连接失败”当使用n
Linux无法为立即文档创建临时文件:设备上没有空间的问题解决
目录 1、问题描述 2、问题解决1、问题描述在命令行输入命令按Tab键时出现如下报错:很明显,设备上没有空间,即磁盘空间不足。通过命令查看具体情况如下:df -h2、问题解决首先想到
nginx配置history模式的使用小结
本文主要介绍了nginx配置history模式的使用小结,具体如下:worker_processes 1; events { worker_connections 1024;} http { include mime.types; default_t
Nginx获取客户端真实IP(real_ip_header)的实现
目录 一、配置 Nginx 获取客户端真实 IP 1、基本配置说明 2、set_real_ip_from详解 3、log_format 配置(参考) 二、调试与测试 三、Lua 中使用客户端真实 IP(参考) 四
Nginx配置WebSocket代理的示例代码
目录 官方文档代理样例 Linux 查看安装文件命令手册 Nginx 日志配置方案 成功解决问题–使用 Nginx 代理 WebSocket 可能出现的问题 Nginx 官方文档网址 nginx d
Linux系统下通过jar包进程号查询jar程序占用端口的常用方法
目录 方法1: 使用 netstat 命令 方法2: 使用 lsof 命令 方法3: 使用 ss 命令 方法4: 直接从Java进程读取 注意事项在Linux系统中,如果你已经知道了Java应用程序的进程ID(PID),你
linux日志轮询方案
目录 logrotate 简介 logrotate 配置文件 日志回滚原理 sshd 日志回滚实战 修改配置文件 重启rsyslog 强制切割 测试和运行 logrotate debug 模式 v
Linux自带的logrotate管理日志用法
目录 利用Linux自带的logrotate管理日志 1. logrotate简介 2. logrotate配置参数 3. nginx日志切割实例 4. 其他配置示例 总结 利用Linux自带的logrotate管理日志日
使用wget递归下载目录内容
是一种常见的命令行工具,用于从远程服务器下载整个目录及其子目录中的文件。它可以通过递归方式下载目录中的所有文件,并保持目录结构的完整性。wget是一个开源的非交互式命令
linux如何开启关闭防火墙
目录 linux开启关闭防火墙 1.关闭防火墙 2.设置开机不启动 3.查看防火墙状态 不同系统常见防火墙相关命令 下面是red hat/CentOs7关闭防火墙的命令 firewalld 总结
Nginx实现404页面的配置方法的两种方法
目录 第一种:Nginx自己的错误页面 第二种:反向代理的错误页面一个网站项目,肯定是避免不了404页面的,通常使用Nginx作为Web服务器时,有以下集中配置方式,一起来看看。第一种:Nginx
nginx出现500 Internal Server Error错误的解决方法
目录 问题原因 解决方法 1. 查看 Nginx 错误日志 2. 检查 Nginx 配置文件 3. 检查应用程序日志 4. 检查文件权限 5. 检查后端服务 示例 Nginx 配置检查步骤 检查步