CentOS 7 运维优化nginx
2017年12月25日 18:05:27vim
阅读数:644api
通常的,咱们安装CentOS mini和其余相应服务后,就能正常工做了。但工做一段时间后,服务器会出现不稳定、被入侵、甚至在忽然的高并发时直接瘫痪情况。这些问题大多都是因为咱们考虑其实际的抗压性和安全性的缘由。因此,在这里提供一些运维优化的建议。安全
众所周知,服务越少,系统占用的资源就会越少, 因此应当关闭不须要的服务。建议把不须要的服务关闭掉,这样作的好处是减小内存和CPU资源占用。首先能够看下系统中 存在着哪些已经启动了的服务。bash
// 安装ntsysv yum install -y ntsysv // 设置启动的服务 ntsysv
下面列出的是须要启动的服务,未列出的服务一概关闭。服务器
- crond : 自动计划任务。
- network:Linux系统的网络服务,很重要,若不开启此服务的话,服务器就不能联网。
- sshd: OpenSSH 服务器守护进程。
- rsyslog:Linux的日志系统服务(CentOS5.8下此服务名称为syslog),必需要启动。
可用vim编辑器打开文件cookie
vim /etc/init/start-ttys.conf // 内容以下: start on stopped rc RUNLEVEL=[2345] env ACTIVE_CONSOLES=/dev/tty[1-6] env X_TTY=/dev/tty1 task script . /etc/sysconfig/init for tty in $(echo $ACTIVE_CONSOLES) ; do [ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && continue initctl start tty TTY=$tty done end script
这段代码使 init 打开了6个控制台,可分则用 ALT + F1 到 ALT + F6 控制台默认都驻留在内存中。用ps aux 命令便可看到,命今以下:网络
ps aux | grep tty | grpe -v grep
命令显示结果以下所示:并发
root 1211 0.0 0.2 115520 2048 tty1 root 1213 0.0 0.2 115520 2048 tty2 root 1214 0.0 0.2 115520 2048 tty3 root 1217 0.0 0.2 115520 2048 tty4 root 1219 0.0 0.2 115520 2048 tty5
事实上没有必要使用这么多,那如何关闭不需婴的进程呢?
一般保留两个控制台就能够了。运维
vim /etc/init/start-ttys.conf
调整TCPⅡP网络参数,能够增强对抗 SYN Flood 的能力,命令以下:
echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf sysctl -p
// 用Vim编辑器打开 vim /etc/profile // 找到HISTSIZE=1000 并改成 100; HISTSIZE=100 // 当即生效 source /etc/profile
yum install -y ntp crontab -e // 加入一行 */5 * * * * /usr/sbin/ntpdate ntp.api.bz
ntp.api.bz是一组NTP服务器集群,以前是6台服务器,位于上海电信;如今是3台服务器,分散于上海和浙江电信,能够用 dig 命令查看
dig ntp.api.bz
在 CentOS64 默认的状态下,IPv6 是被启用的。
// 可用以下命令查看: lsmod | grep ipv6
有些网络和应用程序还不支持 IPv6 ,所以,禁用 IPv6 能够说是一个很是好的选择: 增强系统的安全性,并提升系统的总体性能。不过,首先要确认一下:IPv6是否是处于动的状态,命令以下:
// 列出所有网络接口信息 ifconfig -a // 修改相应的配置文件,中止 IPv6 ,命令以下: echo "install ipv6 /bin/true" > /etc/modprobe.d/disable-ipv6.conf # 每当系统须要加载IPv6时,强制执行 /bin/true 来替代实际加载的模块 echo "IPV6INIT=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0 # 禁用基于IPv6网络,使之不会被触发启动
要调整一下 Linux 的最大文件打开数,不然运行 Squid 诅服务的机器在高负载时执行性能将会不好;另外,在 Linux 下部署应用时,有时候会赶上 “Too many open files” 这样的问题,这个值也会影响服务器的最大并发数。其实 Linux 是有文件句柄限制的。但默认值下是很高,通常是1024,生产服务器很容易就会达到这个值,因此须要改动此值。
// 打开配置 vim /etc/security/limit.conf // 在最后一行添加以下 * soft nofile 65535 * hard nofile 65535 // 再打开配置 vim /etc/rc.local // 添加以下内容 ulimit -SHn 65535
另外,ulimit -n 命令并不能真正看到文件的最大文件打开数。可用以下脚本查看:
#!/bin/bash for pid in `ps aux |grep nginx |grep -v grep|awk '{print $2}'` do cat /proc/${pid}/limits |grep 'Max open files' done
在配置 CentOS 7 网卡 IP 地址时,容易忽略的一项是Linux在启动时未 启动网卡,其后果很明显,那就是该 Linux 机器永远也没有 IP 地址。
// 查看以太网代号(也可用ifconfig命令) ip address // 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-enp1s0 // 修改以下内容(若是没有,请自行添加) # 系统启动时就启动网卡设备 ONBOOT=yes # 容许用从DHCP处获取的DNS覆盖本地的DNS PEERDNS=yes # 不容许普通用户修改网卡 USERCTL=no
Linux文件默认有3个时间,分别以下所示。
若是有多个小文件(好比 Web 服务器的页面上有多个小图片),一般是没有必要记录文件的访问时间的,这样就能够减小写磁盘的 I/O ,可这要如何配置呢?
// 修改文件系统的配置文件 vim /etc/fstab // 而后,在包含大量小文件的分区中使用 noatime 和 nodiratime 这两个命令。例如: /dev/sda5 /data/pics ext3 noatime,nodiratime 0 0 这样文件被访问时就不会再产生写磁盘的 I/O 了。
SSH服务配置优化,请保持机器中至少包含一个具备sudo权限的用户,下面的配置禁止root远程登陆,代码内容以下所示:
# 禁止root远程登陆 sed -i 's@#PermitRootLogin yes@PermitRootLogin no@' /etc/ssh/sshd_config # 禁止空密码登陆 sed -i 's@PermitEmptyPasswords no@PermitEmptyPasswords no@' /etc/ssh/sshd_config # 关闭SSH反向查询,以加快SSH的访问速度 sed -i 's@UseDNS yes@UseDNS no@' /etc/ssh/sshd_config /etc/ssh/sshd_config
添加用户的步骤和过程比较简单这里略过,因为系统已经禁止了root远程登陆,因 此须要一个具备sudo权限的admin用户,权限跟root至关。
vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL # 而后添加以下内容: admin ALL=(ALL) ALL # 若是在进行sudo切换时不想输入密码,能够作以下更改: admin ALL=(ALL) NOPASSWD:ALL
内核的优化跟服务器的优化同样,应本着稳定安全的原则。下面以Squid服务器为例来讲明,待客户端与服务器端创建 TCP/IP 链接后就会关闭Socket,服务器端链接的端口状态也就变为 TIME_WAIT 了。那是否是全部执行主动关闭的SOCket都会进入TIME_WAIT 状态呢?有没有什么状况可以使主动关闭的Socket直接进入CLOSED状态呢?答案是主动关 闭的一方在发送最后一个ACK后就会进人 TIME_WAIT 状态,并停留2MSL(报文最大生存)时间,这是 TCP/IP 必不可少的,也就是说这一点是“解决”不了的。
TCP/IP 护设计者如此设计,主要缘由有两个:
// 在Squid服务器中可输入以下命令查看当前链接统计数: netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S)} print a, S[a]}'
命令显示结果以下所示:
LAST_ACK 14 SYN_RECV 348 ESTABISHED 70 FIN_WAIT1 229 FIN_WAIT2 30 CLOSING 33 TIME_WAIT 18122
命令中的含义分别以下。
vim /etc/sysctl.conf // 而后,增长如下参数 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 10000 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000
如下将简单说明上面各个参数的含义:
执行如下命令使内核配置立马生效:
/sbin/sysctl -p
若是是用于Apache 或 Nginx 等 Web 服务器,则只须要更改如下几项便可。
net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 10000 65000 // 执行如下命令使内核配置立马生效 /sbin/sysctl -p
若是是Post6x邮件服务器,则建议内核优化方案以下:
net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 10000 65000 kernel.shmmax = 134217728 // 执行如下命令使内核配置立马生效 /sbin/sysctl -p
固然这些都只是最基本的更改,你们还能够根据本身的需求来更改内核的设置,好比咱们的线上机器在高并发的状况下,常常会出现 ‘‘TCP:too many orpharned sockets ” 的报错尽可能也要本着服务器稳定的最高原则。若是服务器不稳定的话,一切工做和努力就都会白费。 若是以上优化仍没法知足工做要求,则又可能须要定制你的服务器内核或升级服务器硬件。