/ 中存储网

小内存vps的优化和安全设置

2014-04-01 17:11:01 来源:itjs.cn
对于VPS的优化,我想网上的方法肯定很多,我也不妨把自己的VPS性能优化方法共享出来,和大家分享之,先把网上关于VPS的介绍贴出来:

VPS(全称Virtual PrivateServer)是利用最新虚拟化技术在一台物理服务器上创建多个相互隔离的虚拟私有主机。它们以最大化的效率共享硬件、软件许可证以及管理资源。对其用户和应用程序来讲,每一个VPS平台的运行和管理都与一台独立主机完全相同,因为每一个VPS均可独立进行重启并拥有自己的root访问权限、用户、IP地址、内存、过程、文件、应用程序、系统函数库以及配置文件。VPS服务器最重要的指标就是内存大小,多个VPS服务器可以共享一颗CPU,但不能共享同一块内存。内存越大,价格越贵。

下面先介绍一下我的VPS服务器情况:

内存:256M

CPU:Intel(R) Xeon(R) CPU X3440 @ 2.53GHz 双核

带宽:百兆共享

机房所在地:美国洛杉矶

洛杉矶机房到中国的速度没有硅谷机房快,但是还是选择洛杉矶,就是因为图便宜,如果你手头宽裕可以考虑硅谷的机房,速度确实不错!因为是和朋友一起租用的,这256M内存的服务器已经运行了4个网站。

优化开始(本文所有参数可以根据自己内存情况进行微调):

建议先看 lnmp 配置一文,这次优化的方法是基于lnmp的配置,lnmp web环境配置方法在这里就不在重复了。

1.关闭不需要的服务,(这是我所关闭的服务,请看清每个服务,根据自己情况而定)

chkconfig --level 3 acpid off

chkconfig --level 3 anacron off

chkconfig --level 3 apmd off

chkconfig --level 3 mdmonitor off

chkconfig --level 3 xinetd off

chkconfig --level 3 sendmail off

chkconfig --level 3 rpcgssd off

chkconfig --level 3 rawdevices off

chkconfig --level 3 messagebus off

chkconfig --level 3 atd off

chkconfig --level 3 gpm off

chkconfig --level 3 autofs off

chkconfig --level 3 cpuspeed off

chkconfig --level 3 haldaemon off

chkconfig --level 3 nfslock off

chkconfig --level 3 portmap off

chkconfig --level 3 xfs off

chkconfig --level 3 netfs off

chkconfig --level 3 smartd off

chkconfig --level 3 ip6tables off

chkconfig --level 3 isdn off

chkconfig --level 3 rpcidmapd off

chkconfig --level 3 microcode_ctl off

service acpid stop

service anacron stop

service apmd stop

service mdmonitor stop

service xinetd stop

service sendmail stop

service rpcgssd stop

service rawdevices stop

service messagebus stop

service atd stop

service gpm stop

service autofs stop

service cpuspeed stop

service haldaemon stop

service nfslock stop

service portmap stop

service xfs stop

service netfs stop

service smartd stop

service ip6tables stop

service isdn stop

service rpcidmapd stop

service microcode_ctl stop

2. 删除CentOS自带的sendmail,改用postfix。

# yum remove sendmail

# yum install postfix

3.增加SWAP分区大小(一般是内存的2倍)

# cd /var/

# dd if=/dev/zero of=swapfile bs=1024 count=524288

# /sbin/mkswap swapfile

# /sbin/swapon swapfile

注意:增加SWAP分区只能在XEN VPS上操作,OpenVZ的VPS不行。感谢网友:(角落bujinshuo.com)的提醒

让系统自动引导:

# echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

4.mysql的配置文件优化(适用于mysql版本为:mysql-5.1.57)

编译安装参数:

./configure --prefix=/usr/local/webserver/mysql/

--enable-assembler

--with-extra-charsets=complex

--enable-thread-safe-client

--with-big-tables --with-readline

--with-ssl

--with-embedded-server

--enable-local-infile

my.cnf文件参数:

[[email protected] ~]# cat /etc/my.cnf | grep -v "#"

[client]

port            = 3306

socket          = /tmp/mysql.sock

[mysqld]

user            = mysql

port            = 3306

socket          = /tmp/mysql.sock

basedir         = /usr/local/webserver/mysql

datadir         = /data/mysqldata/database

log-error       = /data/mysqldata/log/mysql_error.log

pid-file        = /data/mysqldata/pid/mysql.pid

skip-external-locking

skip-name-resolve

default_table_type = MyISAM

transaction_isolation = READ-UNCOMMITTED

open_files_limit = 600

back_log = 40

key_buffer_size = 4M

max_allowed_packet = 16M

thread_stack = 192K

table_cache = 60

external-locking = FALSE

sort_buffer_size = 256K

read_buffer_size = 1M

join_buffer_size = 256K

read_rnd_buffer_size = 4M

bulk_insert_buffer_size = 2M

myisam_sort_buffer_size = 4M

myisam_repair_threads = 1

myisam_recover

thread_cache = 128

thread_cache_size = 10

query_cache_size = 0M

query_cache_limit = 2M

query_cache_min_res_unit = 4K

tmp_table_size = 512K

max_heap_table_size = 32M

