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 」 的報錯儘可能也要本着服務器穩定的最高原則。若是服務器不穩定的話,一切工做和努力就都會白費。 若是以上優化仍沒法知足工做要求,則又可能須要定製你的服務器內核或升級服務器硬件。