黄色视频D D_黄色视频GIF_黄色视频别人知道吗

    1. <form id=AYyRHNqkt><nobr id=AYyRHNqkt></nobr></form>
      <address id=AYyRHNqkt><nobr id=AYyRHNqkt><nobr id=AYyRHNqkt></nobr></nobr></address>

      個人工具

      Vps

      來自Ubuntu中文

      跳轉至: 導航, 搜索

      Linux VPS Ubuntu 系统配置指南

      目錄

      拿到的帳號

      VPS 开通后,你将收到如下的帐号:

      VPS IP Address: 184.82.9.30
      SSH Root Password: pass001
      

      面板地址在 http://vps.ubuntu.org.cn/vm/ 需要使用你的開通時留下的郵箱注冊。

      以下的指南都是针对 ubuntu 的,请 centos 或其它 Linux 用户到面板 reload 到ubuntu 14.04 然后继续。

      Attention niels epting.svg 注意:如果你安裝 ubuntu 14.04 可能会无法登錄,提示訪問拒绝,这并不是密码输入错误了,而是因为 sshd 的默认配置里面禁止了 root 帐号登錄,所以你需要使用面板的 临时通道 上去,逐行执行如下命令开启 root 登錄权限:

      sed -i "s/PermitRootLogin.*$/PermitRootLogin yes/" /etc/ssh/sshd_config
      service ssh restart
      

      顺便提一句,如果你是老手,不用开启 root 登錄,可以直接创建一个普通帐号,加入到 sudo 组,使用sudo 来执行命令,这样更安全。

      如何遠程訪問

      Linux VPS支持ssh远程訪問,因此需要使用putty工具来訪問。

      1 下载putty

      下載地址: http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

      2 运行putty

      这个程序不需要安裝,下载后直接运行,后在Host地址输入VPS的IP如下:

      Vps putty1.png

      3 登錄vps

      點擊上图中的 Open 按钮,第一次登錄会出现确认密钥的提示,如下图,请點擊 “是” 按钮。

      Vps putty2.png

      4 如下图输入登錄用户名 root 回车,继续输入密码。

      Attention niels epting.svg 注意输入密码是不会顯示 “*” 的,同時密碼是區分大小寫的。

      有个技巧,直接去复制密码后,鼠标點擊 putty 的输入密码窗口,直接按下鼠标右键,然后回车即可登錄。 在putty的窗口按下鼠标右键表示粘贴。

      Vps putty3.png

      5 如果顯示下图则表示登錄成功了。

      Vps putty4.png

      6 设置 putty 支持 vps 的中文文件名或中文文件内容顯示,此步骤非必需,可以忽略:

      在主窗口,點擊左上角的图标,在弹出菜单中选择 Change Settings... 菜单,出现设置窗口。

      设置顯示字体,左边窗口點擊 Window -> Appearance ,右边點擊 Font settings -> Change 如下圖:

      Vps putty5.png

      字体选择 新宋体 字符集选择 CHINESE_GB2312 ,字体大小随你喜好设置。设置完毕后点确定

      Vps putty6.png

      设置终端字符,左边窗口点 Window -> Translation ,右边选择 Remote character set 的下拉框选择 UTF-8 ,如下圖:

      Vps putty7.png

      设置Socket5代理,左边窗口点 Connection -> SSH -> Tunnels,右边如下图选择 Dynamic ,Source port 输入 7070,然后点 Add 按钮,就启用了本机代理。

      PuttySocket5.png

      如何上傳和下載文件

      VPS 直接支持ssh协议,因此不需要采用 ftp 方式上传,可以直接使用支持 sftp 协议的客户端上传文件,这里使用 FileZilla。

      1 下载FileZilla

      官网下載地址: http://filezilla-project.org/download.php?type=client

      或直接點擊下載: http://sourceforge.net/projects/filezilla/files/FileZilla_Client/3.5.0/FileZilla_3.5.0_win32-setup.exe/download

      2 下载完毕后安裝 FileZilla

      3 添加站点

      运行FileZilla,點擊菜单 文件 -> 站点管理器

      Vps FileZilla1.png

      點擊後如下圖:

      Vps FileZilla2.png

      再點擊面板的 "新站点" 按钮,在右边的输入地方,输入:

      主机:VPS的IP,本例输入 184.82.9.30
      协议:选择 SFTP
      登錄类型:选一般
      用户:输入root
      密码:输入ssh的登錄密码,注意密码区分大小写。
      

      如下圖:

      Vps FileZilla3.png

      输入完毕后,再切换到字符集,选择 "强制 UTF-8" ,如下圖:

      Vps FileZilla4.png

      输入完毕后直接點擊 “连接” 按钮即可,连接完毕后如下图所示,你就可以直接上传和下载文件了。

      Vps FileZilla5.png

      下一次打开 FileZilla 时,直接到站点管理器,點擊连接即可。

      更新软件源 (不可跳过)

      以下命令均需要使用 putty 登錄到服务器远程执行命令操作,你可以直接复制下面的命令,然后點擊 putty 窗口按鼠标右键,粘贴命令。

      本步骤不可跳过,需要先执行,后面才可以继续,建议每次安裝新软件时,都执行一遍本步骤。

      輸入如下命令更新軟件源:

      apt-get update
      

      下面的提示不同的Linux的版本存在不同的差異,但有如下類似的提示時,表示更新成功:

      [email protected]:~# apt-get update
      Get:1 http://archive.ubuntu.com maverick Release.gpg [198B]
      Ign http://archive.ubuntu.com/ubuntu/ maverick/main Translation-en
      Ign http://archive.ubuntu.com/ubuntu/ maverick/restricted Translation-en
      Ign http://archive.ubuntu.com/ubuntu/ maverick/universe Translation-en
      Get:2 http://archive.ubuntu.com maverick-updates Release.gpg [198B]
      Ign http://archive.ubuntu.com/ubuntu/ maverick-updates/main Translation-en
      Ign http://archive.ubuntu.com/ubuntu/ maverick-updates/restricted Translation-en
      Ign http://archive.ubuntu.com/ubuntu/ maverick-updates/universe Translation-en
      Get:3 http://archive.ubuntu.com maverick-security Release.gpg [198B]
      Ign http://archive.ubuntu.com/ubuntu/ maverick-security/main Translation-en
      Ign http://archive.ubuntu.com/ubuntu/ maverick-security/restricted Translation-en
      Ign http://archive.ubuntu.com/ubuntu/ maverick-security/universe Translation-en
      Get:4 http://archive.ubuntu.com maverick Release [39.8kB]
      Get:5 http://archive.ubuntu.com maverick-updates Release [31.4kB]
      Get:6 http://archive.ubuntu.com maverick-security Release [31.4kB]
      Get:7 http://archive.ubuntu.com maverick/main i386 Packages [1492kB]
      Get:8 http://archive.ubuntu.com maverick/restricted i386 Packages [5992B]
      Get:9 http://archive.ubuntu.com maverick/universe i386 Packages [5791kB]
      Get:10 http://archive.ubuntu.com maverick-updates/main i386 Packages [380kB]
      Get:11 http://archive.ubuntu.com maverick-updates/restricted i386 Packages [1797B]
      Get:12 http://archive.ubuntu.com maverick-updates/universe i386 Packages [157kB]
      Get:13 http://archive.ubuntu.com maverick-security/main i386 Packages [157kB]
      Get:14 http://archive.ubuntu.com maverick-security/restricted i386 Packages [14B]
      Get:15 http://archive.ubuntu.com maverick-security/universe i386 Packages [77.9kB]
      Fetched 8166kB in 4s (1724kB/s)
      Reading package lists... Done
      


      如果看到如下的提示

      W: GPG 错误:http://security.ubuntu.com trusty-security Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
      W: GPG 错误:http://archive.canonical.com trusty Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
      W: GPG 错误:http://archive.ubuntu.com trusty Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
      W: GPG 错误:http://archive.ubuntu.com trusty-updates Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
      

      請執行以下代碼,導入秘鑰,重新執行更新軟件源:

      apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5
      apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32
      apt-get update
      


      如果VPS有启用IPv6,有可能长时间执行这个没有反应,请输入 Ctrl + C 中断上面的命令。先执行如下命令,使IPV4优先:

      全部关闭 IPv6:

      echo "precedence ::ffff:0:0/96  100" >> /etc/gai.conf
      

      仅仅针对 apt-get 关闭IPv6,仅 Ubuntu 14.04 以上版本有效:

      echo "Acquire::ForceIPv4 true;" > /etc/apt/apt.conf.d/99force-ipv4
      

      执行完毕上面的命令后,重新运行 apt-get update 来更新软件源即可。

      安裝常用软件 (不可跳过)

      VPS里面缺乏一些常用工具软件,一次安裝好:

      输入如下命令安裝解压缩、下载和数据同步以及系统日志软件:

      apt-get install unzip zip wget rsync
      

      如果提示如下命令,表示之前已经安裝好:

      [email protected]:~# apt-get install unzip zip wget rsync 
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      unzip is already the newest version.
      wget is already the newest version.
      rsync is already the newest version.
      0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.
      

      如果之前没有安裝会提示如下命令,表示已经安裝好

      [email protected]1:~# apt-get install unzip zip wget rsync
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      The following NEW packages will be installed:
        rsync unzip wget zip
      0 upgraded, 4 newly installed, 0 to remove and 26 not upgraded.
      Need to get 319kB/1125kB of archives.
      After this operation, 2314kB of additional disk space will be used.
      Get:1 http://archive.ubuntu.com/ubuntu/ maverick/main zip i386 3.0-3 [319kB]
      Fetched 319kB in 0s (417kB/s)
      Selecting previously deselected package wget.
      (Reading database ... 22549 files and directories currently installed.)
      Unpacking wget (from .../wget_1.12-1.1ubuntu3_i386.deb) ...
      Selecting previously deselected package rsync.
      Unpacking rsync (from .../rsync_3.0.7-2ubuntu1.1_i386.deb) ...
      Selecting previously deselected package unzip.
      Unpacking unzip (from .../archives/unzip_6.0-4_i386.deb) ...
      Selecting previously deselected package zip.
      Unpacking zip (from .../archives/zip_3.0-3_i386.deb) ...
      Setting up wget (1.12-1.1ubuntu3) ...
      Setting up rsync (3.0.7-2ubuntu1.1) ...
      Setting up unzip (6.0-4) ...
      Setting up zip (3.0-3) ...
      

      使用 Apache 搭建站点

      Apache 是最常见的 Web 服务器,功能强大。如果希望使用轻量级的 Nginx ,可以跳过此部分,直接转到指南的 nginx 部分来安裝。

      安裝 Apache2 Web 服务

      VPS 默认有安裝Apache2,但如果你删除了,就需要重新安裝;如果没有删除,执行下面的命令会退出来,不会对系统产生任何影响。

      输入如下命令安裝

      apt-get install apache2
      

      正常情况下会给出如下提示,說明Apache2默认已经安裝好了:

      [email protected]:~# apt-get install apache2
      Reading package lists... Done
      Building dependency tree... Done
      apache2 is already the newest version.
      0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
      

      开启 Apache2 的伪静态

      如果希望开启Apache2 伪静态 rewrite 支持,输入如下命令安裝

      a2enmod rewrite
      

      正常情况下会给出如下提示,說明已经安裝成功:

      [email protected]:~# a2enmod rewrite
      Module rewrite installed; run /etc/init.d/apache2 force-reload to enable.
      

      提示需要重新加载Apache2的配置,由于下一步是安裝mysql,所以暂时不用重启。

      或出现如下提示,表示已经开启了 rewrite

      [email protected]:~# a2enmod rewrite
      Mudule rewrite already enabled
      

      安裝 mysql 数据库服务

      MySQL 是 Linux 下最常用的开源数据库。

      输入如下命令安裝mysql

      apt-get install mysql-server
      

      如果輸入正確,會提示如下信息,

      [email protected]:~# apt-get install mysql-server
      Reading package lists... Done
      Building dependency tree... Done
      The following extra packages will be installed:
        libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16
        libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1
        mysql-common mysql-server-5.1 mysql-server-core-5.1
      Suggested packages:
        libipc-sharedcache-perl libterm-readkey-perl tinyca
      The following NEW packages will be installed:
        libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16
        libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1
        mysql-common mysql-server mysql-server-5.1 mysql-server-core-5.1
      0 upgraded, 12 newly installed, 0 to remove and 26 not upgraded.
      Need to get 22.9MB of archives.
      After this operation, 54.4MB of additional disk space will be used.
      Do you want to continue [Y/n]?
      

      输入 Y 回车,继续安裝 会提示输入 mysql 的 root 用户密码,你可以输入密码后回车,也可以不输入任何密码直接回车。 (不输入密码不会影响到Mysql的安全性,因为Mysql仅仅用于本地监听,但不输入密码会导致后续phpmyadmin无法运行)

      Vps Mysql1.png

      需要重新輸入一遍密碼,如下圖所示:

      Vps Mysql2.png

      最后提示如下界面,表示mysql安裝成功。

      Vps Mysql3.png

      mysql 数据库管理

      对于mysql数据库维护可以使用下面指南中安裝的 phpmyadmin 进行维护,或直接在 putty 中输入 mysql -p 进行管理如圖所示:

      Vps mysql1.png

      在 mysql> 的提示符下输入 quit 回车,将退出 mysql 命令,返回到正常操作提示符。

      mysql 数据库优化

      如果你的VPS的內存只有512M,請按如下步驟進行優化,如果是1G或以上可以忽略本步驟。執行本步驟可以將Mysql的占用內存由150M降到100M。

      输入如下命令配置 Mysql

      cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s`
      find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \;
      sed -i 's/\[mysqld\]/&\nuser            = mysql\n/' /etc/mysql/my.cnf
      

      執行結果如下所示:

      [email protected]:~# cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s`
      [email protected]:~# find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \;
      [email protected]:~# sed -i 's/\[mysqld\]/&\nuser            = mysql\n/' /etc/mysql/my.cnf
      

      重启下 Mysql服务:

      service mysql restart
      

      執行結果如下所示:

       
      [email protected]:~# service mysql restart
      Rather than invoking init scripts through /etc/init.d, use the service(8)
      utility, e.g. service mysql restart
      
      Since the script you are attempting to invoke has been converted to an
      Upstart job, you may also use the restart(8) utility, e.g. restart mysql
      mysql start/running, process 9886
      

      安裝php環境

      执行如下命令安裝apache2的php5扩展和php的mysql扩展

      apt-get install libapache2-mod-php5 php5-gd php5-mysql php5-curl php5-mcrypt php5-common php-apc
      php5enmod mcrypt
      

      如下提示:

      [email protected]:~# apt-get install libapache2-mod-php5 php5-gd php5-mysql php5-mcrypt php5-common php-apc
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      The following extra packages will be installed:
        libgd2-xpm libjpeg62 libt1-5 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6
        libxpm4 php5-cli php5-common php-apc
      Suggested packages:
        php-pear libgd-tools 
      The following NEW packages will be installed:
        libapache2-mod-php5 libgd2-xpm libjpeg62 libt1-5 libx11-6 libx11-data
        libxau6 libxcb1 libxdmcp6 libxpm4 php5-cli php5-common php5-gd php5-mysql php5-mcrypt
      0 upgraded, 15 newly installed, 0 to remove and 26 not upgraded.
      Need to get 8128kB of archives.
      After this operation, 22.7MB of additional disk space will be used.
      Do you want to continue [Y/n]?
      

      输入 Y,回车继续,以下表示安裝完成。

      Vps php1.png

      重新启动apache2, 輸入如下命令:

      service apache2 restart
      

      提示如下,表示啓動成功:

      [email protected]:~# service apache2 restart
      * Restarting web server apache2                                                  apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName
                                                                                [ OK ]
      

      測試站點

      以上命令已经完整安裝好一台Web服务器所具有的环境,以下来搭建一个最简单的站点。

      web 的根目錄位于 /var/www/html 你可以将自己的程序直接放到此目錄。

      安裝 phpsysinfo

      使用putty登錄到服务器,依次执行如下命令安裝phpsysinfo:

      cd /var/www/html
      wget http://sourceforge.net/projects/phpsysinfo/files/phpsysinfo/3.0.13/phpsysinfo-3.0.13.tar.gz/download -O phpsysinfo-3.0.13.tar.gz
      tar xzvf phpsysinfo-3.0.13.tar.gz 
      cd phpsysinfo
      mv config.php.new config.php
      

      執行完畢後,在浏覽器的地址輸入: http://184.82.9.30/phpsysinfo/ 查看,顯示如下:

      Vps phpsysinfo.png

      安裝 php 探针

      使用putty登錄到服务器,依次执行如下命令安裝:

      cd /var/www/html
      wget http://www.yahei.net/tz/tz.zip
      unzip tz.zip
      

      運行結果如下所示:

      [email protected]:~# cd /var/www/html
      [email protected]:/var/www/html# wget http://www.yahei.net/tz/tz.zip
      --2011-08-13 09:18:40--  http://www.yahei.net/tz/tz.zip
      Resolving www.yahei.net... 110.34.192.14
      Connecting to www.yahei.net|110.34.192.14|:80... connected.
      HTTP request sent, awaiting response... 200 OK
      Length: 16087 (16K) [application/zip]
      Saving to: `tz.zip'
      
      100%[======================================>] 16,087      --.-K/s   in 0.07s
      
      2011-08-13 09:18:41 (152 KB/s) - `tz.zip' saved [16,087/16,087]
       
      [email protected]:/var/www/html# unzip tz.zip
      Archive:  tz.zip
        inflating: tz.php
      

      執行完畢後,在浏覽器的地址輸入: http://184.82.9.30/tz.php 查看,顯示如下:

      Vps tz1.png

      安裝 phpmyadmin

      安裝phpmyadmin,需要mysql事先配置好root的密码。

      使用putty登錄到服务器,执行下面安裝

      apt-get install phpmyadmin
      

      提示如下:

      [email protected]:~# apt-get install phpmyadmin
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      The following extra packages will be installed:
        dbconfig-common javascript-common libjs-mootools libmcrypt4 php5-mcrypt
        wwwconfig-common
      Suggested packages:
        libmcrypt-dev mcrypt postgresql-client apache apache-ssl
      The following NEW packages will be installed:
        dbconfig-common javascript-common libjs-mootools libmcrypt4 php5-mcrypt
        phpmyadmin wwwconfig-common
      0 upgraded, 7 newly installed, 0 to remove and 26 not upgraded.
      Need to get 5184kB of archives.
      After this operation, 21.3MB of additional disk space will be used.
      Do you want to continue [Y/n]?
      

      输入 Y, 回车继续。

      Attention niels epting.svg 按 空格键 选择 Apche2 如下圖:

      Vps phpmyadmin1.png

      選擇完畢後,回車繼續,提示如下圖,是否需要創建phpmyadmin數據庫,

      Vps phpmyadmin2.png

      直接回車繼續,提示輸入mysql的管理員密碼,輸入後如下所示:

      Vps phpmyadmin3.png

      回車繼續後,如下圖,提示輸入phpmyadmin連接數據的密碼,直接回車由系統隨機産生一個即可。

      Vps phpmyadmin4.png

      完成安裝提示如下:

      Vps phpmyadmin5.png

      現在訪問如下地址測試: http://184.82.9.30/phpmyadmin/

      如果打开提示 404 错误,即 Not Found ,在putty里面执行如下命令:

      ln -s /usr/share/phpmyadmin /var/www/html/
      

      然後再訪問,如下:

      Vps phpmyadmin6.png

      输入mysql的root帐号和mysql的密码,點擊 执行 进行登錄,进行正常訪問如下:

      Vps phpmyadmin7.png

      配置虛擬站點

      假设前提: 你有一个域名 test.com ,你希望搭建两个站点,第一个站点是 www.test.com 和 test.com 为主页,同时希望提供 bbs.test.com 为论坛。

      注意,下面的文檔對多個不同的域名也是適用的。

      配置域名

      去域名商提供的面板将 test.com 域名的 A 记录修改为 VPS 的 IP.

      上傳程序

      约定两个站点的目錄如下,为了方便备份,站点的目錄最好集中存放在 /var/www/html 目錄。

      www.test.com(test.com) 对应目錄: /var/www/html/test
      bbs.test.com 对应目錄: /var/www/html/bbs
      

      假设主站点安裝帝国的CMS程序,论坛采用DZ的论坛,程序需要下载UTF-8的版本。

      Vps ApacheSite1.png

      使用前面提到的上传方法,利用 FileZilla 连接服务器,创建这两个目錄。

      Vps ApacheSite2.png

      如果找不到如上图的目錄,请點擊 / 即可看到了。

      Vps ApacheSiteFile4.png

      创建目錄后,分别上傳程序,如下:

      Vps ApacheSite3.png

      多域名配置

      这里推荐編輯器直接使用记事本,不要使用其他的高级編輯器。

      注意下面的 DocumentRoot /var/www/html/test/ 中的 /var/www/html/test/ 应该修改为你上传站点的文件目錄。

      編輯www.test.com的站点配置文件test.com.txt ,其中站点 http://www.test.com 和 http://test.com 的网站目錄为 /var/www/html/test/

      <VirtualHost *:80>
          ServerName www.test.com
          ServerAlias test.com
          DocumentRoot /var/www/html/test/
      </VirtualHost> 
      

      編輯bbs.test.com的站点配置文件 bbs.test.com.txt , 其中站点 bbs.test.com 的网站目錄为 /var/www/html/bbs/

      <VirtualHost *:80>
          ServerName bbs.test.com
          DocumentRoot /var/www/html/bbs/
      </VirtualHost>
      

      如圖所示:

      Vps ApacheSite4.png

      将这两个文件上传到 /etc/apache2/sites-enabled/ 目錄

      如圖所示:

      Vps ApacheSite5.png

      Apache2 伪静态

      有两种方法做伪静态,一种是用 .htaccess 文件。 例如将上面的 bbs.test.com 的站点配置文件編輯为如下:

      <VirtualHost *:80>
          ServerName bbs.test.com
          DocumentRoot /var/www/html/bbs/
          <Directory /var/www/html/bbs/>
                AllowOverride AuthConfig
          </Directory>
      </VirtualHost> 
      

      重新上传,重启 apache2 后, 然后将准备好的 .htaccess 文件放到对应的 /var/www/html/bbs/ 网站根目錄即可。

      另外一種是直接加入到配置文件,如下:

      <VirtualHost *:80>
          ServerName bbs.test.com
          DocumentRoot /var/www/html/bbs/
          #伪静态代码段开始    
          <Directory /var/www/html/bbs/>
             ...............................
          </Directory>
          #伪静态代码段结束    
      </VirtualHost> 
      

      下面是常用的一些伪静态配置,复制出来,保存为 .htaccess 文件,或 插入到站点的配置文件最后一行 <Directory> 和 </Directory> 之间。

      Discuz!X 在 Apche2 下的伪静态配置如下:

                RewriteEngine On
                RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
                RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
                RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1
                RewriteRule ^article-([0-9]+)\.html$ portal.php?mod=article&articleid=$1
                RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2
                RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2
                RewriteRule ^([a-z]+)-(.+)\.html$ $1.php?rewrite=$2
      


      將這一段代碼加入到上面的站點配置文件中,如下:

      <VirtualHost *:80>
          ServerName bbs.test.com
          DocumentRoot /var/www/html/bbs/
          <Directory /var/www/html/bbs/>
                RewriteEngine On
                RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2
                RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2
                RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1
                RewriteRule ^article-([0-9]+)\.html$ portal.php?mod=article&articleid=$1
                RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2
                RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2
                RewriteRule ^([a-z]+)-(.+)\.html$ $1.php?rewrite=$2
          </Directory>
      </VirtualHost>
      

      WordPress 在 Apache2 下的伪静态配置如下:

          <Directory />
                RewriteEngine On
                RewriteRule ^index\.php$ - [L]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule . /index.php [L]
          </Directory>
      


      ECShop 在 Apache2 下的伪静态配置如下:

          <Directory />
                RewriteEngine On
                RewriteRule ^(.*)/index.html$ $1/index\.php [I]
                RewriteRule ^(.*)/category$ $1/index\.php [I]
                RewriteRule ^(.*)/feed-c([0-9]+).xml$ $1/feed\.php\?cat=$2 [I]
                RewriteRule ^(.*)/feed-b([0-9]+).xml$ $1/feed\.php\?brand=$2 [I]
                RewriteRule ^(.*)/feed-type([^-]+)\.xml$ $1/feed\.php\?type=$2 [I]
                RewriteRule ^(.*)/feed.xml$ $1/feed\.php [I]
                RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3&price_min=$4&price_max=$5&filter_attr=$6&page=$7&sort=$8&order=$9 [I]
                RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)\.html$ $1/category\.php\?id=$2&brand=$3&price_min=$4&price_max=$5&filter_attr=$6 [I]
                RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3&page=$4&sort=$5&order=$6 [I]
                RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3&page=$4 [I]
                RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3 [I]
                RewriteRule ^(.*)/category-([0-9]+)(.*)\.html$ $1/category\.php\?id=$2 [I]
                RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)\.html(.*)$ $1/category\.php\?$4&id=$2&brand=$3
                RewriteRule ^(.*)/goods-([0-9]+)(.*)\.html$ $1/goods\.php\?id=$2 [I]
                RewriteRule ^(.*)/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/article_cat\.php\?id=$2&page=$3&sort=$4&order=$5 [I]
                RewriteRule ^(.*)/article_cat-([0-9]+)-([0-9]+)(.*)\.html$ $1/article_cat\.php\?id=$2&page=$3 [I]
                RewriteRule ^(.*)/article_cat-([0-9]+)(.*)\.html$ $1/article_cat\.php\?id=$2 [I]
                RewriteRule ^(.*)/article-([0-9]+)(.*)\.html$ $1/article\.php\?id=$2 [I]
                RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html $1/brand\.php\?id=$2&cat=$3&page=$4&sort=$5&order=$6 [I]
                RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html $1/brand\.php\?id=$2&cat=$3&page=$4 [I]
                RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)\.html(.*)$ $1/brand\.php\?$4&id=$2&cat=$3 [I]
                RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)(.*)\.html $1/brand\.php\?id=$2&cat=$3 [I]
                RewriteRule ^(.*)/brand-([0-9]+)(.*)\.html $1/brand\.php\?id=$2 [I]
                RewriteRule ^(.*)/tag-(.*)\.html $1/search\.php\?keywords=$2 [I]
                RewriteRule ^(.*)/snatch-([0-9]+)\.html$ $1/snatch\.php\?id=$2 [I]
                RewriteRule ^(.*)/group_buy-([0-9]+)\.html$ $1/group_buy\.php\?act=view&id=$2 [I]
                RewriteRule ^(.*)/auction-([0-9]+)\.html$ $1/auction\.php\?act=view&id=$2 [I]
                RewriteRule ^(.*)/exchange-id([0-9]+)(.*)\.html$ $1/exchange\.php\?id=$2&act=view [I]
                RewriteRule ^(.*)/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2&integral_min=$3&integral_max=$4&page=$5&sort=$6&order=$7 [I]
                RewriteRule ^(.*)/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2&page=$3&sort=$4&order=$5 [I]
                RewriteRule ^(.*)/exchange-([0-9]+)-([0-9]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2&page=$3 [I]
                RewriteRule ^(.*)/exchange-([0-9]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2 [I]
          </Directory>
      

      修改上傳文件權限

      由于上传的文件的所有者为 root ,Apache 无法正常写入,所以需要设置上传文件的宿主为 www-data。

      使用putty登錄vps执行如下命令,设置 /var/www下的所有文件的宿主都是 www-data,这样apache2就可以正常读写:

      chown -R www-data:www-data /var/www
      service apache2 restart
      

      執行結果如下所示:

      [email protected]:~# chown -R www-data:www-data /var/www
      [email protected]:~# service apache2 restart
       * Restarting web server apache2                                                apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName
       ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName
      
      [ OK ]

      安裝配置

      主站點程序訪問 http://www.test.com 如下图所示,进一步安裝:

      Vps ApacheSite8.png

      論壇程序訪問 http://bbs.test.com 如下图所示,进一步安裝:

      Vps ApacheSite7.png

      以上就是完成多域名的配置。

      Apache2 301 跳转

      如果希望将 test.com 跳转到 www.test.com ,如下配置 test.com.txt 上传到 /etc/apache2/sites-enabled/ 目錄即可。

      <VirtualHost *:80>
          ServerName test.com
          RewriteCond %{HTTP_HOST} ^test\.com [NC]
          RewriteRule ^(.*)$ http://www.test.com/$1 [L,R=301]
      </VirtualHost>
      

      当然你也可以去 test.com 的域名那里设置 301 跳转。

      Apache2 优化

      請一定要執行本步驟,不要認爲小站,訪問的人數少,有時候蜘蛛會按照超過20個以上的並發抓取數據,直接爆掉vps。表現爲:可以ping,但網站打不開、數據庫連不上或無法ssh。

      为了防止Vps被大的訪問量爆掉,需要限制并发数,这里#1 VPS 调整为10, #2可以将下面的10修改为20,#3为30,以此类推。

      也可以根据指南最后的压力测试来确定最大并发数,确定后,将下面的命令中的 10 改为你确定的并发数即可,其它数值如 5 不要修改。

      請複制命令後到putty直接按鼠標右鍵粘貼執行:

      sed -i -e "s/^[[:blank:]]*StartServers[[:blank:]]*.*/StartServers       5/" \
             -e "s/^[[:blank:]]*MinSpareServers[[:blank:]]*.*/MinSpareServers    5/" \
             -e "s/^[[:blank:]]*MaxSpareServers[[:blank:]]*.*/MaxSpareServers    10/" \
             -e "s/^[[:blank:]]*ServerLimit[[:blank:]]*.*/ServerLimit       10/" \
             -e "s/^[[:blank:]]*MaxClients[[:blank:]]*.*/MaxClients        10/" \
             -e "s/^[[:blank:]]*MinSpareThreads[[:blank:]]*.*/MinSpareThreads    5/" \
             -e "s/^[[:blank:]]*MaxSpareThreads[[:blank:]]*.*/MaxSpareThreads    10/" /etc/apache2/apache2.conf
      

      執行完畢後後,再執行以下命令,重啓下apache2。

      service apache2 restart
      

      執行結果如下所示:

      [email protected]:~# sed -i -e "s/^[[:blank:]]*StartServers[[:blank:]]*.*/StartServers       5/" \
      >       -e "s/^[[:blank:]]*MinSpareServers[[:blank:]]*.*/MinSpareServers    5/" \
      >       -e "s/^[[:blank:]]*MaxSpareServers[[:blank:]]*.*/MaxSpareServers    10/" \
      >       -e "s/^[[:blank:]]*ServerLimit[[:blank:]]*.*/ServerLimit       10/" \
      >       -e "s/^[[:blank:]]*MaxClients[[:blank:]]*.*/MaxClients        10/" \
      >       -e "s/^[[:blank:]]*MinSpareThreads[[:blank:]]*.*/MinSpareThreads    5/" \
      >       -e "s/^[[:blank:]]*MaxSpareThreads[[:blank:]]*.*/MaxSpareThreads    10/" /etc/apache2/apache2.conf
      [email protected]:~# service apache2 restart
       * Restarting web server apache2                                                apache2: Could not reliably determine the server's fully qualified domain name, using 0.4.54.225 for ServerName
       ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 0.4.54.225 for ServerName
                                                                               [ OK ]
      

      查看 Apache2 日志

      Apache2的日志放在 /var/log/apache2/ 目錄下,可以直接使用filezilla去下载下来看。

      使用 Nginx 搭建站点

      为什要使用 nginx?因为 apache 太耗内存了,使用 nginx 可以节约内存。

      采用 nginx + php-fpm + mysql 搭建。

      删除 apache2

      使用putty登錄vps,执行如下命令:

      输入如下命令关闭 apache2

      service apache2 stop
      

      如果輸入正確,會提示如下信息,表示apache2已经停止

      [email protected]:~# service apache2 stop
       * Stopping web server apache2                                                  apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName
       ... waiting                                                             [ OK ]
      

      输入如下命令删除 apache2

      apt-get remove apache2 apache2.2-common
      

      出现类似如下提示时,输入 Y 并回车。

      0 upgraded, 1 newly installed, 7 to remove and 26 not upgraded.
      Need to get 5837kB of archives.
      After this operation, 14.5MB disk space will be freed.
      Do you want to continue [Y/n]?
      

      最后会出现如下提示,表示已经删除 apache2

      Removing libapache2-mod-php5 ...
      Module php5 disabled.
      Run '/etc/init.d/apache2 restart' to activate new configuration!
      Removing apache2-mpm-prefork ...
       * Stopping web server apache2                                                  apache2: Could not reliably determine the  server's fully qualified domain name, using 0.3.175.133 for ServerName
       ... waiting                                                             [ OK ]
      Removing apache2.2-common ...
      Removing apache2-utils ...
      Removing apache2.2-bin ...
      

      安裝 php5-fpm php5-cgi

      安裝 php5-fpm 执行如下命令:

      apt-get install php5-cgi php5-fpm php5-gd php5-mysql php5-curl php5-mcrypt php5-common php-apc
      php5enmod mcrypt
      

      出现下面的提示表示安裝成功

      [email protected]:~# apt-get install php5-cgi php5-fpm php5-gd php5-mysql php5-mcrypt php5-common php-apc
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      php5-cgi is already the newest version.
      php5-cgi set to manually installed.
      Suggested packages:
        php-pear
      The following NEW packages will be installed:
        libevent-1.4-2 php5-fpm
      0 upgraded, 2 newly installed, 0 to remove and 26 not upgraded.
      Need to get 3002kB of archives.
      After this operation, 7967kB of additional disk space will be used.
      Get:1 http://archive.ubuntu.com/ubuntu/ maverick/main libevent-1.4-2 i386 1.4.13-stable-1 [56.2kB]
      Get:2 http://archive.ubuntu.com/ubuntu/ maverick-updates/universe php5-fpm i386 5.3.3-1ubuntu9.5 [2946kB]
      Fetched 3002kB in 1s (2181kB/s)
      Selecting previously deselected package libevent-1.4-2.
      (Reading database ... 21902 files and directories currently installed.)
      Unpacking libevent-1.4-2 (from .../libevent-1.4-2_1.4.13-stable-1_i386.deb) ...
      Selecting previously deselected package php5-fpm.
      Unpacking php5-fpm (from .../php5-fpm_5.3.3-1ubuntu9.5_i386.deb) ...
      Setting up libevent-1.4-2 (1.4.13-stable-1) ...
      Setting up php5-fpm (5.3.3-1ubuntu9.5) ...
      update-rc.d: warning: php5-fpm stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (none)
       * Starting PHP5 FPM...                                                         Aug 13 06:25:50.352643 [WARNING] [pool  www] pm.start_servers is not set. It's been set to 20.
                                                                              [ OK ]
      
      Creating config file /etc/php5/fpm/php.ini with new version
      Processing triggers for libc-bin ...
      ldconfig deferred processing now taking place
      

      安裝完毕后,我们调整下 php5-fpm 使其采用 127.0.0.1:9000 进行监听,执行如下命令:

      sed -i -e 's/listen =.*$/listen = 127.0.0.1:9000/' `grep -R -l listen /etc/php5/fpm`
      

      完毕后,重启下 php5-fpm,执行如下命令重启

      service php5-fpm restart 
      

      出現如下提示,表示重啓成功

      [email protected]:~# service php5-fpm restart
      php5-fpm stop/waiting
      php5-fpm start/running, process 6899
      

      安裝 mysql

      见前面的安裝 mysql 的步骤。

      安裝 nginx

      使用putty登錄vps,执行如下命令:

      apt-get install nginx
      

      出现如下提示,表示已经安裝完毕:

      [email protected]:~# apt-get install nginx
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      Suggested packages:
        ufw
      The following NEW packages will be installed:
        nginx
      0 upgraded, 1 newly installed, 0 to remove and 26 not upgraded.
      Need to get 341kB of archives.
      After this operation, 827kB of additional disk space will be used.
      Get:1 http://archive.ubuntu.com/ubuntu/ maverick/universe nginx i386 0.7.67-3ubuntu1 [341kB]
      Fetched 341kB in 0s (437kB/s)
      Selecting previously deselected package nginx.
      (Reading database ... 21918 files and directories currently installed.)
      Unpacking nginx (from .../nginx_0.7.67-3ubuntu1_i386.deb) ...
      Setting up nginx (0.7.67-3ubuntu1) ...
      

      再執行下面的命令啓動nginx服務:

      service nginx start
      

      結果如下所示,表示nginx順利啓動:

      [email protected]:~# service nginx start
      Starting nginx: nginx.
      

      測試站點

      由于nginx默認的站點不支持php,所以需要修改默認站點。

      編輯文件名为 default.txt ,注意下面的 server_name 修改为你的vps的ip地址,可以写一个IP,也可以都写上,IP和IP之间有空格。

      配置文件中的 root 就是站点的目錄了,可以更改为你的站点的路径。

      server	{
      	listen       80;
      	server_name 184.82.9.30 184.82.9.31;
      	index index.html index.htm index.php;
      	root  /var/www/;
      	location ~ \.php$ {
      		include /etc/nginx/fastcgi_params;
      		fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
      		fastcgi_pass  127.0.0.1:9000;
      		}
      	}
      


      将 default.txt 文件使用 filezilla 上传到 /etc/nginx/sites-enabled 目錄下

      使用 putty 登錄vps,输入如下命令重启 nginx 服务

      service nginx restart
      

      重啓結果如下所示:

      [email protected]:~# service nginx restart
      Restarting nginx: nginx.
      

      安裝phpsysinfo

      按照前面apache2讲述的安裝

      安裝 php 探针

      按照前面apache2讲述的安裝

      安裝 phpmyadmin

      照前面 Apache2 安裝 phpmyadmin, 注意第二步不要再按空格选择 apache2 , 直接回车下一步。

      如果已经之前已经安裝过 phpmyadmin ,不需要删除,继续使用。

      安裝完毕 phpmyadmin 后, 继续在 putty 里面执行如下命令即可:

      cd /var/www
      ln -s /usr/share/phpmyadmin .
      

      執行情況如下所示:

      [email protected]:~# cd /var/www
      [email protected]:/var/www# ln -s /usr/share/phpmyadmin .
      [email protected]:/var/www#
      

      然后就可以在浏览器里面訪問 phpmyadmin 了。 訪問地址: http://184.82.9.30/phpmyadmin/

      配置虛擬站點

      以上运行环境均已经安裝完毕,下面讲如何配置 nginx 的多域名。

      假设前提: 你有一个域名 test.com ,你希望搭建两个站点,第一个站点是 www.test.com 和 test.com 为主页,同时希望提供 bbs.test.com 为论坛。

      下面的文檔對多個不同的域名也是適用的。

      配置域名

      参考上面 apache2 的配置域名部分。

      上傳程序

      参考上面 apache2 的上傳程序部分。

      多域名配置

      这里推荐編輯器直接使用记事本,不要使用其他的高级編輯器。

      編輯www.test.com的站点配置文件 test.com.txt

      server	{
      	listen       80;
      	server_name www.test.com test.com;
      	index index.html index.htm index.php;
      	root  /var/www/test/;
      	location ~ \.php$ {
      		include /etc/nginx/fastcgi_params;
      		fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
      		fastcgi_pass  127.0.0.1:9000;
      		}
      	}
      


      編輯bbs.test.com的站点配置文件 bbs.test.com.txt

      server	{
      	listen       80;
      	server_name bbs.test.com;
      	index index.html index.htm index.php;
      	root  /var/www/bbs/;
      	location ~ \.php$ {
      		include /etc/nginx/fastcgi_params;
      		fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
      		fastcgi_pass  127.0.0.1:9000;
      		}
      	}
      


      将这两个文件使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目錄

      Nginx 伪静态

      下面是常用的一些伪静态配置,复制出来,插入到站点的配置文件最后一个 } 号之前,如下:

      server	{
      	listen       80;
      	server_name bbs.test.com;
      	index index.html index.htm index.php;
      	root  /var/www/bbs/;
      	location ~ \.php$ {
      		include /etc/nginx/fastcgi_params;
      		fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
      		fastcgi_pass  127.0.0.1:9000;
      		}
             #伪静态代码段开始    
      	location / {
              ...............................
      		}
             #伪静态代码段结束    
      	}
      

      Discuz!X 在 Nginx 下的伪静态配置如下:

      location / {
         	rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
         	rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;
         	rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
         	rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
         	rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
         	rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
         	rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;
         	rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;
      	}
      

      將這一段代碼加入到上面的站點配置文件中,例如:

      server	{
      	listen       80;
      	server_name bbs.test.com;
      	index index.html index.htm index.php;
      	root  /var/www/bbs/;
      	location ~ \.php$ {
      		include /etc/nginx/fastcgi_params;
      		fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
      		fastcgi_pass  127.0.0.1:9000;
      		}
      	location / {
         		rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
         		rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;
         		rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
         		rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
         		rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
         		rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
         		rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;
         		rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;
      		}
      	}
      

      WordPress 在 Nginx 下的伪静态配置如下:

      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;
      		}
      	}
      


      ECShop 在 Nginx 下的伪静态配置如下:

      location / {
      	if (!-e $request_filename) {
      		rewrite "^/index\.html" /index.php last;
      		rewrite "^/category$" /index.php last;
      		rewrite "^/feed-c([0-9]+)\.xml$" /feed.php?cat=$1 last;
      		rewrite "^/feed-b([0-9]+)\.xml$" /feed.php?brand=$1 last;
      		rewrite "^/feed\.xml$" /feed.php last;
      		rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;
      		rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;
      		rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;
      		rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3 last;
      		rewrite "^/category-([0-9]+)-b([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2 last;
      		rewrite "^/category-([0-9]+)(.*)\.html$" /category.php?id=$1 last;
      		rewrite "^/goods-([0-9]+)(.*)\.html" /goods.php?id=$1 last;
      		rewrite "^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;
      		rewrite "^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$" /article_cat.php?id=$1&page=$2 last;
      		rewrite "^/article_cat-([0-9]+)(.*)\.html$" /article_cat.php?id=$1 last;
      		rewrite "^/article-([0-9]+)(.*)\.html$" /article.php?id=$1 last;
      		rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html" /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last;
      		rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2&page=$3 last;
      		rewrite "^/brand-([0-9]+)-c([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2 last;
      		rewrite "^/brand-([0-9]+)(.*)\.html" /brand.php?id=$1 last;
      		rewrite "^/tag-(.*)\.html" /search.php?keywords=$1 last;
      		rewrite "^/snatch-([0-9]+)\.html$" /snatch.php?id=$1 last;
      		rewrite "^/group_buy-([0-9]+)\.html$" /group_buy.php?act=view&id=$1 last;
      		rewrite "^/auction-([0-9]+)\.html$" /auction.php?act=view&id=$1 last;
      		rewrite "^/exchange-id([0-9]+)(.*)\.html$" /exchange.php?id=$1&act=view last;
      		rewrite "^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;
      		rewrite "^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;
      		rewrite "^/exchange-([0-9]+)-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2 last;
      		rewrite "^/exchange-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1 last;
      		}
      	}
      

      修改上傳文件權限

      由于上传的文件的所有者为 root ,Nginx 无法正常写入,所以需要设置上传文件的宿主为 www-data。

      使用putty登錄vps执行如下命令,设置 /var/www下的所有文件的宿主都是 www-data,这样nginx就可以正常读写:

      chown -R www-data:www-data /var/www
      service nginx restart
      

      執行結果如下所示:

      [email protected]:~# chown -R www-data:www-data /var/www
      [email protected]:~# service nginx restart
      Restarting nginx: nginx.
      

      安裝配置

      见 apache2 的安裝配置部分

      nginx 301 跳转

      如果希望将 test.com 跳转到 www.test.com ,如下配置 test.com.txt 上传到 /etc/nginx/sites-enabled/ 目錄即可。

      server {
      	listen       80;
      	server_name test.com;
      	rewrite ^/(.*) http://www.test.com/$1 permanent;
      }
      

      当然你也可以去 test.com 的域名那里设置 301 跳转。

      nginx 优化

      請一定要執行本步驟,不要認爲小站,訪問的人數少,有時候蜘蛛會按照超過20個以上的並發抓取數據,直接爆掉vps。表現爲:可以ping,但網站打不開、數據庫連不上或無法ssh。

      为了防止Vps被大的訪問量爆掉,需要限制并发数,这里#1 VPS 调整为10, #2可以将下面的10修改为20,#3为30,以此类推。

      也可以根据指南最后的压力测试来确定最大并发数,确定后,将下面的命令中的 10 改为你确定的并发数即可,其它数值如 5 不要修改。

      因为命令中包括了 ` 号,所以請複制命令後到putty直接按鼠標右鍵粘貼執行:

      sed -i -e 's/pm.max_children =.*$/pm.max_children = 10/' `grep -R -l pm.max_children /etc/php5/fpm`
      sed -i -e 's/pm.start_servers =.*$/pm.start_servers = 5/' `grep -R -l pm.max_children /etc/php5/fpm`
      sed -i -e 's/pm.max_spare_servers =.*$/pm.max_spare_servers = 10/' `grep -R -l pm.max_children /etc/php5/fpm`
      

      执行完毕后,重启下 php-fpm 服务:

      service php5-fpm restart
      

      nginx 限制同一IP的并发数和连接流量

      在終端執行下面語句開啓nginx並發支持:

      echo "limit_conn_zone \$binary_remote_addr zone=one:10m;" > /etc/nginx/conf.d/limitconn.conf
      

      然后打开虚拟站点配置文件,如編輯上面例子中的 bbs.test.com 站点配置文件 bbs.test.com.txt,

      在 server_name bbs.test.com; 这一行下面插入如下:

       limit_conn one 20;
       limit_rate 200k;
      

      上面的20,標示同一IP的最大並發數爲20。200k爲連接的最大速度爲200k。

      注意,這裏控制的流量是針對單一連接的,並不是同一IP的最大速度,其最大速度爲200k*20=4000k。

      最終修改後的結果如下所示:

      server	{
      	listen       80;
      	server_name bbs.test.com;
      	limit_conn one 20;
      	limit_rate 200k;
      	index index.html index.htm index.php;
      	root  /var/www/bbs/;
      	location ~ \.php$ {
      		include /etc/nginx/fastcgi_params;
      		fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
      		fastcgi_pass  127.0.0.1:9000;
      		}
      	}
      

      将上面的配置文件重新使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目錄,覆盖后,执行以下命令重启 nginx 使配置生效:

      service nginx restart
      

      查看 nginx 日志

      Nginx的日志放在 /var/log/nginx/ 目錄下,可以使用 filezilla 下载下来查看。

      配置CDN或反向代理

      我们需要将 www.test.com 或 test.com 的訪問反向代理到 192.168.1.1 地址上。

      1 执行如下命令来建立缓存目錄和临时目錄,这里默认为最大20g的缓存空间,可以根据你的实际情况增加或减小,修改地方为 max_size=20g;

      mkdir /var/www/cache
      mkdir /var/www/temp
      chown -R www-data:www-data /var/www
      echo "proxy_cache_path /var/www/cache levels=1:2 keys_zone=cache_one:100m inactive=7d max_size=20g;" > /etc/nginx/conf.d/cdn.conf
      echo "proxy_temp_path /var/www/temp;" >> /etc/nginx/conf.d/cdn.conf
      

      2 編輯 www.test.com 站点的反向代理配置文件 test.com.txt 如下:

      server	{
      	listen       80;
      	server_name www.test.com test.com;
              location / { 
                      proxy_set_header Host $host;
                      proxy_set_header X-Real-IP $remote_addr;
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                      proxy_pass_header Server;
                      proxy_pass http://192.168.1.1;
              }
              location ~ .*\.(gif|png|jpg|jpeg|swf|zip|gz|tar|bz2|rar|doc|txt|ico|cur)$ {
                      proxy_cache cache_one;
                      proxy_cache_valid 30d;
                      proxy_cache_key $host$uri$is_args$args;
                      proxy_set_header Host $host;
                      proxy_pass  http://192.168.1.1;
              }
              location ~ .*\.(css|js)?$ {
                      proxy_cache cache_one;
                      proxy_cache_valid 1h;
                      proxy_cache_key $host$uri$is_args$args;
                      proxy_set_header Host $host;
                      proxy_pass  http://192.168.1.1;
              }
      }
      

      上面的配置中 "gif|png|jpg|jpeg|swf|zip|gz|tar|bz2|rar|doc|txt|ico|cur" 的后缀缓存设置的为30天,css|js 后缀的为1小时,你可以根据实际需求调整 proxy_cache_valid 30d; 行最后的 30d 为其它的值,如缓存1天为: proxy_cache_valid 1d;

      如果不需要緩存,直接設置爲如下:

      server	{
      	listen       80;
      	server_name www.test.com test.com;
              location / { 
                      proxy_set_header Host $host;
                      proxy_set_header X-Real-IP $remote_addr;
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                      proxy_pass_header Server;
                      proxy_pass http://192.168.1.1;
              }
      }
      

      3 将这个文件使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目錄

      4 执行下面的重启 nginx 命令,使配置生效。

      service nginx restart
      

      5 然后就可以去域名管理那里将 www.test.com test.com 的IP设置为VPS的IP即可。

      反向代理 Google

      由于谷歌需要 https 才可以訪問,所以反向代理谷歌需要占用服务器的 https 443 端口。

      1 产生 https 证书

      apt-get install openssl
      cd /etc/nginx/
      openssl genrsa -out google.key 1024
      openssl req -new -key google.key -out google.csr
      openssl x509 -req -days 3650 -in google.csr -signkey google.key -out google.crt
      

      2 建立配置文件 google.test.com.txt 这里用 google.test.com 来反向代理 google.com 如下:

      server {
              listen 80;
              server_name google.test.com;
              rewrite ^(.*) https://google.test.com$1 permanent;
      }
      
      server {
              listen      443;
              server_name  google.test.com;
              ssl on;
              ssl_certificate /etc/nginx/google.crt;
              ssl_certificate_key /etc/nginx/google.key;
              location / {
                      proxy_redirect https://www.google.com.hk/ /;
                      proxy_cookie_domain google.com.hk google.test.com;
                      proxy_set_header Host www.google.com.hk;
                      proxy_pass https://www.google.com.hk;
              }
      }
      

      3 将这个文件使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目錄

      4 执行下面的重启 nginx 命令,使配置生效。

      service nginx restart
      

      5 然后就可以去域名管理那里将 google.test.com 的IP设置为VPS的IP即可。

      6 完成,可以通过訪問 https://google.test.com 來訪問google了。

      安裝郵件服務器

      注意:官方对架设邮件服务器非常限制,担心对外发垃圾邮件,一旦被举报,就直接封VPS,所以下面的配置中,我们将邮件通过 Gmail 的账号转发出去。

      在 Putty 使用如下命令,安裝 postfix,替换下面命令中的第一行 mydomain.com 为 你VPS上绑定的域名,如果有多个域名,选择其中一个即可。

      hostname mydomain.com
      apt-get -y install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules
      

      在弹出的对话框中,如果你的邮件服务器仅仅为你本地的程序使用,可以直接选择 Local only ,否则请选择其它选项。

      安裝完成后,请运行如下命令限制 postfix 为 10 个并发:

      postconf -e default_process_limit=10
      

      將郵件服務器采用gmail賬號做郵件中轉,首先你需要先有一個gmail的賬號: [email protected] PASSWORD ,为了避免出现Gmail的图形验证登陆,你可以开启Gmail的账号的二次验证,然后创建一个应用密码,这样你可以采用应用密码来配置。

      postconf -e relayhost=smtp.gmail.com:587
      postconf -e smtp_sasl_auth_enable=yes
      postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
      postconf -e smtp_sasl_security_options=noanonymous
      postconf -e smtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
      postconf -e smtp_use_tls=yes
      

      下面的脚本中的 USERNAME 和 PASSWORD 单词请改为你正确的用户名和密码,

      echo "smtp.gmail.com:587    [email protected]:PASSWORD" > /etc/postfix/sasl_passwd
      chmod 400 /etc/postfix/sasl_passwd
      postmap /etc/postfix/sasl_passwd
      service postfix restart
      

      完成了本地郵件服務器的搭建。

      測試下:

      echo "Test mail" | mail -s "Test" [email protected]
      

      查看郵件投遞日志:

      tail /var/log/mail.log
      

      這樣你的程序就可以直接使用本地的SMTP服務對外發郵件了。

      搭建臨時的FTP服務

      前面已经提到了可以直接使用 Sftp 来訪問 Vps,如果需要临时的搭建Ftp,则按下面的指南进行。

      下载 pyftpdlib 库

      在 Putty 使用如下命令,下载 pyftpdlib 库并解压缩。

      cd /root
      wget https://pypi.python.org/packages/a8/f8/0f6db156898616dbcbd7bf865660295c81479071ab0fcd1898fe1b3a4fc4/pyftpdlib-1.5.1.tar.gz
      tar xzvf pyftpdlib-1.5.1.tar.gz
      

      解壓縮完畢後,我們可以臨時開啓ftp了:

      開啓匿名ftp服務

      開啓匿名ftp服務,主目錄为 /var/www ;默认是21端口;-d 是设置主目錄。

      cd /root/pyftpdlib-1.5.1/
      python -m pyftpdlib -d /var/www
      

      运行该命令后,客户端就可以使用 anonymous 帐号登錄,下载了。

      按 Ctrl+C 结束 Ftp 服务器。

      開啓允許寫入ftp服務

      添加 -w 参数即可允许写入,不可以长时间开,小心被其它人删除数据。

      cd /root/pyftpdlib-1.5.1/
      python -m pyftpdlib -w -d /var/www 
      

      运行该命令后,客户端就可以使用匿名帐号登錄,下载和上传了。

      登錄ftp的账号

      IP: VPS服务器的IP 用户名: anonymous 密码:随便输入一个邮箱即可。

      關閉ftp服務

      直接关闭终端就会退出ftp服务,如果不想关闭可以同时按下 ctrl+c 退出ftp服务。

      VPS 自我监控

      監控內存和負載

      爲了防止VPS的內存超過,或系統負載過重,建議采用如下監控腳本:

      規則:當剩余內存小于1M或當前負載大于3時,系統重啓。

      在 Putty 里面执行下面的语句,创建 /usr/bin/vpscheck.sh 脚本,

      cat << "EOF" > /usr/bin/vpscheck.sh
      #!/bin/bash
      free_mem=$(grep MemFree /proc/meminfo | awk '{print $2}')
      echo 'Free Memory:'$free_mem
      if [ $free_mem -lt 1000 ];then
         shutdown -r now
      fi
      load=$(awk '$1 > 3 {print $1}' /proc/loadavg)
      echo "Load:"$load
      if [ -n "$load" ];then
         shutdown -r now
      fi
      EOF
      

      再配置定時器,讓上面的腳本可以每5分鍾運行一次檢查,繼續在putty裏面執行如下命令:

      chmod +x /usr/bin/vpscheck.sh
      echo "*/5 * * * * root  /usr/bin/vpscheck.sh" > /etc/cron.d/vpscheck
      service cron restart
      

      完成性能監控。

      監控網站並發數

      爲了防止網站無法訪問,做如下檢測:

      規則:當訪問的並發數超過100,系統重啓。

      在 Putty 里面执行下面的语句,创建 /usr/bin/wwwcheck.sh 脚本,

      cat << "EOF" > /usr/bin/wwwcheck.sh
      #!/bin/bash
      count=`netstat -na|grep :80|wc -l`
      echo 'Count:'$count
      if [ $count -gt 100 ];then
         shutdown -r now
      fi
      EOF
      

      再配置定時器,讓上面的腳本可以每5分鍾運行一次檢查,繼續在putty裏面執行如下命令:

      chmod +x /usr/bin/wwwcheck.sh
      echo "*/5 * * * * root  /usr/bin/wwwcheck.sh" > /etc/cron.d/wwwcheck
      service cron restart
      

      完成網站並發監控。

      安全相關事項

      防止掃描

      vps的root密码不要设置的太简单,这样很容易被攻破,你可以安裝如下软件来降低vps被攻破的机会。

      輸入如下命令:

      apt-get install fail2ban
      

      提示如下表示安裝完成:

      [email protected]:/# ~# apt-get install fail2ban
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      The following extra packages will be installed:
        python-pyinotify
      Suggested packages:
        python-gamin python-pyinotify-doc
      The following NEW packages will be installed:
        fail2ban python-pyinotify
      0 upgraded, 2 newly installed, 0 to remove and 62 not upgraded.
      Need to get 154 kB of archives.
      After this operation, 763 kB of additional disk space will be used.
      Do you want to continue? [Y/n] y
      Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe fail2ban all 0.8.11-1 [129 kB]
      Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main python-pyinotify all 0.9.4-1build1 [24.5 kB]
      Fetched 154 kB in 0s (213 kB/s)
      Selecting previously unselected package fail2ban.
      (Reading database ... 28959 files and directories currently installed.)
      Preparing to unpack .../fail2ban_0.8.11-1_all.deb ...
      Unpacking fail2ban (0.8.11-1) ...
      Selecting previously unselected package python-pyinotify.
      Preparing to unpack .../python-pyinotify_0.9.4-1build1_all.deb ...
      Unpacking python-pyinotify (0.9.4-1build1) ...
      Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
      fopen: Permission denied
      Setting up fail2ban (0.8.11-1) ...
       * Starting authentication failure monitor fail2ban                                                                                                                       [ OK ]
      Setting up python-pyinotify (0.9.4-1build1) ...
      

      这样如果用户5次密码输入错误,将会自动将其IP加到黑名单,禁止登錄10分钟,10分钟后才可以再登錄。

      防止php木馬

      Attention niels epting.svg 通过设置限制php的 eval 函数来防止木马,可能会导致某些程序无法正常运行,目前在 Ubuntu 14.04 版本上测试通过。

      編輯 /etc/php5/conf.d/suhosin.ini 文件,如果找不到这个文件,执行如下命令安裝 php5-suhosin 模块

      sudo apt-get install php5-suhosin
      

      打開此文件後,找到行:

      ;suhosin.executor.eval.blacklist =
      

      修改爲:

      suhosin.executor.eval.blacklist = include,include_once,require,require_once,curl_init,fpassthru,file,base64_encode,base64_decode,mail,exec,system,proc_open,leak,syslog,pfsockopen,shell_exec,ini_restore,symlink,stream_socket_server,proc_nice,popen,proc_get_status,dl, pcntl_exec, pcntl_fork, pcntl_signal,pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled,pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, socket_accept,socket_bind, socket_connect, socket_create, socket_create_listen,socket_create_pair,link,register_shutdown_function,register_tick_function 
      

      然后重启下 apache2 或 php5-fpm 即可

      木馬基本檢查和手工清除

      一般采用如下命令去檢查有危險文件:

      cd /var/www/
      grep -R base64_decode *|more
      

      如果看到類似這樣的東西,就可以肯定中木馬了:

      eval(base64_decode("一大串无意义字母
      或
      eval(base64_decode($_POST["
      或
      eval(gzuncompress(base64_decode
      

      最佳方案,重裝系統,重新配置過。

      也可以嘗試使用下面的命令手工清除

      find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}base64_decode.*?\);//g" {} \;
      find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}gzuncompress.{0,10}\(.{0,10}base64_decode.*?\);//g" {} \;
      find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}stripslashes.*?\);//g" {} \;
      

      然後繼續檢查有沒有群發郵件的木馬:

      grep -R -E 'POST.*pfsockopen.*EHLO' /var/www/
      

      發現後,如果確定是木馬,采用如下命令批量刪除木馬文件:

      grep -R -l -E 'POST.*pfsockopen.*EHLO' /var/www/ | xargs rm -f
      

      查查 eval 和 fwrite 函数

      grep -R -E 'REQUEST.*eval.*fwrite' /var/www/
      

      發現後,如果確認是木馬,采用如下命令批量刪除木馬文件:

      grep -R -l -E 'REQUEST.*eval.*fwrite' /var/www/  | xargs rm -f
      

      最后重点检查 包含 eval 函数的 php 文件

       find . -name "*.php" -exec grep -l eval {} \;
      

      如果發現有無意義的單詞,多半也是中木馬了,不過這種需要手工刪除相關被感染代碼。


      根據訪問日志批量封IP

      有时候,我们可以去检查 HTTP 的訪問日志发现异常,然后根据这些异常来封 IP。

      首先检查异常, 关键词:xmlrpc.php ,下面的命令可以根据你的需求来调整关键词,其中 access.log 为你的 HTTP 的訪問日志文件,可以根据实际情况修改。

      执行下面的命令,可以顯示所有的 IP 地址,来进行查看:

      cat access.log | grep "xmlrpc.php" | awk '{print $1}' | sort | uniq
      

      確認無誤後,執行下面的命令進行封禁:

      cat access.log | grep "xmlrpc.php" | awk '{print $1}' | sort | uniq | xargs -n1 -I {} iptables -A INPUT -p tcp --dport 80 -s {}/32 -j DROP
      

      執行完畢後,可以使用如下命令查看封禁結果:

      iptables -L
      

      注意,上面只是臨時封禁,如果重啓VPS,將會清空規則。

      關閉郵件服務

      由于国外对发垃圾邮件的处罚很重,会导致 VPS 被终止,所以为了防止误发邮件或被木马、黑客利用,如果你不需要发送邮件,则關閉郵件服務:

      1 删除邮件服务 执行如下命令删除服务器的邮件程序:

      apt-get remove postfix* sendmail* procmail*
      

      2 防火墙屏蔽邮件转发 执行如下命令屏蔽邮件端口转发:

      iptables -I FORWARD -p tcp --dport 25 -j DROP
      sed -i '$i\iptables -I FORWARD -p tcp --dport 25 -j DROP' /etc/rc.local
      

      備份站點

      将 vps 成功安裝好软件后,面临的第二大的事情是如何备份现有的东西?

      你需要备份 3 个方面的内容: 1 站点配置文件 2 站点文件 3 数据库, 分别讲解如下:

      備份站點配置文件

      看前面的設置,一般情況,我們需要備份Apache或Nginx,如果你修改了Mysql的配置,則需要備份Mysql的配置。

      注意在使用 tar 备份时,推荐使用 “tar czf 备份文件名 需要备份的路径” 来备份,你也可以使用 “tar czvf ..." 来顯示备份详细的进度;但当备份文件很多时,顯示中间的备份过程会很花时间和带宽,所以并不建议使用。

      备份完毕后,就可以直接使用 filezilla 到 /root 目錄去下载你备份的文件了。

      備份Apache配置文件

      执行如下命令备份Apache的配置到 /root 下 :

      cd
      tar czf apache2.tar.gz /etc/apache2
      

      备份的文件名叫 apache2.tar.gz ,執行結果如下:

      [email protected]:~# cd
      [email protected]:~# tar czf apache2.tar.gz /etc/apache2
      tar: Removing leading `/' from member names
      

      檢查下備份的文件大小,輸入

       ls -l apache2.tar.gz
      

      結果顯示如下,表示備份成功

      [email protected]:~# ls -l apache2.tar.gz
      -rw-r--r-- 1 root root 31021 Aug 13 18:32 apache2.tar.gz
      

      備份Nginx配置文件

      执行如下命令备份Nginx的配置到 /root 下 :

      cd
      tar czf nginx.tar.gz /etc/nginx
      

      备份的文件名叫 nginx.tar.gz ,執行結果如下:

      [email protected]:~# cd
      [email protected]:~# tar czf nginx.tar.gz /etc/nginx
      tar: Removing leading `/' from member names
      

      檢查下

      [email protected]:~# ls -l nginx.tar.gz
      -rw-r--r-- 1 root root 5179 Aug 13 18:21 nginx.tar.gz
      

      備份Mysql配置文件

      执行如下命令备份Mysql的配置到 /root 下 :

      cd
      tar czf mysql.tar.gz /etc/mysql
      

      备份的文件名叫 mysql.tar.gz ,執行結果如下:

      [email protected]:~# cd
      [email protected]:~# tar czf mysql.tar.gz /etc/mysql
      tar: Removing leading `/' from member names
      

      檢查下

      [email protected]:~# ls -l mysql.tar.gz
      -rw-r--r-- 1 root root 2639 Aug 13 18:25 mysql.tar.gz
      

      備份站點文件

      执行如下命令备份 /var/www 的配置到 /root 下 :

      cd
      tar czf www.tar.gz /var/www
      

      备份的文件名叫 www.tar.gz ,執行結果如下:

      [email protected]:~# cd
      [email protected]:~# tar czf www.tar.gz /var/www
      tar: Removing leading `/' from member names
      

      檢查如下

      [email protected]:~# ls -l www.tar.gz
      -rw-r--r-- 1 root root 12042534 Aug 13 18:43 www.tar.gz
      

      備份數據庫

      由于數據庫本身包含了帳號和權限信息,所以我們完整備份整個數據庫。

      执行以下命令備份數據庫到 /root 目錄

      cd
      mysqldump -p --all-databases |gzip > mysql.sql.gz
      

      會提示輸入密碼,輸入mysql的密碼後回車完成備份,如下所示。

      [email protected]:~# mysqldump -p --all-databases |gzip > mysql.sql.gz
      Enter password:
      

      备份的文件名为 mysql.sql.gz ,检查一下备份的时间和大小

      [email protected]:~# ls -l mysql.sql.gz
      -rw-r--r-- 1 root root 133351 Aug 13 19:01 mysql.sql.gz
      

      恢複站點

      当 vps 出现故障后如何恢复?

      首先你需要重新去reload系统到原来的系统,然后再按照前面的指南,安裝好和之前一样的运行环境。

      然后将你备份的所有文件使用 filezilla 上传到 vps 的 /root 目錄下。

      最后需要恢复 3 个方面的内容: 1 站点配置文件 2 站点文件 3 数据库, 分别讲解如下:

      恢複站點配置文件

      恢複Apache配置文件

      假设 apache 的备份文件名为 apache2.tar.gz ,使用 putty 登錄 vps ,执行如下命令恢复:

      cd
      tar xzf apache2.tar.gz
      cp -a etc/apache2 /etc/apache2
      

      執行結果如下,不會有任何回應:

      [email protected]:~# cd
      [email protected]:~# tar xzf apache2.tar.gz
      [email protected]:~# cp -a etc/apache2 /etc/
      

      使用如下命令重启 Apache2 :

      service apache2 restart
      

      恢複Nginx配置文件

      假设 nginx 的备份文件名为 nginx.tar.gz ,使用 putty 登錄 vps ,执行如下命令恢复:

      cd
      tar xzf nginx.tar.gz
      cp -a etc/nginx /etc/nginx
      

      執行結果如下,不會有任何回應:

      [email protected]:~# cd
      [email protected]:~# tar xzf nginx.tar.gz
      [email protected]:~# cp -a etc/nginx /etc/
      

      使用如下命令重启 nginx :

      service nginx restart
      

      恢複Mysql配置文件

      假设 mysql 的备份文件名为 mysql.tar.gz ,使用 putty 登錄 vps ,执行如下命令恢复:

      cd
      tar xzf mysql.tar.gz
      cp -a etc/mysql /etc/
      

      執行結果如下,不會有任何回應:

      [email protected]:~# cd
      [email protected]:~# tar xzf mysql.tar.gz
      [email protected]:~# cp -a etc/mysql /etc/mysql
      

      恢複站點文件

      由于站點占用的空間比較大,所有我們不複制過去,解壓縮後直接移動過去。

      假设站点的备份文件名为 www.tar.gz ,使用 putty 登錄 vps ,执行如下命令恢复:

      cd
      tar xzf www.tar.gz
      rm -fr /var/www/*
      mv var/www/* /var/www/
      

      執行結果如下,不會有任何回應:

      [email protected]:~# cd
      [email protected]:~# tar xzf www.tar.gz
      [email protected]:~# rm -fr /var/www/*
      [email protected]:~# mv var/www/* /var/www/
      

      恢複數據庫

      假设 mysql 的备份文件名为 mysql.sql.gz ,使用 putty 登錄 vps ,执行如下命令恢复:

      cd
      gunzip < mysql.sql.gz | mysql -p
      

      会提示输入当前新安裝的mysql密码,输入密码后回车继续。

      執行結果如下:

      [email protected]:~# cd
      [email protected]:~# gunzip < mysql.sql.gz | mysql -p
      Enter password:
      

      使用 Dropbox 每天自动备份

      注册 Dropbox

      Dropbox 是一个美国的在线网盘,默认提供了2G的空间,同时可以通过邀请其他朋友使用的手段增加容量。

      为什么使用这个,主要是 VPS 到 Dropbox 备份可以到 1M 的真实传输速度,加上可以加容量,所以是非常理想的备份方式。

      點擊 注册 Dropbox 并登錄到 Dropbox 网页。

      BTW:淘寶上也有人提供擴容到20G的服務,風險自行承擔。

      Dropbox 将申请150M内存,实际消耗17M内存,所以请注意控制内存。

      Vps dropbox.png

      安裝 Dropbox 客户端

      打开 putty 执行如下命令安裝,如果是32位的系统,采用如下命令。执行完毕后,请不要再执行下面给64位系统执行的命令:

      cd ~ && wget -O - https://www.dropbox.com/download?plat=lnx.x86 | tar xzf -
      

      64位系統的采用如下命令,

       cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
      

      執行結果如下所示:

      [email protected]:~# cd ~ && wget -O - https://www.dropbox.com/download?plat=lnx.x86 | tar xzf -
      --2012-02-22 06:44:40--  https://www.dropbox.com/download?plat=lnx.x86
      Resolving www.dropbox.com... 199.47.217.171, 199.47.216.170, 199.47.216.171, ...
      Connecting to www.dropbox.com|199.47.217.171|:80... connected.
      HTTP request sent, awaiting response... 302 FOUND
      Location: https://dl-web.dropbox.com/u/17/dropbox-lnx.x86-1.2.52.tar.gz [following]
      --2012-02-22 06:44:40--  https://dl-web.dropbox.com/u/17/dropbox-lnx.x86-1.2.52.tar.gz
      Resolving dl-web.dropbox.com... 107.20.132.92, 107.20.138.135, 107.20.170.126, ...
      Connecting to dl-web.dropbox.com|107.20.132.92|:80... connected.
      HTTP request sent, awaiting response... 200 OK
      Length: 15794278 (15M) [application/x-tar]
      Saving to: `STDOUT'
      
      100%[======================================>] 15,794,278   893K/s   in 15s     
      
      2012-02-22 06:44:57 (1.01 MB/s) - written to stdout [15794278/15794278]
      

      看到类似信息,表示安裝完成。

      設置帳號

      执行如下命令开始設置帳號

      ~/.dropbox-dist/dropboxd
      

      當看到

      Please visit https://www.dropbox.com/cli_link?host_id=xxx&cl=en_US to link this machine.
      

      的提示时,复制里面https的链接地址使用浏览器打开,会出现Dropbox的密码框,输入你刚刚注册的密码,等到 putty 里面出现

      Client successfully linked, Welcome xxx! 
      

      的提示即可完成设置。完成后,使用 Ctrl+C 键中断运行。

      完整如下所示:

      [email protected]:~# ~/.dropbox-dist/dropboxd 
      This client is not linked to any account...
      Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.
      This client is not linked to any account...
      Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.
      This client is not linked to any account...
      Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.
      This client is not linked to any account...
      Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.
      Client successfully linked, Welcome guest!
      

      開始使用

      完成以上设置后,会在当然的目錄下出现 Dropbox 目錄,这个目錄就是同步目錄,当在这个目錄下放置的任何文件都会同步到 Dropbox 网盘上。

      [email protected]:~# ls
      Dropbox
      [email protected]:~# cd Dropbox/
      [email protected]:~/Dropbox# ls
      Getting Started.pdf  Photos  Public
      

      第一次测试: 在Dropbox目錄下创建一个内容为 Hello 的 a.txt 文件。

      [email protected]:~/Dropbox# echo "Hello" > a.txt
      

      運行同步程序

      [email protected]:~/Dropbox# ~/.dropbox-dist/dropboxd 
      

      打开Dropbox网页的 Files ,就会看到你的文件了。 输入 Ctrl+C 中断同步,下面开始讲如何配置自动运行同步。

      自动运行 Dropbox

      512M內存的VPS請不要自動啓動服務,需要時,手工運行即可,啓動後會太占內存。

      直接复制下面的命令到Putty并执行,以下为创建 dropbox 的自动启动文件,命令内容如下:

      cat << "EOF" > /etc/init.d/dropbox
      #!/bin/bash
      # dropbox service
      DAEMON=.dropbox-dist/dropboxd
      
      start() {
          echo "Starting dropbox..."
          if [ -x /root/$DAEMON ]; then
             HOME="/root" start-stop-daemon -b -o -c root -S -u root -x /root/$DAEMON
          fi
      }
       
      stop() {
          echo "Stopping dropbox..."
          if [ -x /root/$DAEMON ]; then
              start-stop-daemon -o -c root -K -u root -x /root/$DAEMON
          fi
      }
       
      status() {
          dbpid=`pgrep -u root dropboxd`
          if [ -z $dbpid ]; then
              echo "dropboxd not running."
          else
              echo "dropboxd running (pid $dbpid)"
          fi
      }
       
       
      case "$1" in
        start)
          start
          ;;
       
        stop)
          stop
          ;;
       
        restart|reload|force-reload)
          stop
          start
          ;;
       
        status)
          status
          ;;
       
        *)
          echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"
          exit 1
       
      esac
       
      exit 0
      EOF
      

      然后继续执行如下命令,设置自动启动 dropbox 同步服务:

      chmod +x /etc/init.d/dropbox
      update-rc.d dropbox defaults
      /etc/init.d/dropbox start
      

      執行命令的結果如下所示:

      [email protected]:~/Dropbox# sed -i "s/\r//" /etc/init.d/dropbox 
      [email protected]:~/Dropbox# chmod +x /etc/init.d/dropbox
      [email protected]:~/Dropbox# update-rc.d dropbox defaults
      perl: warning: Setting locale failed.
      perl: warning: Please check that your locale settings:
      	LANGUAGE = (unset),
      	LC_ALL = (unset),
      	LANG = "zh_CN.UTF-8"
          are supported and installed on your system.
      perl: warning: Falling back to the standard locale ("C").
      update-rc.d: warning: /etc/init.d/dropbox missing LSB information
      update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
       Adding system startup for /etc/init.d/dropbox ...
         /etc/rc0.d/K20dropbox -> ../init.d/dropbox
         /etc/rc1.d/K20dropbox -> ../init.d/dropbox
         /etc/rc6.d/K20dropbox -> ../init.d/dropbox
         /etc/rc2.d/S20dropbox -> ../init.d/dropbox
         /etc/rc3.d/S20dropbox -> ../init.d/dropbox
         /etc/rc4.d/S20dropbox -> ../init.d/dropbox
         /etc/rc5.d/S20dropbox -> ../init.d/dropbox
      [email protected]:~/Dropbox# /etc/init.d/dropbox start
      Starting dropbox...
      

      现在你的VPS已经可以自动同步 /root/Dropbox 目錄下的所有文件了。

      自动每天備份數據庫和站点

      輸入如下命令,創建自動備份腳本,注意腳本中的“數據庫密碼”需要換成你自己的Mysql數據庫密碼:

      echo '#!/bin/bash' > /etc/cron.daily/dropboxbackup
      echo 'tar czf /root/Dropbox/www.tar.gz /var/www' >>/etc/cron.daily/dropboxbackup
      echo 'mysqldump -p数据库密码 --all-databases |gzip > /root/Dropbox/mysql.sql.gz' >>/etc/cron.daily/dropboxbackup
      chmod +x /etc/cron.daily/dropboxbackup
      service cron restart
      

      執行結果如下

      [email protected]:~# echo '#!/bin/bash' > /etc/cron.daily/dropboxbackup
      [email protected]:~# echo 'tar czf /root/Dropbox/www.tar.gz /var/www' >>/etc/cron.daily/dropboxbackup
      [email protected]:~# echo 'mysqldump -p123456 --all-databases |gzip > /root/Dropbox/mysql.sql.gz' >>/etc/cron.daily/dropboxbackup
      [email protected]:~# chmod +x /etc/cron.daily/dropboxbackup
      [email protected]:~# service cron restart 
      Rather than invoking init scripts through /etc/init.d, use the service(8)
      utility, e.g. service cron restart
      
      Since the script you are attempting to invoke has been converted to an
      Upstart job, you may also use the restart(8) utility, e.g. restart cron
      cron start/running, process 3094
      

      看到上面的提示,表示自动备份设置完成,然后你可以手工执行下 /etc/cron.daily/dropboxbackup 看看效果。

      使用 BitTorrent Sync 备份系统

      說明

      这个是 BitTorrent 公司写的一个非开源备份系统,具体请自行 Google,这里直接讲如何安裝和使用。

      使用這個好處有兩點,第一:占用內存非常少,不到20M;第二:不限空間,可以直接備份到你的本地電腦。

      安裝

      在 Putty 里面,依次执行如下命令安裝,安裝过程中在提示输入[Y]或[ENTER]的地方,直接回车即可:

      apt-get install python-software-properties
      add-apt-repository ppa:tuxpoldo/btsync
      apt-get update
      apt-get install btsync
      

      当出现 “The password for accessing the web interface:” 提示输入密码时,输入你的管理密码;其余默认,直接回车即可。

      安裝完毕后,btsync 的配置文件在 /etc/btsync/debconf-default.conf ,你可以去修改这个文件,配置新的密码。

      修改密码后,需要重启 btsync 服务:

      service btsync restart
      

      使用

      打開浏覽器訪問 http://VPSIP:8888 ,在本例中如下: http://184.82.9.30:8888

      登錄默认账号: admin ,密码是你前面输入的。

      好了,然后 點擊 Add Folder 按钮选择需要备份的目錄(推荐备份 /var 目錄),并产生一个随机安全 Secret 号。

      客户端安裝

      訪問 http://labs.bittorrent.com/experiments/sync.html ,點擊红色的 Download 按钮,再點擊 Windows 按钮,下载并安裝

      打开程序,输入前面得到的随机安全 Secret 号,选择一个下载的目錄,你会看到,备份开始了。

      大功告成。

      安裝 Zend Guard Loader

      一般情况我们推荐直接安裝 Zend Guard Loader 来代替 Zend Optimizer,因为 Zend Optimizer 已经过时,并且不被支持。

      cd ~
      wget http://phpcj.googlecode.com/files/ZendGuardLoader.so
      mkdir -p /usr/local/zend/
      cp ZendGuardLoader.so /usr/local/zend/ZendGuardLoader.so
      echo "zend_extension=/usr/local/zend/ZendGuardLoader.so" > /etc/php5/conf.d/zend.ini
      echo "zend_loader.enable=1" >> /etc/php5/conf.d/zend.ini
      

      然後重啓下php即可。

      关于Zend Optimizer

      如果已经安裝了上面的 Zend Guard Loader,请忽略执行本段。

      关于Zend,我们推荐安裝上面的 Zend Guard Loader ,Zend Optimizer 已经被官方放弃,如果一定需要,请看本段。

      由于Zend Optimizer 不支持 php 5.3.x ,如果必须要使用,则需要降级:

      注意不要去尝试安裝 ZendServer-CE 的 optimizerplus 或 Zend Guard Loader,因为,php 5.3.x 上的解密都不支持 php5.2.x 上的加密,除非你手头上的加密程序可以重新针对 php 5.3.x 重新加密,所以必须降级 php 的版本为 5.2.x 。

      并且仅仅支持 Apache , 不支持 Nginx (问题是降级后不再支持 php5-fpm,当然有能力者,可以采用 spawn-fcgi 来代替)。

      如果是Nginx用户,请还原到 Apache 环境,并且参考上面步骤事先安裝好Apache和php,并测试php正常运行。

      php 降级

      依次逐行輸入如下命令:

      apt-get install aptitude lsb-release
      php_installed=`dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`
      aptitude purge $php_installed
      echo -e "Package: php5\nPin: release a=karmic\nPin-Priority: 991\n"  > /etc/apt/preferences.d/php 
      apt-cache search php5-|grep php5-|awk '{print "Package:", $1,"\nPin: release a=karmic\nPin-Priority: 991\n"}'  >> /etc/apt/preferences.d/php 
      apt-cache search -n libapache2-mod-php5 |awk '{print "Package:", $1,"\nPin: release a=karmic\nPin-Priority: 991\n"}' >> /etc/apt/preferences.d/php 
      echo -e "Package: php-pear\nPin: release a=karmic\nPin-Priority: 991\n"  >> /etc/apt/preferences.d/php 
      egrep '(main restricted|universe|multiverse)' /etc/apt/sources.list|grep -v "#"| sed s/`lsb_release -s -c`/karmic/g | sed s/'http:\/\/.*\/'/'http:\/\/old-releases.ubuntu.com\/'/g > /etc/apt/sources.list.d/karmic.list
      apt-get update
      apt-get install $php_installed
      aptitude hold `dpkg -l | grep php5| awk '{print $2}' |tr "\n" " "`
      

      如果碰到如下:

      Do you want to continue? [Y/n/?] 
      

      请出入 y 回车继续

      php 高级安裝技巧

      如果需要支持nginx或采用fastcgi来运行php,在执行完毕上面的步骤后,参考如下命令安裝(注意,Apache环境不需要执行):

      采用fastcgi,即用于spawn-fcgi:

      aptitude install -t karmic php5-cli php5-cgi 
      

      返回到Apache:

      apt-get install -t karmic  libapache2-mod-php5
      

      安裝 Zend Optimizer

      cd ~
      wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
      tar zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
      mkdir -p /usr/local/zend/
      cp ZendOptimizer-3.3.3-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/zend/
      echo "zend_extension=/usr/local/zend/ZendOptimizer.so" > /etc/php5/conf.d/zend.ini
      

      安裝成功验证

      運行:

      php -v
      

      返回如下提示:

      [email protected]:~# php -v
      PHP 5.2.10-2ubuntu6 with Suhosin-Patch 0.9.7 (cli) (built: Oct 23 2009 16:30:10)
      
      Copyright (c) 1997-2009 The PHP Group
      Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
          with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
      

      顯示成功安裝 Zend Optimizer。

      重启 Web 服务

      如果是 apache :

      service apache2 restart
      

      如果是Nginx:

      service php5-fpm restart
      

      額外支持

      XEN VPS 增加交换分区大小

      XEN VPS 专用,OPEN VZ的请忽略。

      增加之前:

      [email protected]:~# free
                   total       used       free     shared    buffers     cached
      Mem:        506088      46008     460080          0       3624      21944
      -/+ buffers/cache:      20440     485648
      Swap:       262140          0     262140
      

      運行如下命令增加256M交換內存

      dd if=/dev/zero of=/mnt/256M.swap bs=1M count=256
      chmod 600 /mnt/256M.swap
      mkswap /mnt/256M.swap
      swapon /mnt/256M.swap
      echo '/mnt/256M.swap  none  swap  sw  0 0' >> /etc/fstab
      

      增加之後:

      [email protected]:~# free
                   total       used       free     shared    buffers     cached
      Mem:        506088     312740     193348          0       3952     284180
      -/+ buffers/cache:      24608     481480
      Swap:       524280          0     524280
      

      配置 php 加速器

      如果你 VPS 的内存大于或等于 1G,可以考虑开启 php 的 apc 加速,否则请忽略本步骤。

      echo "extension=apc.so" > /etc/php5/conf.d/apc.ini
      echo "apc.enabled=1" >> /etc/php5/conf.d/apc.ini
      echo "apc.shm_size=64M" >> /etc/php5/conf.d/apc.ini
      echo "apc.ttl=7200" >> /etc/php5/conf.d/apc.ini
      

      如果你安裝的是apache2,执行下面命令重启下:

      service apache2 restart
      

      如果你安裝的是nginx,执行下面命令重启下:

      service php5-fpm restart
      

      安裝 JAVA

      由于 java 非常消耗内存,1G以下的 VPS 请不要考虑使用 java,java 理想的内存在2G以上。

      采用如下命令安裝JAVA JDK 1.7:

      apt-get install openjdk-7-jdk
      

      驗證如下:

      $ java -version
      java version "1.7.0_25" 
      OpenJDK Runtime Environment (IcedTea 2.3.12) (7u25-2.3.12-4ubuntu3)
      OpenJDK Client VM (build 23.7-b01, mixed mode, sharing)
      

      如果你安裝了多个版本的JDK,需要配置默认的JDK,采用如下命令:

      update-alternatives --config java
      

      日常維護

      查看硬盤剩余空間大小

      df
      

      顯示

      [email protected]:/# df
      Filesystem           1K-blocks      Used Available Use% Mounted on
      /dev/simfs            20971520    583508  20388012   3% /
      

      查看硬盤可用文件數

      df -i
      

      顯示

      [email protected]:/# df -i
      Filesystem            Inodes   IUsed   IFree IUse% Mounted on
      /dev/simfs            400000   26568  373432    7% /
      

      查看內存剩余大小

      free
      

      顯示

      [email protected]:/# free
                   total       used       free     shared    buffers     cached
      Mem:        524800     245240     279560          0          0          0
      -/+ buffers/cache:     245240     279560
      Swap:            0          0          0
      

      如何從其他網站上下載文件

      wget "下载文件的链接地址"
      

      如下所示下载 DZ 论坛的最新版:

      wget http://download.comsenz.com/DiscuzX/2.0/Discuz_X2_SC_UTF8.zip
      

      你也可以指定需要保存的文件名为 dz.zip 如下:

      wget http://download.comsenz.com/DiscuzX/2.0/Discuz_X2_SC_UTF8.zip -O dz.zip
      

      如果對方有防盜鏈可以這樣下:

      wget http://download.comsenz.com/DiscuzX/2.0/Discuz_X2_SC_UTF8.zip --referer=http://download.comsenz.com/
      

      常用服務重啓

      重启 Apache2

      service apache2 restart
      

      重启 Mysql

      service mysql restart
      

      重启 Nginx

      service nginx restart
      

      重启 php

      service php5-fpm restart
      

      查看內存被什麽消耗

      ps -eo vsz,rss,pid,cmd --sort -vsz|head -n 20
      

      顯示:

      [email protected]:~#  ps -eo vsz,rss,pid,cmd --sort -vsz|head -n 20
         VSZ   RSS   PID CMD
      146384 36860  1629 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
       62908  3676  8026 nginx: worker process
       62660  2884  8027 nginx: cache manager process
       62660  3404 17440 nginx: master process /usr/sbin/nginx
       50380 11160  1517 /usr/sbin/named -u bind
       33948 13076 32345 /usr/bin/php-cgi
       33796 12912 32344 /usr/bin/php-cgi
       33764 12828 32351 /usr/bin/php-cgi
       33684 12804 32350 /usr/bin/php-cgi
       32892 12012 32346 /usr/bin/php-cgi
       32892 11984 32349 /usr/bin/php-cgi
       28864  7952 32347 /usr/bin/php-cgi
       28864  7956 32348 /usr/bin/php-cgi
       27708  5624 32342 /usr/bin/php-cgi
        8688  1924  3089 sendmail: MTA: accepting connections          
        8136  2924 32338 /usr/sbin/sendmail -i -FCronDaemon -oem root
        8096  2804 20387 sshd: [email protected]/0 
        8096  2756 23759 sshd: [email protected]/1 
        5304  1084  1547 /usr/sbin/sshd
      

      動態顯示系統程序情況

      top
      

      顯示 Vps top.png

      mysql 常用命令

      mysql 创建数据库

      mysqladmin -u root -p create 数据库名
      

      mysql 删除数据库

      mysqladmin -u root -p drop 数据库名
      

      mysql 创建用户

      mysql> GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
      

      mysql 修复表

      mysqlcheck -A --auto-repair -p
      

      mysql 手工恢复 phpmyadmin 备份的 sql 文件 xxxx.sql 是你备份的sql文件名。

       mysql -p 数据库名 < xxxx.sql
      

      手工备份单个 mysql 数据库 xxxx.sql 是你备份的sql文件名。

      mysqldump -p 数据库名 > xxxx.sql
      

      修改mysql的root的密碼

      mysqladmin -u root password '新密码'
      

      mysql 无法启动的处理

      运行 mysqld_safe --user=mysql

      然后 tail -n 50 /var/log/syslog 看日志,根据错误来判断

      如果提示日志不存在,運行: apt-get install rsyslog 安裝日志服务。

      在線解壓縮

      解压缩 xxx.zip

      unzip xxx.zip
      

      解压缩 xxx.tar.gz

      tar -xzvf xxx.tar.gz
      

      解压缩 xxx.tar.bz2

      tar -xjvf xxx.tar.bz2
      

      压缩aaa bbb目錄为xxx.tar.gz

      tar -zcvf xxx.tar.gz aaa bbb
      

      压缩aaa bbb目錄为xxx.tar.bz2

      tar -jcvf xxx.tar.bz2 aaa bbb
      

      封掉某個IP或IP段

      只是运行后封掉,由于未保存所以重启后失效,对 192.168.2.0 或 192.168.2.23 进行封掉:

      iptables -t filter -I INPUT -s 192.168.2.0/24 -p tcp -j DROP
      iptables -t filter -I INPUT -s 192.168.2.23 -p tcp -j DROP
      

      查看日志

      如果需要查看訪問日志,请查看 /var/log/ 文件夹,所有的日志都在这个目錄下。

      查看網絡流量

      执行如下命令安裝nload

      apt-get install nload
      

      安裝完毕后,xen的直接运行nload,即可查看,openvz的运行 nload venet0 查看带宽。

      更多命令參考

      點擊查看 Ubuntu 技巧
      

      根據壓力測試來調整最大並發數

      因为VPS的内存是有限的,如果不限制最大并发数,会照成内存爆掉或负载过高。内存爆掉,对于openvz的管理会kill掉最耗内存的程序,这样很可能杀掉web服务和sshd服务,表现形式为,vps可以ping通,但网站打不开,也无法登錄,需要到面板重启vps才正常;如果负载大于3则会导致VPS由于滥用被官方冻结。如果已经发生了上述现象,请尽快按如下步骤进行调整。

      測試內存的使用情況

      使用 putty 登錄到到 vps 输入命令 free 即可看到当前内存的使用情况,如下所示:

      [email protected]:~# free
                  total       used       free     shared    buffers     cached
      Mem:        524800     296004     228796          0          0          0
      -/+ buffers/cache:     296004     228796
      Swap:            0          0          0
      

      全部内存为 524800 K,已经使用 296004 K 剩余 228796 K,也就是还剩余 228 M的内存。

      如果需要長時間監控,使用如下命令:

      watch -n 1 free
      

      安裝压力测试软件

      我们这里使用 ab 软件,作为我们的压力测试软件。

      使用 apache2的 vps 已经自带了,如果使用nginx的vps,需要安裝 apache2-utils 包,使用如下命令安裝。

      apt-get install apache2-utils
      

      開始壓力測試

      你的站点都已经配置完整,需要找一个动态頁面,最好内容多一点的,这里采用 http://www.test.com/index.php 作为测试頁面。

      在 putty 里面输入如下,将每秒刷新一次顯示内存情况:

      watch -n 1 free
      

      重点在于观察位于 free 单词下面的数字。

      再開一個putty,輸入我們要進行的壓力測試命令如下,其中測試網址修改爲你自己的測試網址:

      ab -n 100 -c 5 http://www.test.com/index.php
      

      这个命令是按 5 个并发,做100次请求 ,注意看内存情况,如果出现内存小于50M的情况,表示非常危险了。

      執行完畢的結果如下:

      [[email protected] ~]# ab -n 100 -c 5 http://www.test.com/index.php
      This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
      Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
      Copyright 2006 The Apache Software Foundation, http://www.apache.org/
      
      Benchmarking www.test.com (be patient).....done
      
      
      Server Software:        Apache/2.2.16
      Server Hostname:        www.test.com
      Server Port:            80
      
      Document Path:          /index.php
      Document Length:        56446 bytes
      
      Concurrency Level:      5
      Time taken for tests:   53.147069 seconds
      Complete requests:      100
      Failed requests:        0
      Write errors:           0
      Total transferred:      5721547 bytes
      HTML transferred:       5695792 bytes
      Requests per second:    1.88 [#/sec] (mean)
      Time per request:       2657.354 [ms] (mean)
      Time per request:       531.471 [ms] (mean, across all concurrent requests)
      Transfer rate:          105.12 [Kbytes/sec] received
      
      Connection Times (ms)
                    min  mean[+/-sd] median   max
      Connect:      218  219   2.9    218     230
      Processing:  1463 2407 258.5   2429    3126
      Waiting:      450 1280 217.7   1291    1832
      Total:       1681 2627 258.6   2648    3344
      
      Percentage of the requests served within a certain time (ms)
        50%   2648
        66%   2691
        75%   2759
        80%   2818
        90%   2885
        95%   3093
        98%   3339
        99%   3344
       100%   3344 (longest request)
      

      這個結果中需要掌握的有:

      成功完成的请求数: Complete requests: 100

      失败的请求数: Failed requests: 0

      每秒完成的请求数: Requests per second: 1.88 [#/sec] (mean)

      执行每个请求需要的时间(也就是用户打开这个頁面的最快时间): Time per request: 2657.354 [ms] (mean)

      進一步壓力測試

      在內存還有剩余的情況下,我們繼續增加壓力測試的並發數,可以慢慢增加,

      當這邊的內存監控窗口出現低于50M的時候,就表示這個數值爲這個vps可以承受的最大並發數。

      出现低于50M可以内存的情况如下,表示这个站只能支撑8个并发訪問不会挂掉:

      [[email protected] ~]# ab -n 100 -c 8 http://www.test.com/index.php
      This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
      Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
      Copyright 2006 The Apache Software Foundation, http://www.apache.org/
      
      Benchmarking www.test.com (be patient).....done
      
      
      Server Software:        Apache/2.2.16
      Server Hostname:        www.test.com
      Server Port:            80
      
      Document Path:          /index.php
      Document Length:        56446 bytes
      
      Concurrency Level:      8
      Time taken for tests:   41.779898 seconds
      Complete requests:      100
      Failed requests:        0
      Write errors:           0
      Total transferred:      5670100 bytes
      HTML transferred:       5644600 bytes
      Requests per second:    2.39 [#/sec] (mean)
      Time per request:       3342.392 [ms] (mean)
      Time per request:       417.799 [ms] (mean, across all concurrent requests)
      Transfer rate:          132.53 [Kbytes/sec] received
      
      Connection Times (ms)
                    min  mean[+/-sd] median   max
      Connect:      218  218   0.9    218     223
      Processing:  1684 3021 461.5   3087    4525
      Waiting:      495 1820 418.3   1927    3165
      Total:       1903 3239 461.6   3307    4744
      
      Percentage of the requests served within a certain time (ms)
        50%   3307
        66%   3384
        75%   3452
        80%   3521
        90%   3654
        95%   3763
        98%   4695
        99%   4744
       100%   4744 (longest request)
      

      在8個並發的情況下,用戶打開這個網頁最快也需要3.3秒。

      配置並發參數

      根据上面的压力测试情况去配置相应最大的并发为当前测试的值,上例中,我们测试出的最大并发为 8.

      Apache2 参考:

      Apache2 的优化

      Nginx 参考:

      Nginx 的优化

      常見故障

      "Temporary failure resolving" 或 正在解析主机...失败,未知的名称或服务

      使用 wget 或 apt-get 时出现上面的提示,是官方的dns服务器出现故障了,采用如下命令修复:

      echo nameserver 208.67.222.222 > /etc/resolv.conf
      

      或者

      echo dns-nameservers 208.67.222.222 >> /etc/network/interfaces
      

      "locale: Cannot set LC_ALL to default locale: No such file or directory"

      如果出現如下故障提示:

      perl: warning: Setting locale failed.
      perl: warning: Please check that your locale settings:
      	LANGUAGE = (unset),
      	LC_ALL = (unset),
      	LANG = "zh_CN.UTF-8"
          are supported and installed on your system.
      perl: warning: Falling back to the standard locale ("C").
      locale: Cannot set LC_CTYPE to default locale: No such file or directory
      locale: Cannot set LC_MESSAGES to default locale: No such file or directory
      locale: Cannot set LC_ALL to default locale: No such file or directory
      

      雖然不影響使用,可以使用下面的命令解決:

      locale-gen --lang zh_CN.UTF-8
      dpkg-reconfigure locales
      

      修正時區

      使用如下命令調整本地的系統的時區爲上海。

      cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
      

      开启 GBK/GB2312 支持

      使用如下命令在 local 文件中增加 GBK/GB2312:

      echo "zh_CN.GBK GBK" >> /var/lib/locales/supported.d/local 
      echo "zh_CN.GB2312 GB2312" >> /var/lib/locales/supported.d/local 
      

      然后運行:

      dpkg-reconfigure --force locales  
      

      即可支持了。

      修複cron問題

      #检查cron的任务文件名是否包括 . ,如果有扩展名会导致无法运行,
      #可以使用如下命令检查 run-parts --test /etc/cron.daily
      apt-get remove anacron
      service cron restart
      

      禁止執行的命令

      以下命令是嚴格禁止的,運行後直接導致數據丟失或vps無法正常啓動,如果遇到有人建議你運行如下命令,請停止。

      系統所有文件被刪除

      rm -fr /
      

      系統權限混亂,啓動錯誤,無法ssh連接

      chmod -R 777 /
      

      系統損壞,數據丟失

      dd if=/dev/zero of=/dev/xxx
      

      如果遇到有人建议你,运行包括 rm 、 chmod 、 dd 等命令,请慎重。

      使用 mtr 检测网络丢包

      有时我们发现 ping 丢包,因此需要通过 mtr 来定位故障的位置,使用 mtr 需要双向运行,才可以比较准确的发现故障点。

      VPS上安裝 mtr :

      • Ubuntu Linux
      apt-get install mtr
      
      • Centos Linux
      yum install mtr
      

      訪問 http://ip.cn 獲得本地的公網地址,從VPS執行如下命令:

      mtr -n --report 本地公网地址
      

      獲得路由的丟包位置。

      然后本地 Windows 上安裝 mtr:

      下載地址: http://winmtr.net/download-winmtr/

      下載運行後,直接輸入VPS的IP進行測試。

      最後兩邊對比結果,就可以准確的找到出問題的路由地址。

      找到丟包路由器的IP後,通過 http://ip.cn 去查詢該路由器IP的所在地。如果該IP在國內,只能等待了;如果在國外,可以嘗試去報障,要求官方協調解決。

      VPS之間備份、下載、上傳需要限速

      由于美國VPS之間的速度是200M共享,所以很容易達到滿速,這樣會導致帶寬濫用封掉,所以必須限速,以下按1M限速:

      常用軟件限速

      wget/scp/rsync/lftp 等常用客户端下载限速如下。

      wget --limit-rate=1024k ......
      scp -l  8196 ......
      rsync -auvzP --bwlimit=1024 --size-only ......
      lftp :~> set net:limit-rate 1024000,1024000
      

      采用 trickle 限速

      也可以使用 trickle 来限速,安裝 trickle 使用如下命令

      apt-get install trickle
      

      运行如下命令,限制 wget 的上传速度和下载速度为1M,其中 -d 后面是下载速度,-u 后面是上传速度,以K为单位:

      trickle -d 1024 -u 1024 wget ....
      

      Dropbox 限速:

      trickle -d 1024 -u 1024 ~/.dropbox-dist/dropboxd
      

      快速安裝配置lnmp的命令

      刪除Apache2:

      service apache2 stop
      apt-get update
      apt-get -y remove apache2 apache2.2-common
      

      安裝 php nginx

      apt-get -y install php5-cgi php5-fpm php5-gd php5-mysql php5-curl php5-mcrypt php5-common php-apc mysql-server nginx
      

      配置 nginx:

      mkdir /var/www
      chown www-data:www-data /var/www
      sed -i 's/\/usr\/share\/nginx\/www/\/var\/www/' /etc/nginx/sites-available/default
      sed -i 's/#\(location.*php\)/\1/' /etc/nginx/sites-available/default 
      sed -i 's/#\(.*fastcgi_split_path_info\)/\1/' /etc/nginx/sites-available/default
      sed -i 's/#\(.*fastcgi_pass.*9000\)/\1/' /etc/nginx/sites-available/default
      sed -i 's/#\(.*fastcgi_index\)/\1/' /etc/nginx/sites-available/default
      sed -i 's/#\(.*fastcgi_params\)/\1/' /etc/nginx/sites-available/default
      sed -i '/fastcgi_params/{ n; s/#}/}/; }' /etc/nginx/sites-available/default
      sed -i -e 's/listen =.*$/listen = 127.0.0.1:9000/' `grep -R -l listen /etc/php5/fpm`
      service php5-fpm restart
      service nginx restart
      

      常用鏈接

      • 淘寶店鋪
      • BudgetVM
      取自“https://wiki.ubuntu.org.cn/index.php?title=Vps&oldid=155252”
      HoMEmenuCopyrights 2015.All rights reserved.More welcome - Collect from power by english Blok number sss85786789633111 Copyright