long_query_time = 1

log-short-format

max_connections = 200

wait_timeout = 30

max_connect_errors = 200

expire_logs_days = 7

thread_concurrency = 8

server-id       = 1

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

说明:mysql是默认支持4种存储引擎:CSV,MRG_MYISAM,MEMORY,MyISAM,默认不支持InnoDB存储引擎(消耗内存比较大)。由于内存很小,推荐使用MyISAM存储引擎。

5.Nginx配置优化

nginx主配文件nginx.conf参数:

#user options

user www www;

#CPU Core options  //本应该开启至少2个nginx进程,由于内存太小,只能节约一点了。

worker_processes 1;

#nginx Process options

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

# [ debug | info | notice | warn | error | crit ]

error_log /data/wslogs/nginx_error.log crit;

#Specifies the value for maximum file descriptors that can be opened by this process.

worker_rlimit_nofile 51200;

events

{

 use epoll;

 #maxclient = worker_processes * worker_connections / cpu_number

 worker_connections 51200;

}

http

{

 include mime.types;

 default_type application/octet-stream;

 #charset gb2312;

 #General options

 server_names_hash_bucket_size 128;

 client_header_buffer_size 32k;

 large_client_header_buffers 4 32k;

 sendfile on;

 #timeouts

 keepalive_timeout 60;

 #TCP options

 tcp_nopush on;

 tcp_nodelay on;

 #fastcgi options

 fastcgi_connect_timeout 300;

 fastcgi_send_timeout 300;

 fastcgi_read_timeout 300;

 fastcgi_buffer_size 64k;

 fastcgi_buffers 4 64k;

 fastcgi_busy_buffers_size 128k;

 fastcgi_temp_file_write_size 128k;

 #gzip  compression  //对html、CSS、JS、XML等文件启用gzip压缩,减少数据传输量,提高访问速度。

 gzip on;

 gzip_min_length 1k;

 gzip_buffers 4 16k;

 gzip_http_version 1.0;

 gzip_comp_level 2;

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

 gzip_vary on;

 #limit_zone  crawler  $binary_remote_addr  10m;

 #virtual hosts options

 include vhosts.conf;

}

虚拟主机配置文件参数优化(这里我是把虚拟主机配置文件和nginx.conf分开的):

server {

 listen 80;

 server_name www.server110.com server110.com;

 access_log /data/wslogs/server110_www_access.log combined;

 index index.html index.htm index.php;

 root /data/wsdata/wwwroot/server110/www;

 #这是对网站的301重定向,当用server110.com地址访问,会跳转到www.server110.com

 if ($host !~ "^www.server110.net$") {

  rewrite ^(.*) http://www.server110.com$1 permanent;

 }

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

  #nginx与phpfcgi的通信方式

  #用Unix Socket通行方式比TCP通信方式速度快,但是TCP在高并发的时候比Unix Socket稳定。

  fastcgi_pass  unix:/tmp/php-cgi.sock;

  #fastcgi_pass   127.0.0.1:9000;

  fastcgi_index   index.php;

  include enable_fcgi.conf;

 }

 #将gif|jpg|jpeg|png|bmp|swf文件在本地浏览器缓存30天,这个时间自己看情况决定!

 location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {

  access_log      off;

  expires 30d;

 }

 #同上,这个不用解释

 location ~ .*.(js|css)$ {

  access_log      off;

  expires 1d;

 }

 #wordpress的伪静态

 location / {

  if (-f $request_filename/index.html){

   rewrite (.*) $1/index.html break;

  }

  if (-f $request_filename/index.php){

   rewrite (.*) $1/index.php;

  }

  if (!-f $request_filename){

   rewrite (.*) /index.php;

  }

 }

}

6.PHP的配置优化

php-fpm.conf配置文件优化参数:

将php-fpm.conf文件下面一行参数值修改为5,就是开启5个php-cgi进程,这是系统占内存最多进程

<value name="max_children">5</value>

补充:这条命令是查看phpcgi进程数,如果接近预设值,说明不够用,需要增加,小内存VPS不够用也没办法。

netstat -anpo | grep "php-cgi" | wc -l     

修改nginx和phpfcgi的通信方式,修改下面一行参数:

<value name="listen_address">/tmp/php-cgi.sock</value>

应为改用了postfix,所以下面参数需要修改:

<value name="sendmail_path">/usr/sbin/sendmail.postfix -t</value>

eAccelerator的优化(添加在php.ini文件中):

[eaccelerator]

zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"

eaccelerator.shm_size="8"

eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

eaccelerator.keys = "disk_only"

eaccelerator.sessions = "disk_only"

eaccelerator.content = "disk_only"

说明:只使用1M共享内存,删除所有在最后3600秒内无法存取的脚本缓存,用磁盘辅助进行缓存。

7.系统内核的优化

在文件末尾添加以下参数:

vim /etc/sysctl.conf

#add

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.all.accept_redirects = 0

#/sbin/sysctl -p

8.最后是安全相关

使用iptables关闭不需要对外开放的端口

iptables脚本内容(对外只开放22和80端口):

#清除iptables记录

iptables -F; iptables -X; iptables -Z

#开启SSH登录端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -A INPUT -i lo -j ACCEPT

#开启80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT