512M内存以下的小内存VPS性能优化和安全防护

林继 VPS 知识 1,892 共写了1682个字 (2012-06-24 1:27:59) 没有评论 打印 扫描二维码 百度未收录

对于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个网站。

优化开始(本文所有参数可以根据自己内存情况进行微调):
1.关闭不需要的服务,(这是我所关闭的服务,请看清每个服务,根据自己情况而定)

  1. chkconfig --level 3 acpid off
  2. chkconfig --level 3 anacron off
  3. chkconfig --level 3 apmd off
  4. chkconfig --level 3 mdmonitor off
  5. chkconfig --level 3 xinetd off
  6. chkconfig --level 3 sendmail off
  7. chkconfig --level 3 rpcgssd off
  8. chkconfig --level 3 rawdevices off
  9. chkconfig --level 3 messagebus off
  10. chkconfig --level 3 atd off
  11. chkconfig --level 3 gpm off
  12. chkconfig --level 3 autofs off
  13. chkconfig --level 3 cpuspeed off
  14. chkconfig --level 3 haldaemon off
  15. chkconfig --level 3 nfslock off
  16. chkconfig --level 3 portmap off
  17. chkconfig --level 3 xfs off
  18. chkconfig --level 3 netfs off
  19. chkconfig --level 3 smartd off
  20. chkconfig --level 3 ip6tables off
  21. chkconfig --level 3 isdn off
  22. chkconfig --level 3 rpcidmapd off
  23. chkconfig --level 3 microcode_ctl off
  24.  
  25. service acpid stop
  26. service anacron stop
  27. service apmd stop
  28. service mdmonitor stop
  29. service xinetd stop
  30. service sendmail stop
  31. service rpcgssd stop
  32. service rawdevices stop
  33. service messagebus stop
  34. service atd stop
  35. service gpm stop
  36. service autofs stop
  37. service cpuspeed stop
  38. service haldaemon stop
  39. service nfslock stop
  40. service portmap stop
  41. service xfs stop
  42. service netfs stop
  43. service smartd stop
  44. service ip6tables stop
  45. service isdn stop
  46. service rpcidmapd stop
  47. service microcode_ctl stop

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

  1. # yum remove sendmail
  2. # yum install postfix

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

  1. # cd /var/
  2. # dd if=/dev/zero of=swapfile bs=1024 count=524288
  3. # /sbin/mkswap swapfile
  4. # /sbin/swapon swapfile

注意:增加SWAP分区只能在XEN VPS上操作,OpenVZ的VPS不行。

让系统自动引导:

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

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

编译安装参数:

  1. ./configure --prefix=/usr/local/webserver/mysql/ \
  2. --enable-assembler \
  3. --with-extra-charsets=complex \
  4. --enable-thread-safe-client \
  5. --with-big-tables --with-readline \
  6. --with-ssl \
  7. --with-embedded-server \
  8. --enable-local-infile

my.cnf文件参数:

  1. [root@webzone8 ~]# cat /etc/my.cnf | grep -v "#"
  2.  
  3. [client]
  4. port            = 3306
  5. socket          = /tmp/mysql.sock
  6.  
  7. [mysqld]
  8. user            = mysql
  9. port            = 3306
  10. socket          = /tmp/mysql.sock
  11. basedir         = /usr/local/webserver/mysql
  12. datadir         = /data/mysqldata/database
  13. log-error       = /data/mysqldata/log/mysql_error.log
  14. pid-file        = /data/mysqldata/pid/mysql.pid
  15. skip-external-locking
  16. skip-name-resolve
  17. default_table_type = MyISAM
  18. transaction_isolation = READ-UNCOMMITTED
  19. open_files_limit = 600
  20. back_log = 40
  21. key_buffer_size = 4M
  22. max_allowed_packet = 16M
  23. thread_stack = 192K
  24. table_cache = 60
  25. external-locking = FALSE
  26. sort_buffer_size = 256K
  27. read_buffer_size = 1M
  28. join_buffer_size = 256K
  29. read_rnd_buffer_size = 4M
  30. bulk_insert_buffer_size = 2M
  31. myisam_sort_buffer_size = 4M
  32. myisam_repair_threads = 1
  33. myisam_recover
  34.  
  35. thread_cache = 128
  36. thread_cache_size = 10
  37. query_cache_size = 0M
  38. query_cache_limit = 2M
  39. query_cache_min_res_unit = 4K
  40. tmp_table_size = 512K
  41. max_heap_table_size = 32M
  42. long_query_time = 1
  43. log-short-format
  44. max_connections = 200
  45. wait_timeout = 30
  46. max_connect_errors = 200
  47. expire_logs_days = 7
  48. thread_concurrency = 8
  49.  
  50. server-id       = 1
  51.  
  52. [mysqldump]
  53. quick
  54. max_allowed_packet = 16M
  55.  
  56. [mysql]
  57. no-auto-rehash

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

5.nginx配置优化

nginx主配文件nginx.conf参数:

  1. #user options
  2. user www www;
  3. #CPU Core options  //本应该开启至少2个nginx进程,由于内存太小,只能节约一点了。
  4. worker_processes 1;
  5. #nginx Process options
  6. pid /usr/local/webserver/nginx/nginx.pid;
  7. # [ debug | info | notice | warn | error | crit ]
  8. error_log /data/wslogs/nginx_error.log crit;
  9. #Specifies the value for maximum file descriptors that can be opened by this process.
  10. worker_rlimit_nofile 51200;
  11.  
  12. events
  13. {
  14. use epoll;
  15. #maxclient = worker_processes * worker_connections / cpu_number
  16. worker_connections 51200;
  17. }
  18.  
  19. http
  20. {
  21. include mime.types;
  22. default_type application/octet-stream;
  23. #charset gb2312;
  24.  
  25. #General options
  26. server_names_hash_bucket_size 128;
  27. client_header_buffer_size 32k;
  28. large_client_header_buffers 4 32k;
  29.  
  30. sendfile on;
  31.  
  32. #timeouts
  33. keepalive_timeout 60;
  34.  
  35. #TCP options
  36. tcp_nopush on;
  37. tcp_nodelay on;
  38.  
  39. #fastcgi options
  40. fastcgi_connect_timeout 300;
  41. fastcgi_send_timeout 300;
  42. fastcgi_read_timeout 300;
  43.  
  44. fastcgi_buffer_size 64k;
  45. fastcgi_buffers 4 64k;
  46. fastcgi_busy_buffers_size 128k;
  47. fastcgi_temp_file_write_size 128k;
  48.  
  49. #gzip  compression  //对html、CSS、JS、XML等文件启用gzip压缩,减少数据传输量,提高访问速度。
  50. gzip on;
  51. gzip_min_length 1k;
  52. gzip_buffers 4 16k;
  53. gzip_http_version 1.0;
  54. gzip_comp_level 2;
  55. gzip_types text/plain text/css application/x-javascript application/xml;
  56. gzip_vary on;
  57.  
  58. #limit_zone  crawler  $binary_remote_addr  10m;
  59.  
  60. #virtual hosts options
  61. include vhosts.conf;
  62. }

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

  1. server {
  2. listen 80;
  3. server_name www.webzone8.com webzone8.com;
  4. access_log /data/wslogs/linuxde_www_access.log combined;
  5. index index.html index.htm index.php;
  6. root /data/wsdata/wwwroot/linuxde/www;
  7. #这是对网站的301重定向,当用webzone8.com地址访问,会跳转到www.webzone8.com
  8. if ($host !~ "^www\.linuxde\.net$") {
  9.  rewrite ^(.*) http://www.webzone8.com$1 permanent;
  10. }
  11. location ~ .*\.(php|php5)?$ {
  12.  #nginx与phpfcgi的通信方式
  13.  #用Unix Socket通行方式比TCP通信方式速度快,但是TCP在高并发的时候比Unix Socket稳定。
  14.  fastcgi_pass  unix:/tmp/php-cgi.sock;
  15.  #fastcgi_pass   127.0.0.1:9000;
  16.  fastcgi_index   index.php;
  17.  include enable_fcgi.conf;
  18. }
  19. #将gif|jpg|jpeg|png|bmp|swf文件在本地浏览器缓存30天,这个时间自己看情况决定!
  20. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  21.  access_log      off;
  22.  expires 30d;
  23. }
  24. #同上,这个不用解释
  25. location ~ .*\.(js|css)$ {
  26.  access_log      off;
  27.  expires 1d;
  28. }
  29. #wordpress的伪静态
  30. location / {
  31.  if (-f $request_filename/index.html){
  32.   rewrite (.*) $1/index.html break;
  33.  }
  34.  if (-f $request_filename/index.php){
  35.   rewrite (.*) $1/index.php;
  36.  }
  37.  if (!-f $request_filename){
  38.   rewrite (.*) /index.php;
  39.  }
  40. }
  41. }

6.php的配置优化

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

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

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

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

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

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

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

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

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

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

  1. [eaccelerator]
  2. zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
  3. eaccelerator.shm_size="8"
  4. eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
  5. eaccelerator.enable="1"
  6. eaccelerator.optimizer="1"
  7. eaccelerator.check_mtime="1"
  8. eaccelerator.debug="0"
  9. eaccelerator.filter=""
  10. eaccelerator.shm_max="0"
  11. eaccelerator.shm_ttl="3600"
  12. eaccelerator.shm_prune_period="3600"
  13. eaccelerator.shm_only="0"
  14. eaccelerator.compress="1"
  15. eaccelerator.compress_level="9"
  16. eaccelerator.keys = "disk_only"
  17. eaccelerator.sessions = "disk_only"
  18. eaccelerator.content = "disk_only"

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

7.系统内核的优化

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

  1. vim /etc/sysctl.conf
  2.  
  3. #add
  4. net.ipv4.conf.all.send_redirects = 0
  5. net.ipv4.conf.all.accept_redirects = 0
  6.  
  7. #/sbin/sysctl -p

8.最后是安全相关

使用iptables关闭不需要对外开放的端口
iptables脚本内容(对外只开放22和80端口):

  1. #清除iptables记录
  2. iptables -F; iptables -X; iptables -Z
  3. #开启SSH登录端口
  4. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  5. iptables -P INPUT DROP
  6. iptables -P OUTPUT ACCEPT
  7. iptables -P FORWARD ACCEPT
  8. iptables -A INPUT -i lo -j ACCEPT
  9. #开启80端口
  10. iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  11. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  12. iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
  13. # 防止DDOS //不知道有效果没。
  14. iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
  15. service iptables save
  16. service iptables restart

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >