
2012年9月12日
一、準(zhǔn)備
正式開始前,編譯環(huán)境gcc、g++等開發(fā)庫(kù)需要提前安裝。
nginx依賴以下模塊:
gzip模塊需要 zlib 庫(kù)
rewrite模塊需要 pcre 庫(kù)
ssl 功能需要openssl庫(kù)
源碼目錄為:/usr/local/src
1、安裝make
yum -y install gcc automake autoconf libtool make
2、安裝g++
yum install gcc gcc-c++
3、安裝PCRE庫(kù)
cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz
tar -zxvf pcre-8.42.tar.gz
cd pcre-8.42/
./configure
make && make install
出現(xiàn)如下報(bào)錯(cuò):
make[2]: *** [install-libLTLIBRARIES] Error 1
make[2]: Leaving directory `/usr/local/src/pcre-8.42'
make[1]: *** [install-am] Error 2
make[1]: Leaving directory `/usr/local/src/pcre-8.42'
make: *** [install] Error 2
權(quán)限不夠,切換到root,重新make install即可。
4、安裝zlib庫(kù)
cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure
make && make install
5、安裝OpenSSL庫(kù)
cd /usr/local/src
wget http://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -zxvf openssl-fips-2.0.16.tar.gz
cd openssl-fips-2.0.16/
./config
make && make install
編譯安裝 Openssl 1.1.1 支持國(guó)密標(biāo)準(zhǔn)
https://blog.51cto.com/1012682/2380553
6、創(chuàng)建用戶及用戶組
一般為了服務(wù)器安全,會(huì)指定一個(gè)普通用戶權(quán)限的賬號(hào)做為Nginx的運(yùn)行角色,這里使用www用戶做為Nginx工作進(jìn)程的用戶。后續(xù)安裝的PHP也以www用戶作為工作進(jìn)程用戶。
groupadd -r www
useradd -r -g www www
二、NGINX
1、下載
cd /usr/local/src
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar –zxvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
2、配置
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi
make && make install
nginx編譯選項(xiàng)說(shuō)明:
--prefix表示nginx要安裝到哪個(gè)路徑下,這里指定剛才新建好的/alidata/server目錄下的nginx-1.12.2;
--sbin-path表示nginx的可執(zhí)行文件存放路徑
--conf-path表示nginx的主配置文件存放路徑,nginx允許使用不同的配置文件啟動(dòng),通過(guò)命令行中的-c選項(xiàng)
--pid-path表示nginx.pid文件的存放路徑,將存儲(chǔ)的主進(jìn)程的進(jìn)程號(hào)。安裝完成后,可以隨時(shí)改變的文件名 , 在nginx.conf配置文件中使用 PID指令。默認(rèn)情況下,文件名 為prefix/logs/nginx.pid
--error-log-path表示nginx的主錯(cuò)誤、警告、和診斷文件存放路徑
--http-log-path表示nginx的主請(qǐng)求的HTTP服務(wù)器的日志文件的存放路徑
--user表示nginx工作進(jìn)程的用戶
--group表示nginx工作進(jìn)程的用戶組
--with-select_module或--without-select_module表示啟用或禁用構(gòu)建一個(gè)模塊來(lái)允許服務(wù)器使用select()方法
--with-poll_module或--without-poll_module表示啟用或禁用構(gòu)建一個(gè)模塊來(lái)允許服務(wù)器使用poll()方法
--with-http_ssl_module表示使用https協(xié)議模塊。默認(rèn)情況下,該模塊沒(méi)有被構(gòu)建。建立并運(yùn)行此模塊的OpenSSL庫(kù)是必需的
--with-pcre表示pcre的源碼路徑,因?yàn)榻鈮汉蟮膒cre是放在root目錄下的,所以是/root/pcre-8.41;
--with-zlib表示zlib的源碼路徑,這里因?yàn)榻鈮汉蟮膠lib是放在root目錄下的,所以是/root/zlib-1.2.11
--with-openssl表示openssl庫(kù)的源碼路徑
配置OK:
Configuration summary
+ using PCRE library: /usr/local/src/pcre-8.42
+ using OpenSSL library: /usr/local/src/openssl-1.1.0h
+ using zlib library: /usr/local/src/zlib-1.2.11
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx"
nginx configuration file: "/usr/local/nginx/nginx.conf"
nginx pid file: "/usr/local/nginx/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "/var/tmp/nginx/client/"
nginx http proxy temporary files: "/var/tmp/nginx/proxy/"
nginx http fastcgi temporary files: "/var/tmp/nginx/fcgi/"
nginx http uwsgi temporary files: "/var/tmp/nginx/uwsgi"
nginx http scgi temporary files: "/var/tmp/nginx/scgi"
3、安裝
make && make install
4、啟動(dòng)
/usr/local/nginx/sbin/nginx
啟動(dòng)時(shí)報(bào)錯(cuò):
nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory)
手動(dòng)創(chuàng)建該目錄即可:mkdir -p /var/tmp/nginx/client
再次啟動(dòng),打開瀏覽器訪問(wèn)此機(jī)器的IP,瀏覽器出現(xiàn)Welcome to nginx! 則表示 Nginx 已經(jīng)安裝并運(yùn)行成功。
5、設(shè)置軟連接
ln -sf /usr/local/nginx/sbin/nginx /usr/sbin
這樣就可以直接執(zhí)行nginx來(lái)啟動(dòng)了。
6、檢測(cè)nginx
nginx -t
顯示:
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful
三、PHP
1、安裝PHP需要的常用庫(kù)
yum -y install libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel
2、下載
cd /usr/local/src
wget http://cn2.php.net/downloads.php/php-7.2.5.tar.gz
tar -zxvf php-7.2.5.tar.gz
3、配置
./configure --prefix=/usr/local/php \
--with-mysql=mysqlnd \
--enable-mysqlnd \
--with-gd \
--enable-gd-jis-conv \
--enable-fpm
4、安裝
make && make install
安裝信息如下:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
Installing PHP CLI binary: /usr/local/php/bin/
Installing PHP CLI man page: /usr/local/php/php/man/man1/
Installing PHP FPM binary: /usr/local/php/sbin/
Installing PHP FPM defconfig: /usr/local/php/etc/
Installing PHP FPM man page: /usr/local/php/php/man/man8/
Installing PHP FPM status page: /usr/local/php/php/php/fpm/
Installing phpdbg binary: /usr/local/php/bin/
Installing phpdbg man page: /usr/local/php/php/man/man1/
Installing PHP CGI binary: /usr/local/php/bin/
Installing PHP CGI man page: /usr/local/php/php/man/man1/
Installing build environment: /usr/local/php/lib/php/build/
Installing header files: /usr/local/php/include/php/
Installing helper programs: /usr/local/php/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/php/lib/php/
[PEAR] Archive_Tar: upgrade to a newer version (1.4.3 is not newer than 1.4.3)
[PEAR] Console_Getopt: upgrade to a newer version (1.4.1 is not newer than 1.4.1)
[PEAR] Structures_Graph: upgrade to a newer version (1.1.1 is not newer than 1.1.1)
[PEAR] XML_Util: upgrade to a newer version (1.4.2 is not newer than 1.4.2)
[PEAR] PEAR: upgrade to a newer version (1.10.5 is not newer than 1.10.5)
/usr/local/src/php-7.2.5/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers: /usr/local/php/include/php/ext/pdo/
5、添加環(huán)境變量
vim /etc/profile
在末尾加入
export PHP_HOME=/usr/local/php
export PATH=/bin:/usr/bin:/usr/sbin:/sbin:$PATH:PHP_HOME/bin:$PHP_HOME/sbin
保存修改后,使用source命令重新加載配置文件:
source /etc/profile
查看環(huán)境變量:
echo $PATH
6、配置php-fpm
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
使用vim命令對(duì)php-fpm.conf的內(nèi)容進(jìn)行如下修改:
pid = /usr/local/php/var/run/php-fpm.pid
使用vim命令對(duì)php-fpm.conf的內(nèi)容進(jìn)行如下修改:
user = www
group = www
其他配置可根據(jù)需求進(jìn)行修改,比如pm.max_children(php-fpm 能啟動(dòng)的子進(jìn)程的最大數(shù)量)、pm.start_servers(php啟動(dòng)時(shí),開啟的子進(jìn)程的數(shù)量)、pm.min_spare_servers(動(dòng)態(tài)方式空閑狀態(tài)下的最小php-fpm進(jìn)程數(shù)量)、pm.max_spare_servers(動(dòng)態(tài)方式空閑狀態(tài)下的最大php-fpm進(jìn)程數(shù)量)等。
7、啟動(dòng)php-fpm
/usr/local/php/sbin/php-fpm
可以通過(guò)ps aux | grep php查看php進(jìn)程。
https://www.cnblogs.com/sunshineliulu/p/8991957.html
三、MySQL
https://blog.csdn.net/weixin_33859844/article/details/90948191
https://www.cnblogs.com/yangchunlong/p/8477743.html
一、安裝git服務(wù)器所需軟件
打開終端輸入以下命令:
ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client
git-core是git版本控制核心軟件
安裝openssh-server和openssh-client是由于git需要通過(guò)ssh協(xié)議來(lái)在服務(wù)器與客戶端之間傳輸文件
然后中間有個(gè)確認(rèn)操作,輸入Y后等待系統(tǒng)自動(dòng)從鏡像服務(wù)器中下載軟件安裝,安裝完后會(huì)回到用戶當(dāng)前目錄。如果
安裝提示失敗,可能是因?yàn)橄到y(tǒng)軟件庫(kù)的索引文件太舊了,先更新一下就可以了,更新命令如下:
ubuntu:~$ sudo apt-get update
更新完軟件庫(kù)索引后繼續(xù)執(zhí)行上面的安裝命令即可。
安裝python的setuptools和gitosis,由于gitosis的安裝需要依賴于python的一些工具,所以我們需要先安裝python
的setuptools。
執(zhí)行下面的命令:
ubuntu:~$ sudo apt-get install python-setuptools
這個(gè)工具比較小,安裝也比較快,接下來(lái)準(zhǔn)備安裝gitosis,安裝gitosis之前需要初始化一下服務(wù)器的git用戶信息,這個(gè)隨便填。
ubuntu:~$ git config --global user.name "myname"
ubuntu:~$ git config --global user.email "******@gmail.com"
初始化服務(wù)器用戶信息后,就可以安裝gitosis了,gitosis主要是用于給用戶授權(quán),設(shè)置權(quán)限也算是很方便的。
可以通過(guò)以下命令獲取gitosis版本文件
ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git
注意:中間有兩個(gè)是數(shù)字零
獲取gitosis文件后,進(jìn)入到文件目錄下面
ubuntu:/tmp$ cd gitosis/
接著使用python命令安裝目錄下的setup.py的python腳本進(jìn)行安裝
ubuntu:/tmp/gitosis$ sudo python setup.py install
到這里,整個(gè)安裝步驟就完成了,下面就開始對(duì)git進(jìn)行一些基本的配置。
二、創(chuàng)建git管理員賬戶、配置git
創(chuàng)建一個(gè)賬戶(git)作為git服務(wù)器的管理員,可以管理其他用戶的項(xiàng)目權(quán)限。
ubuntu:/tmp/gitosis$ sudo useradd -m git
ubuntu:/tmp/gitosis$ sudo passwd git
然后再/home目錄下創(chuàng)建一個(gè)項(xiàng)目倉(cāng)庫(kù)存儲(chǔ)點(diǎn),并設(shè)置只有g(shù)it用戶擁有所有權(quán)限,其他用戶沒(méi)有任何權(quán)限。
ubuntu:/tmp/gitosis$ sudo mkdir /home/gitrepository
ubuntu:/tmp/gitosis$ sudo chown git:git /home/gitrepository/
ubuntu:/tmp/gitosis$ sudo chmod 700 /home/gitrepository/
由于gitosis默認(rèn)狀態(tài)下會(huì)將倉(cāng)庫(kù)放在用戶的repositories目錄下,例如git用戶的倉(cāng)庫(kù)地址默認(rèn)在/home/git/repositories/目錄下,這里我們需要?jiǎng)?chuàng)建一個(gè)鏈接映射。讓他指向我們前面創(chuàng)建的專門用于存放項(xiàng)目的倉(cāng)庫(kù)目錄/home/gitrepository。
ubuntu:/tmp/gitosis$ sudo ln -s /home/gitrepository /home/git/repositories
這里我將在服務(wù)器端生成ssh公鑰,如果想在其他機(jī)器上管理也可以在其他機(jī)器上生成一個(gè)ssh的公鑰。
ubuntu:/home/git$ ssh-keygen -t rsa
這里會(huì)提示輸入密碼,我們不輸入直接回車即可。
然后用剛生成公鑰id_rsa.pub來(lái)對(duì)gitosis進(jìn)行初始化。
向gitosis添加公鑰并初始化:
$ cp ~/.ssh/id_rsa.pub /tmp
$ sudo -H -u gitadmin gitosis-init < /tmp/id_rsa.pub

出現(xiàn)如上信息說(shuō)明gitosis已經(jīng)初始化成功。
gitosis主要是通過(guò)gitosis-admin.git倉(cāng)庫(kù)來(lái)管理一些配置文件的,如用戶權(quán)限的管理。這里我們需要對(duì)其中的一個(gè)post-update文件添加可執(zhí)行的權(quán)限。
ubuntu:/home/git$ sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update
三、服務(wù)器上創(chuàng)建項(xiàng)目倉(cāng)庫(kù)
使用git賬戶在服務(wù)器上創(chuàng)建一個(gè)目錄(mytestproject.git)并初始化成git項(xiàng)目倉(cāng)庫(kù)。
ubuntu:/home/git$ su git
$ cd /home/gitrepository
$ mkdir mytestproject.git
$ git init --bare mytestproject.git
$ exit
如果出現(xiàn)以下信息就說(shuō)明已經(jīng)成功創(chuàng)建了一個(gè)名為mytestproject.git的項(xiàng)目倉(cāng)庫(kù)了,新建的這個(gè)倉(cāng)庫(kù)暫時(shí)還是空的,不能被客戶端clone,還需要對(duì)gitosis進(jìn)行一些配置操作。
四、使用gitosis管理用戶操作項(xiàng)目的權(quán)限
首先需要在前面生成ssh公鑰(用來(lái)初始化gitosis)的機(jī)器上將gitosis-admin.git的倉(cāng)庫(kù)clone下來(lái)。
在客戶端機(jī)器上新建一個(gè)目錄用于存放gitosis-admin.git倉(cāng)庫(kù)
ubuntu:~$ mkdir gitadmin
ubuntu:~$ cd gitadmin/
ubuntu:~/gitadmin$ git clone git@192.168.1.106:gitosis-admin.git
clone正確會(huì)顯示以下信息

clone下來(lái)會(huì)有一個(gè)gitosis.conf的配置文件和一個(gè)keydir的目錄。gitosis.conf用于配置用戶的權(quán)限信息,keydir主要用戶存放ssh公鑰文件(一般以“用戶名.pub”命名,gitosis.conf配置文件中需使用相同用戶名),用于認(rèn)證請(qǐng)求的客戶端機(jī)器。
現(xiàn)在讓需要授權(quán)的用戶使用前面的方式各自在其自己的機(jī)器上生成相應(yīng)的ssh公鑰文件,管理員把他們分別按用戶名命名好,復(fù)制到keydir目錄下。
ubuntu:~$ cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/
ubuntu:~$ cp /home/aaaaa/Desktop/lisi.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/
繼續(xù)編輯gitosis.conf文件
[gitosis]
[group gitosis-admin]
####管理員組
members = charn@ubuntu
####管理員用戶名,需要在keydir目錄下找到相應(yīng)的.pub文件,多個(gè)可用空格隔開(下同)
writable = gitosis-admin####可寫的項(xiàng)目倉(cāng)庫(kù)名,多個(gè)可用空格隔開(下同)
[group testwrite]
####可寫權(quán)限組
members = zhangsan####組用戶
writable = mytestproject####可寫的項(xiàng)目倉(cāng)庫(kù)名
[group
testread] ####只讀權(quán)限組
members =lisi####組用戶
readonly= mytestproject####只讀項(xiàng)目倉(cāng)庫(kù)名
因?yàn)檫@些配置的修改只是在本地修改的,還需要推送到服務(wù)器中才能生效。
ubuntu:~/gitadmin/gitosis-admin$ git add .
ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"
ubuntu:~/gitadmin/gitosis-admin$ git push origin master
推送成功會(huì)顯示下面提示信息

又是后新增的用戶不能立即生效,這時(shí)候需要重新啟動(dòng)一下sshd服務(wù)
ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart
現(xiàn)在,服務(wù)端的git就已經(jīng)安裝和配置完成了,接下來(lái)就需要有權(quán)限的組成員在各自的機(jī)器上clone服務(wù)器上的相應(yīng)
項(xiàng)目倉(cāng)庫(kù)進(jìn)行相應(yīng)的工作了。
五、客戶端(windows)使用git
下載安裝windows版本的git客戶端軟件,下載地址:http://msysgit.github.io/
安裝完成后右鍵菜單會(huì)出現(xiàn)幾個(gè)git相關(guān)的菜單選項(xiàng),我們主要使用其中的git
bash通過(guò)命令行來(lái)進(jìn)行操作。
在本地新建一個(gè)目錄,使用git初始化這個(gè)目錄,然后再里面新建一個(gè)文本文件用于測(cè)試,最后關(guān)聯(lián)到git服務(wù)器倉(cāng)庫(kù)
中的相關(guān)項(xiàng)目,最后上傳本地版本到服務(wù)器。
$ mkdir testgit
$ cd testgit
$ git init
$ echo "this is a test text file,will push to server" > hello.txt
$ git add .
$ git commit -am "init a base version,add a first file for push to server"
$ git remote add origin git@serverip:mytestproject.git
$ git push origin master
這樣服務(wù)端就創(chuàng)建好了一個(gè)mytestproject.git的倉(cāng)庫(kù)的基礎(chǔ)版本了,現(xiàn)在其他組員只要從服務(wù)端進(jìn)行clone就可以了。
window下面進(jìn)入到需要克隆的本地目錄下面右鍵選擇git bash選項(xiàng),輸入
$ git clone git@serverip:mytestproject.git
就可以把項(xiàng)目clone到本地倉(cāng)庫(kù)了。
下面進(jìn)行簡(jiǎn)單的修改和提交操作
$ cd mytestproject
$ echo "this is another text file created by other" >another.txt
$ git add .
$ git commit -am "add a another file by other"
$ git push origin master
最后推送到服務(wù)器成功會(huì)顯示如下信息

gitolite搭建git倉(cāng)庫(kù)(服務(wù)端+客戶端)
http://blog.csdn.net/ChiChengIT/article/details/49863383
摘要: Git 教程http://www.runoob.com/git/git-tutorial.htmlGit本地服務(wù)器搭建及使用Git是一款免費(fèi)、開源的分布式版本控制系統(tǒng)。眾所周知的Github便是基于Git的開源代碼庫(kù)以及版本控制系統(tǒng),由于其遠(yuǎn)程托管服務(wù)僅對(duì)開源免費(fèi),所以搭建本地Git服務(wù)器也是個(gè)較好的選擇,本文將對(duì)此進(jìn)行詳細(xì)講解。(推薦一家提供私有源代碼免費(fèi)托管的網(wǎng)站:Bitbucket,目前支持...
閱讀全文
1.查看內(nèi)存 free
2.查看cpu cat cpuinfo
3.查看磁盤 fdisk -l
4.查看帶寬 iptraf-ng
5.查看負(fù)載 top
6.查看請(qǐng)求數(shù) netstat -anp | wc -l
7.查看請(qǐng)求詳情 netstat -anp
8.查看某個(gè)程序請(qǐng)求數(shù) netstat -anp | grep php |wc -l
9.查看磁盤使用情況 df -h
10.查看系統(tǒng)日志 dmesg
11.查看進(jìn)程數(shù)量 ps aux | wc -l
12.查看運(yùn)行網(wǎng)絡(luò)程序 ps auxww | more
13.查看php運(yùn)行程序 ps auxww | grep php
14.查看php運(yùn)行程序數(shù)量 ps auxww | grep php | wc -l
15.查看init.d運(yùn)行 ls -al /etc/init.d/
16.查找文件路徑 find / -name php.ini
17.查看mysql端口 netstat -anp | grep 3306
18.查看本機(jī)ip地址 ip add
19.查找某個(gè)字符串在文件中出現(xiàn)的 grep 127.0.0.1:9000 *.conf
20.
一、背景
系統(tǒng)管理員,最謹(jǐn)慎的linux就是rm命令了,一不小心數(shù)據(jù)就沒(méi)干掉,最恐怖的是數(shù)據(jù)沒(méi)有備份,沒(méi)法還原了,此類事情發(fā)生的太多了,針對(duì)于此,我們經(jīng)過(guò)多次嘗試演練,終于成功的把大部分刪除的數(shù)據(jù)找回來(lái)了,下面我把演練過(guò)程給大家介紹一下。
二、安裝恢復(fù)軟件
extundelete,該工具官方給出的是可以恢復(fù)ext3或者ext4文件系統(tǒng)被刪除的文件。
1:通過(guò)命令安裝
#yum install extundelete -y
2:通過(guò)源碼編譯安裝
#yum -y install e2fsprogs-devel e2fsprogs #wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2 #tar -xvjf extundelete-0.2.4.tar.bz2 #cd extundelete-0.2.4 #./configure #make &&make install
三、刪除數(shù)據(jù)查找
首先,我們先刪除一個(gè)文件,如圖:

如上圖,我們剛才在/boot目錄下刪除了個(gè)symvers-2.6.32-431.el6.x86_64.gz文件,/boot是落到/dev/sda1下
在Linux下可以通過(guò)“ls -id”命令來(lái)查看某個(gè)文件或者目錄的inode值,例如查看根目錄的inode值,可以輸入:
[root@cloud boot]# ls -id /boot 2 /boot
注:根目錄的inode一般為2
然后我們開始查找被刪除的文件,需要根據(jù)分區(qū)inode查找,命令如下:
#extundelete /dev/sda1 --inode 2
結(jié)果如下圖:

我們就可以看到標(biāo)識(shí)為Deleted的被刪除數(shù)據(jù)了。
四、數(shù)據(jù)恢復(fù)
我們就開始恢復(fù),命令如下:
#extundelete /dev/sda1 --restore-file symvers-2.6.32-431.el6.x86_64.gz
如圖:


還原成功
當(dāng)然,還有可能刪除整個(gè)文件夾,我們也舉個(gè)例子,如下:
#extundelete /dev/sda1 --restore-directory test
恢復(fù)全部刪除數(shù)據(jù),如下:
#extundelete /dev/sdb1 --restore-all
也可以通過(guò)時(shí)間段恢復(fù),這里就不說(shuō)了,參數(shù)如下:
--version, -[vV],顯示軟件版本號(hào)。 --help,顯示軟件幫助信息。 --superblock,顯示超級(jí)塊信息。 --journal,顯示日志信息。 --after dtime,時(shí)間參數(shù),表示在某段時(shí)間之后被刪的文件或目錄。 --before dtime,時(shí)間參數(shù),表示在某段時(shí)間之前被刪的文件或目錄。 動(dòng)作(action)有: --inode ino,顯示節(jié)點(diǎn)“ino”的信息。 --block blk,顯示數(shù)據(jù)塊“blk”的信息。 --restore-inode ino[,ino,...],恢復(fù)命令參數(shù),表示恢復(fù)節(jié)點(diǎn)“ino”的文件,恢復(fù)的文件會(huì)自動(dòng)放在當(dāng)前目錄下的RESTORED_FILES文件夾中,使用節(jié)點(diǎn)編號(hào)作為擴(kuò)展名。 --restore-file 'path',恢復(fù)命令參數(shù),表示將恢復(fù)指定路徑的文件,并把恢復(fù)的文件放在當(dāng)前目錄下的RECOVERED_FILES目錄中。 --restore-files 'path',恢復(fù)命令參數(shù),表示將恢復(fù)在路徑中已列出的所有文件。 --restore-all,恢復(fù)命令參數(shù),表示將嘗試恢復(fù)所有目錄和文件。 -j journal,表示從已經(jīng)命名的文件中讀取擴(kuò)展日志。 -b blocknumber,表示使用之前備份的超級(jí)塊來(lái)打開文件系統(tǒng),一般用于查看現(xiàn)有超級(jí)塊是不是當(dāng)前所要的文件。 -B blocksize,通過(guò)指定數(shù)據(jù)塊大小來(lái)打開文件系統(tǒng),一般用于查看已經(jīng)知道大小的文件。
五、總結(jié)
數(shù)據(jù)恢復(fù),不一定能全部將數(shù)據(jù)恢復(fù)回來(lái),還是一句話,操作要謹(jǐn)慎。萬(wàn)一操作失誤,也不要慌,將損失減少到最小,首先停止所有操作,其次讓專業(yè)人員去處理。
- 安裝 nginx
CentOS 7 沒(méi)有內(nèi)建的 nginx,所以先到 nginx 官網(wǎng) http://nginx.org/en/linux_packages.html#stable ,找到 CentOS 7 的 nginx-release package 檔案連結(jié),然後如下安裝
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安裝後,會(huì)自動(dòng)產(chǎn)生 yum 的 repository 設(shè)定(在 /etc/yum.repos.d/nginx.repo),
接下來(lái)便可以使用 yum 指令安裝 nginx
yum install nginx
- 啟動(dòng) nginx
以前用 chkconfig 管理服務(wù),CentOS 7 改用 systemctl 管理系統(tǒng)服務(wù)
立即啟動(dòng)
systemctl start nginx
查看目前運(yùn)作狀態(tài)
systemctl status nginx
查看 nginx 服務(wù)目前的啟動(dòng)設(shè)定
systemctl list-unit-files | grep nginx
若是 disabled,可以改成開機(jī)自動(dòng)啟動(dòng)
systemctl enable nginx
若有設(shè)定防火牆,查看防火牆運(yùn)行狀態(tài),看是否有開啟 nginx 使用的 port
firewall-cmd --state
永久開放開啟防火牆的 http 服務(wù)
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload
列出防火牆 public 的設(shè)定
firewall-cmd --list-all --zone=public
經(jīng)過(guò)以上設(shè)定,應(yīng)該就可以使用瀏覽器訪問(wèn) nginx 的預(yù)設(shè)頁(yè)面。
- 安裝 PHP-FPM
使用 yum 安裝 php、php-fpm、php-mysql
yum install php php-fpm php-mysql
查看 php-fpm 服務(wù)目前的啟動(dòng)設(shè)定
systemctl list-unit-files | grep php-fpm
改成開機(jī)自動(dòng)啟動(dòng)
systemctl enable php-fpm
立即啟動(dòng)
systemctl start php-fpm
查看目前運(yùn)作狀態(tài)
systemctl status php-fpm
- 修改 PHP-FPM listen 的方式
若想將 PHP-FPM listen 的方式,改成 unix socket,可以編輯 /etc/php-fpm.d/www.conf
將
listen = 127.0.0.1:9000
改成
listen = /var/run/php-fpm/php-fpm.sock
然後重新啟動(dòng) php-fpm
systemctl restart php-fpm
註:不要改成 listen = /tmp/php-fcgi.sock (將 php-fcgi.sock 設(shè)定在 /tmp 底下), 因?yàn)橄到y(tǒng)產(chǎn)生 php-fcgi.sock 時(shí),會(huì)放在 /tmp/systemd-private-*/tmp/php-fpm.sock 隨機(jī)私有目錄下, 除非把 /usr/lib/systemd/system/ 裡面的 PrivateTmp=true 設(shè)定改成 PrivateTmp=false, 但還是會(huì)產(chǎn)生其他問(wèn)題,所以還是換個(gè)位置最方便
刪除之前的版本
# yum remove php*
rpm 安裝 Php7 相應(yīng)的 yum源
CentOS/RHEL 7.x:
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
CentOS/RHEL 6.x:
# rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
yum安裝php7
yum install php70w php70w-opcache
安裝其他插件(選裝)
注:如果安裝pear,需要安裝php70w-devel
php70w
php70w-bcmath
php70w-cli
php70w-common
php70w-dba
php70w-devel
php70w-embedded
php70w-enchant
php70w-fpm
php70w-gd
php70w-imap
php70w-interbase
php70w-intl
php70w-ldap
php70w-mbstring
php70w-mcrypt
php70w-mysql
php70w-mysqlnd
php70w-odbc
php70w-opcache
php70w-pdo
php70w-pdo_dblib
php70w-pear
php70w-pecl-apcu
php70w-pecl-imagick
php70w-pecl-xdebug
php70w-pgsql
php70w-phpdbg
php70w-process
php70w-pspell
php70w-recode
php70w-snmp
php70w-soap
php70w-tidy
php70w-xml
php70w-xmlrp
編譯安裝php7
配置(configure)、編譯(make)、安裝(make install)
使用configure --help
編譯安裝一定要指定定prefix,這是安裝目錄,會(huì)把所有文件限制在這個(gè)目錄,卸載時(shí)只需要?jiǎng)h除那個(gè)目錄就可以,如果不指定會(huì)安裝到很多地方,后邊刪除不方便。
Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print `checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
注意
內(nèi)存小于1G安裝往往會(huì)出錯(cuò),在編譯參數(shù)后面加上一行內(nèi)容--disable-fileinfo
其他配置參數(shù)
--exec-prefix=EXEC-PREFIX
可以把體系相關(guān)的文件安裝到一個(gè)不同的位置,而不是PREFIX設(shè)置的地方.這樣做可以比較方便地在不同主機(jī)之間共享體系相關(guān)的文件
--bindir=DIRECTORY
為可執(zhí)行程序聲明目錄,缺省是 EXEC-PREFIX/bin
--datadir=DIRECTORY
設(shè)置所安裝的程序需要的只讀文件的目錄.缺省是 PREFIX/share
--sysconfdir=DIRECTORY
用于各種各樣配置文件的目錄,缺省為 PREFIX/etc
--libdir=DIRECTORY
庫(kù)文件和動(dòng)態(tài)裝載模塊的目錄.缺省是 EXEC-PREFIX/lib
--includedir=DIRECTORY
C 和 C++ 頭文件的目錄.缺省是 PREFIX/include
--docdir=DIRECTORY
文檔文件,(除 “man(手冊(cè)頁(yè))”以外, 將被安裝到這個(gè)目錄.缺省是 PREFIX/doc
--mandir=DIRECTORY
隨著程序一起帶的手冊(cè)頁(yè) 將安裝到這個(gè)目錄.在它們相應(yīng)的manx子目錄里. 缺省是PREFIX/man
注意: 為了減少對(duì)共享安裝位置(比如 /usr/local/include) 的污染,configure 自動(dòng)在 datadir, sysconfdir,includedir, 和 docdir 上附加一個(gè) “/postgresql” 字串, 除非完全展開以后的目錄名字已經(jīng)包含字串 “postgres” 或者 “pgsql”.比如,如果你選擇 /usr/local 做前綴,那么 C 的頭文件將安裝到 /usr/local/include/postgresql, 但是如果前綴是 /opt/postgres,那么它們將 被放進(jìn) /opt/postgres/include
--with-includes=DIRECTORIES
DIRECTORIES 是一系列冒號(hào)分隔的目錄,這些目錄將被加入編譯器的頭文件 搜索列表中.如果你有一些可選的包(比如 GNU Readline)安裝在 非標(biāo)準(zhǔn)位置,你就必須使用這個(gè)選項(xiàng),以及可能還有相應(yīng)的 --with-libraries 選項(xiàng).
--with-libraries=DIRECTORIES
DIRECTORIES 是一系列冒號(hào)分隔的目錄,這些目錄是用于查找?guī)煳募模?如果你有一些包安裝在非標(biāo)準(zhǔn)位置,你可能就需要使用這個(gè)選項(xiàng) (以及對(duì)應(yīng)的--with-includes選項(xiàng))
--enable-XXX
打開XXX支持
--with-XXX
制作XXX模塊
- PHP FPM設(shè)定參考
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /var/run/php-fpm/php-fpm.sock
user = www
group = www
pm = dynamic
pm.max_children = 800
pm.start_servers = 200
pm.min_spare_servers = 100
pm.max_spare_servers = 800
pm.max_requests = 4000
rlimit_files = 51200
listen.backlog = 65536
;設(shè) 65536 的原因是-1 可能不是unlimited
;說(shuō)明 http://php.net/manual/en/install.fpm.configuration.php
slowlog = /usr/local/php/var/log/slow.log
request_slowlog_timeout = 10
- nginx.conf 設(shè)定參考
user nginx;
worker_processes 8;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
worker_rlimit_nofile 65535;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
server_tokens off;
client_body_buffer_size 512k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_intercept_errors on;
gzip off;
gzip_min_length 1k;
gzip_buffers 32 4k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/css text/xml application/javascript application/atom+xml application/rss+xml text/plain application/json;
gzip_vary on;
include /etc/nginx/conf.d
若出現(xiàn)出現(xiàn)錯(cuò)誤:setrlimit(RLIMIT_NOFILE, 65535) failed (1: Operation not permitted)
先查看目前系統(tǒng)的設(shè)定值
ulimit -n
若設(shè)定值太小,修改 /etc/security/limits.conf
vi /etc/security/limits.conf
加上或修改以下兩行設(shè)定
* soft nofile 65535
* hard nofile 65535
1.關(guān)于Tomcat的session數(shù)目
這個(gè)可以直接從Tomcat的web管理界面去查看即可
或者借助于第三方工具Lambda Probe來(lái)查看,它相對(duì)于Tomcat自帶的管理稍微多了點(diǎn)功能,但也不多
2.監(jiān)視Tomcat的內(nèi)存使用情況
使用JDK自帶的jconsole可以比較明了的看到內(nèi)存的使用情況,線程的狀態(tài),當(dāng)前加載的類的總量等
JDK自帶的jvisualvm可以下載插件(如GC等),可以查看更豐富的信息。如果是分析本地的Tomcat的話,還可以進(jìn)行內(nèi)存抽樣等,檢查每個(gè)類的使用情況
3.打印類的加載情況及對(duì)象的回收情況
這個(gè)可以通過(guò)配置JVM的啟動(dòng)參數(shù),打印這些信息(到屏幕(默認(rèn)也會(huì)到catalina.log中)或者文件),具體參數(shù)如下:
-XX:+PrintGC:輸出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails:輸出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可與上面兩個(gè)混合使用,輸出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中斷的執(zhí)行時(shí)間??膳c上面混合使用。輸出形式:Application time: 0.5291524 seconds
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期間程序暫停的時(shí)間??膳c上面混合使用。輸出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:PrintHeapAtGC: 打印GC前后的詳細(xì)堆棧信息
-Xloggc:filename:與上面幾個(gè)配合使用,把相關(guān)日志信息記錄到文件以便分析
-verbose:class 監(jiān)視加載的類的情況
-verbose:gc 在虛擬機(jī)發(fā)生內(nèi)存回收時(shí)在輸出設(shè)備顯示信息
-verbose:jni 輸出native方法調(diào)用的相關(guān)情況,一般用于診斷jni調(diào)用錯(cuò)誤信息
4.添加JMS遠(yuǎn)程監(jiān)控
對(duì)于部署在局域網(wǎng)內(nèi)其它機(jī)器上的Tomcat,可以打開JMX監(jiān)控端口,局域網(wǎng)其它機(jī)器就可以通過(guò)這個(gè)端口查看一些常用的參數(shù)(但一些比較復(fù)雜的功能不支持),同樣是在JVM啟動(dòng)參數(shù)中配置即可,配置如下:
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.71.38 設(shè)置JVM的JMS監(jiān)控監(jiān)聽的IP地址,主要是為了防止錯(cuò)誤的監(jiān)聽成127.0.0.1這個(gè)內(nèi)網(wǎng)地址
-Dcom.sun.management.jmxremote.port=1090 設(shè)置JVM的JMS監(jiān)控的端口
-Dcom.sun.management.jmxremote.ssl=false 設(shè)置JVM的JMS監(jiān)控不實(shí)用SSL
-Dcom.sun.management.jmxremote.authenticate=false 設(shè)置JVM的JMS監(jiān)控不需要認(rèn)證
5.專業(yè)點(diǎn)的分析工具有
IBM ISA,JProfiler等,具體監(jiān)控及分析方式去網(wǎng)上搜索即可。
集群方案
單個(gè)Tomcat的處理性能是有限的,當(dāng)并發(fā)量較大的時(shí)候,就需要有部署多套來(lái)進(jìn)行負(fù)載均衡了。
集群的關(guān)鍵點(diǎn)有以下幾點(diǎn):
1.引入負(fù)載端
軟負(fù)載可以使用nginx或者apache來(lái)進(jìn)行,主要是使用一個(gè)分發(fā)的功能
參考:
http://ajita.iteye.com/blog/1715312(nginx負(fù)載)
http://ajita.iteye.com/blog/1717121(apache負(fù)載)
2.共享session處理
目前的處理方式有如下幾種:
1).使用Tomcat本身的Session復(fù)制功能
參考http://ajita.iteye.com/blog/1715312(Session復(fù)制的配置)
方案的有點(diǎn)是配置簡(jiǎn)單,缺點(diǎn)是當(dāng)集群數(shù)量較多時(shí),Session復(fù)制的時(shí)間會(huì)比較長(zhǎng),影響響應(yīng)的效率
2).使用第三方來(lái)存放共享Session
目前用的較多的是使用memcached來(lái)管理共享Session,借助于memcached-sesson-manager來(lái)進(jìn)行Tomcat的Session管理
參考http://ajita.iteye.com/blog/1716320(使用MSM管理Tomcat集群session)
3).使用黏性session的策略
對(duì)于會(huì)話要求不太強(qiáng)(不涉及到計(jì)費(fèi),失敗了允許重新請(qǐng)求下等)的場(chǎng)合,同一個(gè)用戶的session可以由nginx或者apache交給同一個(gè)Tomcat來(lái)處理,這就是所謂的session sticky策略,目前應(yīng)用也比較多
參考:http://ajita.iteye.com/blog/1848665(tomcat session sticky)
nginx默認(rèn)不包含session sticky模塊,需要重新編譯才行(windows下我也不知道怎么重新編譯)
優(yōu)點(diǎn)是處理效率高多了,缺點(diǎn)是強(qiáng)會(huì)話要求的場(chǎng)合不合適
3.小結(jié)
以上是實(shí)現(xiàn)集群的要點(diǎn),其中1和2可以組合使用,具體場(chǎng)景具體分析吧~
JVM優(yōu)化
Tomcat本身還是運(yùn)行在JVM上的,通過(guò)對(duì)JVM參數(shù)的調(diào)整我們可以使Tomcat擁有更好的性能。針對(duì)JVM的優(yōu)化目前主要在兩個(gè)方面:
1.內(nèi)存調(diào)優(yōu)
內(nèi)存方式的設(shè)置是在catalina.sh中,調(diào)整一下JAVA_OPTS變量即可,因?yàn)楹竺娴膯?dòng)參數(shù)會(huì)把JAVA_OPTS作為JVM的啟動(dòng)參數(shù)來(lái)處理。
具體設(shè)置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
其各項(xiàng)參數(shù)如下:
-Xmx3550m:設(shè)置JVM最大可用內(nèi)存為3550M。
-Xms3550m:設(shè)置JVM促使內(nèi)存為3550m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-Xmn2g:設(shè)置年輕代大小為2G。整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。
-Xss128k:設(shè)置每個(gè)線程的堆棧大小。JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無(wú)限生成,經(jīng)驗(yàn)值在3000~5000左右。
-XX:NewRatio=4:設(shè)置年輕代(包括Eden和兩個(gè)Survivor區(qū))與年老代的比值(除去持久代)。設(shè)置為4,則年輕代與年老代所占比值為1:4,年輕代占整個(gè)堆棧的1/5
-XX:SurvivorRatio=4:設(shè)置年輕代中Eden區(qū)與Survivor區(qū)的大小比值。設(shè)置為4,則兩個(gè)Survivor區(qū)與一個(gè)Eden區(qū)的比值為2:4,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/6
-XX:MaxPermSize=16m:設(shè)置持久代大小為16m。
-XX:MaxTenuringThreshold=0:設(shè)置垃圾最大年齡。如果設(shè)置為0的話,則年輕代對(duì)象不經(jīng)過(guò)Survivor區(qū),直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個(gè)較大值,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概論。
2.垃圾回收策略調(diào)優(yōu)
垃圾回收的設(shè)置也是在catalina.sh中,調(diào)整JAVA_OPTS變量。
具體設(shè)置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100"
具體的垃圾回收策略及相應(yīng)策略的各項(xiàng)參數(shù)如下:
串行收集器(JDK1.5以前主要的回收方式)
-XX:+UseSerialGC:設(shè)置串行收集器
并行收集器(吞吐量?jī)?yōu)先)
示例:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100
-XX:+UseParallelGC:選擇垃圾收集器為并行收集器。此配置僅對(duì)年輕代有效。即上述配置下,年輕代使用并發(fā)收集,而年老代仍舊使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的線程數(shù),即:同時(shí)多少個(gè)線程一起進(jìn)行垃圾回收。此值最好配置與處理器數(shù)目相等。
-XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集。JDK6.0支持對(duì)年老代并行收集
-XX:MaxGCPauseMillis=100:設(shè)置每次年輕代垃圾回收的最長(zhǎng)時(shí)間,如果無(wú)法滿足此時(shí)間,JVM會(huì)自動(dòng)調(diào)整年輕代大小,以滿足此值。
-XX:+UseAdaptiveSizePolicy:設(shè)置此選項(xiàng)后,并行收集器會(huì)自動(dòng)選擇年輕代區(qū)大小和相應(yīng)的Survivor區(qū)比例,以達(dá)到目標(biāo)系統(tǒng)規(guī)定的最低相應(yīng)時(shí)間或者收集頻率等,此值建議使用并行收集器時(shí),一直打開。
并發(fā)收集器(響應(yīng)時(shí)間優(yōu)先)
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC:設(shè)置年老代為并發(fā)收集。測(cè)試中配置這個(gè)以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此時(shí)年輕代大小最好用-Xmn設(shè)置。
-XX:+UseParNewGC: 設(shè)置年輕代為并行收集。可與CMS收集同時(shí)使用。JDK5.0以上,JVM會(huì)根據(jù)系統(tǒng)配置自行設(shè)置,所以無(wú)需再設(shè)置此值。
-XX:CMSFullGCsBeforeCompaction:由于并發(fā)收集器不對(duì)內(nèi)存空間進(jìn)行壓縮、整理,所以運(yùn)行一段時(shí)間以后會(huì)產(chǎn)生“碎片”,使得運(yùn)行效率降低。此值設(shè)置運(yùn)行多少次GC以后對(duì)內(nèi)存空間進(jìn)行壓縮、整理。
-XX:+UseCMSCompactAtFullCollection:打開對(duì)年老代的壓縮??赡軙?huì)影響性能,但是可以消除碎片
3.小結(jié)
在內(nèi)存設(shè)置中需要做一下權(quán)衡
1)內(nèi)存越大,一般情況下處理的效率也越高,但同時(shí)在做垃圾回收的時(shí)候所需要的時(shí)間也就越長(zhǎng),在這段時(shí)間內(nèi)的處理效率是必然要受影響的。
2)在大多數(shù)的網(wǎng)絡(luò)文章中都推薦 Xmx和Xms設(shè)置為一致,說(shuō)是避免頻繁的回收,這個(gè)在測(cè)試的時(shí)候沒(méi)有看到明顯的效果,內(nèi)存的占用情況基本都是鋸齒狀的效果,所以這個(gè)還要根據(jù)實(shí)際情況來(lái)定。
Server.xml的Connection優(yōu)化
Tomcat的Connector是Tomcat接收HTTP請(qǐng)求的關(guān)鍵模塊,我們可以配置它來(lái)指定IO模式,以及處理通過(guò)這個(gè)Connector接受到的請(qǐng)求的處理線程數(shù)以及其它一些常用的HTTP策略。其主要配置參數(shù)如下:
1.指定使用NIO模型來(lái)接受HTTP請(qǐng)求
protocol="org.apache.coyote.http11.Http11NioProtocol" 指定使用NIO模型來(lái)接受HTTP請(qǐng)求。默認(rèn)是BlockingIO,配置為protocol="HTTP/1.1"
acceptorThreadCount="2" 使用NIO模型時(shí)接收線程的數(shù)目
2.指定使用線程池來(lái)處理HTTP請(qǐng)求
首先要配置一個(gè)線程池來(lái)處理請(qǐng)求(與Connector是平級(jí)的,多個(gè)Connector可以使用同一個(gè)線程池來(lái)處理請(qǐng)求)
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>
<Connector port="8080"
executor="tomcatThreadPool" 指定使用的線程池
3.指定BlockingIO模式下的處理線程數(shù)目
maxThreads="150"http://Tomcat使用線程來(lái)處理接收的每個(gè)請(qǐng)求。這個(gè)值表示Tomcat可創(chuàng)建的最大的線程數(shù)。默認(rèn)值200??梢愿鶕?jù)機(jī)器的時(shí)期性能和內(nèi)存大小調(diào)整,一般可以在400-500。最大可以在800左右。
minSpareThreads="25"---Tomcat初始化時(shí)創(chuàng)建的線程數(shù)。默認(rèn)值4。如果當(dāng)前沒(méi)有空閑線程,且沒(méi)有超過(guò)maxThreads,一次性創(chuàng)建的空閑線程數(shù)量。Tomcat初始化時(shí)創(chuàng)建的線程數(shù)量也由此值設(shè)置。
maxSpareThreads="75"--一旦創(chuàng)建的線程超過(guò)這個(gè)值,Tomcat就會(huì)關(guān)閉不再需要的socket線程。默認(rèn)值50。一旦創(chuàng)建的線程超過(guò)此數(shù)值,Tomcat會(huì)關(guān)閉不再需要的線程。線程數(shù)可以大致上用 “同時(shí)在線人數(shù)*每秒用戶操作次數(shù)*系統(tǒng)平均操作時(shí)間” 來(lái)計(jì)算。
acceptCount="100"----指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),超過(guò)這個(gè)數(shù)的請(qǐng)求將不予處理。默認(rèn)值10。如果當(dāng)前可用線程數(shù)為0,則將請(qǐng)求放入處理隊(duì)列中。這個(gè)值限定了請(qǐng)求隊(duì)列的大小,超過(guò)這個(gè)數(shù)值的請(qǐng)求將不予處理。
connectionTimeout="20000" --網(wǎng)絡(luò)連接超時(shí),默認(rèn)值20000,單位:毫秒。設(shè)置為0表示永不超時(shí),這樣設(shè)置有隱患的。通常可設(shè)置為30000毫秒。
4.其它常用設(shè)置
maxHttpHeaderSize="8192" http請(qǐng)求頭信息的最大程度,超過(guò)此長(zhǎng)度的部分不予處理。一般8K。
URIEncoding="UTF-8" 指定Tomcat容器的URL編碼格式。
disableUploadTimeout="true" 上傳時(shí)是否使用超時(shí)機(jī)制
enableLookups="false"--是否反查域名,默認(rèn)值為true。為了提高處理能力,應(yīng)設(shè)置為false
compression="on" 打開壓縮功能
compressionMinSize="10240" 啟用壓縮的輸出內(nèi)容大小,默認(rèn)為2KB
noCompressionUserAgents="gozilla, traviata" 對(duì)于以下的瀏覽器,不啟用壓縮
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮
5.小結(jié)
關(guān)于Tomcat的Nio和ThreadPool,本身的引入就提高了處理的復(fù)雜性,所以對(duì)于效率的提高有多少,需要實(shí)際驗(yàn)證一下。
6.配置示例
<Connector port="8080"
redirectPort="8443"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
connectionTimeout="20000"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
URIEncoding="UTF-8"
disableUploadTimeout="true"
enableLookups="false"
compression="on"
compressionMinSize="10240"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain">
...
</Connector>
管理AJP端口
AJP是為 Tomcat 與 HTTP 服務(wù)器之間通信而定制的協(xié)議,能提供較高的通信速度和效率。如果tomcat前端放的是apache的時(shí)候,會(huì)使用到AJP這個(gè)連接器。由于我們公司前端是由nginx做的反向代理,因此不使用此連接器,因此需要注銷掉該連接器。
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
默認(rèn) Tomcat 是開啟了對(duì)war包的熱部署的。為了防止被植入木馬等惡意程序,因此我們要關(guān)閉自動(dòng)部署。
修改實(shí)例:
<Host name="localhost" appBase="" unpackWARs="false" autoDeploy="false">
摘要: 最新的版本可以在這里獲取,目前下載的最新版本是5.08,更新于2016-02-03。在這里可以找到更多的說(shuō)明。
下載好后,server端分為兩個(gè)部分,一個(gè)是tracker,一個(gè)是storage。顧名思義,前者調(diào)度管理,負(fù)載均衡,后者則是實(shí)際的存儲(chǔ)節(jié)點(diǎn)。兩個(gè)都能做成集群,以防止單點(diǎn)故障。以前的4.x版本依賴libevent,現(xiàn)在不需要了,只需要libfastcommon。安裝方法如下:
1....
閱讀全文
摘要: 1.第一步需要安裝PPTP,以用來(lái)提供VPN服務(wù).
?
1
sudo apt-get install pptpd
...
閱讀全文
1.# rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
3.配置pptp.首先我們要編輯/etc/pptpd.conf文件:
#vim /etc/pptpd.conf
找到”locapip”和”remoteip”這兩個(gè)配置項(xiàng),將前面的”;”注釋符去掉,更改為你期望的IP段值.localip表示服務(wù)器的IP,remoteip表示分配給客戶端的IP地址,可以設(shè)置為區(qū)間.這里我們使用pptp默認(rèn)的配置:
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
注意,這里的IP段設(shè)置,將直接影響后面的iptables規(guī)則添加命令.請(qǐng)注意匹配的正確性,如果你嫌麻煩,建議就用本文的配置,就可以一直復(fù)制命令和文本使用了.
4.接下來(lái)我們?cè)倬庉?etc/ppp/options.pptpd文件,為VPN添加Google DNS:
#vim /etc/ppp/options.pptpd
在末尾添加下面兩行:
ms-dns 8.8.8.8
ms-dns 8.8.4.4
5、設(shè)置pptp VPN賬號(hào)密碼.我們需要編輯/etc/ppp/chap-secrets這個(gè)文件:
#vim /etc/ppp/chap-secrets
在這個(gè)文件里面,按照”用戶名 pptpd 密碼 *”的形式編寫,一行一個(gè)賬號(hào)和密碼.比如添加用戶名為test,密碼為1234的用戶,則編輯如下內(nèi)容:
test pptpd 1234 *
6、修改內(nèi)核設(shè)置,使其支持轉(zhuǎn)發(fā).編輯/etc/sysctl.conf文件:
#vim /etc/sysctl.conf
將”net.ipv4.ip_forward”改為1,變成下面的形式.
net.ipv4.ip_forward=1
保存退出,并執(zhí)行下面的命令來(lái)生效它:
#sysctl -p
7、添加iptables轉(zhuǎn)發(fā)規(guī)則.經(jīng)過(guò)前面的6個(gè)步驟,我們的VPN已經(jīng)可以撥號(hào)了,但是還不能訪問(wèn)任何網(wǎng)頁(yè).最后一步就是添加iptables轉(zhuǎn)發(fā)規(guī)則了,輸入下面的指令:
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
需要注意的是,這個(gè)指令中的”192.168.0.0/24″是根據(jù)之前的配置文件中的”localip”網(wǎng)段來(lái)改變的,比如你設(shè)置的”10.0.0.1″網(wǎng)段,則應(yīng)該改為”10.0.0.0/24″.此外還有一點(diǎn)需要注意的是eth0,如果你的外網(wǎng)網(wǎng)卡不是eth0,而是eth1(比如SoftLayer的服務(wù)器就是這樣的情況),那么請(qǐng)記得將eth0也更改為對(duì)應(yīng)的網(wǎng)卡編號(hào),不然是上不了網(wǎng)的.
然后我們輸入下面的指令讓iptables保存我們剛才的轉(zhuǎn)發(fā)規(guī)則,以便重啟系統(tǒng)后不需要再次添加:
#/etc/init.d/iptables save
然后我們重啟iptables:
#/etc/init.d/iptables restart
8、重啟pptp服務(wù).輸入下面的指令重啟pptp:
#/etc/init.d/pptpd restart
現(xiàn)在你已經(jīng)可以連接自己的VPN并瀏覽網(wǎng)頁(yè)了.不過(guò)我們還需要做最后的一步.
9、設(shè)置開機(jī)自動(dòng)運(yùn)行服務(wù).我們最后一步是將pptp和iptables設(shè)置為開機(jī)自動(dòng)運(yùn)行,這樣就不需要每次重啟服務(wù)器后手動(dòng)啟動(dòng)服務(wù)了,當(dāng)然你不需要自動(dòng)啟動(dòng)服務(wù)的話可以忽略這一步,輸入指令:
#chkconfig pptpd on
#chkconfig iptables on
這樣就大功告成了,趕快到Windows下建立一個(gè)VPN連接,IP填寫自己的服務(wù)器IP,用戶名和密碼填寫自己設(shè)置好的用戶名和密碼,點(diǎn)擊”連接”,成功后就可以使用服務(wù)器去瀏覽網(wǎng)頁(yè)啦.
備注:
多ip服務(wù)器轉(zhuǎn)發(fā)指定規(guī)則
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -j SNAT --to-source 192.168.8.1
or
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -j SNAT --to-source 服務(wù)器外網(wǎng)ip
如果iphone之類的設(shè)備能連上,訪問(wèn)網(wǎng)頁(yè)或者youtube特別慢,需要做如下修改:
vi /etc/ppp/ip-up
增加一行
/sbin/ifconfig $1 mtu 1400
或者修改iptables規(guī)則
iptables -A FORWARD -p tcp --syn -s 192.168.8.0/24 -j TCPMSS --set-mss 1356
1356的值可能需要自己調(diào)整,調(diào)節(jié)到能保證網(wǎng)絡(luò)正常使用情況下的最大值
摘要: 關(guān)于IP Tables在初始化設(shè)置系統(tǒng)后,為了讓系統(tǒng)更安全,Ubuntu把Iptabls作為發(fā)行版的默認(rèn)防火墻。起初,盡管Ubuntu防火墻已經(jīng)被配置了,但是它設(shè)置為通過(guò)一個(gè)虛擬主機(jī)允許所有的進(jìn)入與流出流量。要打開服務(wù)器上某些更強(qiáng)的保護(hù)功能,我們需要在IP Table山增加一些基礎(chǔ)的規(guī)則。IP Table 規(guī)則來(lái)自于一系列可以組合起來(lái)創(chuàng)建各自的特定的處理方法的選項(xiàng)。每一個(gè)通過(guò)防火墻的包被所有的規(guī)則...
閱讀全文
我有一個(gè)
阿里云推薦碼,分享給大家免費(fèi)使用,購(gòu)買云服務(wù)器ECS或云數(shù)據(jù)庫(kù)RDS可享受原價(jià)優(yōu)惠,拿走不謝。
馬上可享受優(yōu)惠,購(gòu)買阿里云主機(jī)馬上給你省錢!

我有幾張
阿里云幸運(yùn)券分享給你,用券購(gòu)買或者升級(jí)阿里云相應(yīng)產(chǎn)品會(huì)有
特惠驚喜哦!把想要買的產(chǎn)品的幸運(yùn)券都領(lǐng)走吧!快下手,馬上就要搶光了。
安裝 MySQL 5 數(shù)據(jù)庫(kù)
安裝 MySQL 運(yùn)行命令:
sudo
apt-get install mysql-server mysql-client
將mysql的datadir從默認(rèn)的/var/lib/mysql 移到/app/data/mysql下,操作如下:
1.修改了/etc/mysql/my.cnf,改為:datadir = /app/data/mysql
2.cp -a /var/lib/mysql /app/data/
3./etc/init.d/mysql start
如果出現(xiàn)系統(tǒng)報(bào)錯(cuò),無(wú)法啟動(dòng)mysql,日志顯示為:Can't find file: "./mysql/plugin.frm'(errno:13)
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
修改系統(tǒng)的chroot,需要修改/etc/apparmor.d下的相關(guān)文件,這里以mysql為例,需要修改:usr.sbin.mysqld和abstractions/mysql兩個(gè)文件。
1.修改usr.sbin.mysqld里面的兩行內(nèi)容:/var/lib/mysql/ r,改為:/app/data/mysql/ r,/var/lib/mysql/** rwk,改為:/app/data/mysql/** rwk,
2.修改abstractions/mysql中一行:/var/lib/mysql/mysql.sock rw,改為:/app/data/mysql/mysql.sock rw,
3.重新加載apparmor服務(wù):/etc/init.d/apparmor reload
安裝 Nginx
在安裝 Nginx 之前,如果你已經(jīng)安裝 Apache2 先刪除在安裝 nginx:
service apache2 stop
update-rc.d -f apache2 remove
sudo apt-get remove apache2
sudo
apt-get install nginx
安裝 PHP5
我們必須通過(guò) PHP-FPM 才能讓PHP5正常工作,安裝命令:
sudo
apt-get install php5-fpm
php-fpm是一個(gè)守護(hù)進(jìn)程。
安裝mysql和GD擴(kuò)展
sudo apt-get install php5-gd libapache2-mod-auth-mysql php5-mysql openssl libssl-dev
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
安裝 JDK8
可以通過(guò)訪問(wèn)Oracle官網(wǎng)下載,或者直接通過(guò)命令行下載。
lxh@ubuntu:~$ wget -c http://download.oracle.com/otn-pub/java/jdk/8u11-b12/jdk-8u25-linux-x64.tar.gz
解壓安裝
lxh@ubuntu:~$ mkdir -p /usr/lib/jvm
lxh@ubuntu:~$ sudo mv jdk-8u25-linux-x64.tar.gz /usr/lib/jvm
lxh@ubuntu:~$ cd /usr/lib/jvm
lxh@ubuntu:~$ sudo tar xzvf jdk-8u25-linux-x64.tar.gz
在系統(tǒng)中添加環(huán)境變量,主要是PATH、CLASSPATH和JAVA_HOME。
lxh@ubuntu:~$ sudo vim ~/.profile
在文件最后加入
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25/
export JRE_HOME=/usr/lib/jvm/jdk1.8.0_25/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
保存退出,并通過(guò)命令使腳本生效:
lxh@ubuntu:~$ $source ~/.profile
配置默認(rèn)JDK版本
在有的系統(tǒng)中會(huì)預(yù)裝OpenJDK,系統(tǒng)默認(rèn)使用的是這個(gè),而不是剛才裝的。所以這一步是通知系統(tǒng)使用Oracle的JDK,非OpenJDK。
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_25/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_25/bin/javac 300
sudo update-alternatives --config java
因?yàn)槲沂窃谔摂M機(jī)中安裝的Ubuntu 14.04,默認(rèn)不安裝OpenJDK,所以沒(méi)有需要選擇的JDK版本。如果是在物理機(jī)上安裝的Ubuntu版本,會(huì)出現(xiàn)幾個(gè)候選項(xiàng),可用于替換 java (提供 /usr/bin/java)。
====================================
編譯安裝nginx
1. 下載最新版nginx
2.解壓
3. 安裝
$ ./configure #檢查編譯前置條件
$ make #編譯
$ sudo make install #使用sudo權(quán)限進(jìn)行安裝
安裝后路徑在 /usr/local/
啟動(dòng)nginx
/usr/local/nginx/sbin/nginx
1)使用在 /etc/init.d/ 目錄下創(chuàng)建名為 nginx 文件,注意沒(méi)有后綴名,將以下內(nèi)容復(fù)制到該文件中(感謝提供腳本的兄弟)。
1 #! /bin/sh
2 #用來(lái)將Nginx注冊(cè)為系統(tǒng)服務(wù)的腳本
3 #Author CplusHua
4 #http://www.219.me
5 #chkconfig: - 85 15
6 set -e
7 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
8 DESC="Nginx Daemon"
9 NAME=nginx
10 DAEMON=/usr/local/nginx/sbin/$NAME
11 SCRIPTNAME=/etc/init.d/$NAME
12 #守護(hù)進(jìn)程不存在就退出
13 test -x $DAEMON ||exit 0
14 d_start(){
15 $DAEMON ||echo -n "aready running"
16 }
17 d_stop(){
18 $DAEMON -s quit || echo -n "not running"
19 }
20 d_reload(){
21 $DAEMON -s reload || echo -n "could not reload"
22 }
23 case "$1" in
24 start)
25 echo -n "Starting $DESC: $NAME"
26 d_start
27 echo "."
28 ;;
29 stop)
30 echo -n "Stopping $DESC: $NAME"
31 d_stop
32 echo "."
33 ;;
34 reload)
35 echo -n "Reloading $DESC: configurationg
.."
36 d_reload
37 echo "reloaded."
38 ;;
39 restart)
40 echo -n "Restarting $DESC: $NAME"
41 d_stop
42 sleep 3
43 d_start
44 echo "."
45 ;;
46 *)
47 echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
48 exit 3
49 ;;
50 esac
51
52 exit 0
2)添加權(quán)限
$ sudo chmod +x nginx
3)服務(wù)方式啟動(dòng) 如果配置服務(wù)前已啟動(dòng),執(zhí)行以下命令停止Nginx。
$ sudo service nginx stop
4)啟動(dòng)Nginx
$ sudo service nginx start
pastingnginx出現(xiàn)connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied)的錯(cuò)誤
處理方式是:編輯/etc/php5/fpm/pool.d/www.conf文件,
將以下的注釋去掉:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
然后重啟php5-fpm
$ sudo service php5-fpm restart
Ubuntu 14.04快速搭建SVN服務(wù)器及日常使用
SVN相關(guān)命令了解
svn:命令行客戶端
svnadmin:用來(lái)創(chuàng)建、調(diào)整或修復(fù)版本庫(kù)的工具
svnserve:svn服務(wù)程序
svndumpfilter:過(guò)濾svn版本庫(kù)轉(zhuǎn)儲(chǔ)數(shù)據(jù)流的工具
svnsync:svn數(shù)據(jù)同步工具,實(shí)現(xiàn)另外存一份相同的
svnlook:用來(lái)查看辦本科中不同的修訂版和事務(wù)
直接安裝
# apt-get install subversion
創(chuàng)建版本庫(kù)
# sudo mkdir /app/svn
# sudo svnadmin create /app/svn/prj
配置版本庫(kù)
# sudo vi svnserve.conf #將以下參數(shù)去掉注釋
[general]
anon-access = none #匿名訪問(wèn)權(quán)限,默認(rèn)read,none為不允許訪問(wèn)
auth-access = write #認(rèn)證用戶權(quán)限
password-db = passwd #用戶信息存放文件,默認(rèn)在版本庫(kù)/conf下面,也可以絕對(duì)路徑指定文件位置
authz-db = authz
# sudo vi passwd #格式是用戶名=密碼,采用明文密碼
[users]
xiaoming = 123
zhangsan = 123
lisi = 123
# sudo vi authz
[groups] #定義組的用戶
manager = xiaoming
core_dev = zhangsan,lisi
[repos:/] #以根目錄起始的repos版本庫(kù)manager組為讀寫權(quán)限
@manager = rw
[repos:/media] #core_dev對(duì)repos版本庫(kù)下media目錄為讀寫權(quán)限
@core_dev = rw
啟動(dòng)svn服務(wù)
# sudo svnserve -d -r /app/svn
# 查看是否啟動(dòng)成功,可看的監(jiān)聽3690端口
# sudo netstat -antp |grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28967/svnserve
# 如果想關(guān)閉服務(wù),可使用pkill svnserve
訪問(wèn)svn
# 訪問(wèn)repos版本庫(kù)地址
svn://192.168.1.100/prj
備份與恢復(fù)
svnadmin dump備份
# 完整備份
svnadmin dump /app/svn/prj > YYmmdd_fully_backup.svn
# 完整壓縮備份
svnadmin dump /app/svn/prj | gzip > YYmmdd_fully_backup.gz
# 備份恢復(fù)
svnadmin load /app/svn/prj < YYmmdd_fully_backup.svn
zcat YYmmdd_fully_backup.gz | svnadmin load repos
### 增量備份 ###
# 先完整備份
svnadmin dump /app/svn/prj -r 0:100 > YYmmdd_incremental_backup.svn
# 再增量備份
svnadmin dump /app/svn/prj -r 101:200 --incremental > YYmmdd_incremental_backup.svn
svnadmin hotcopy備份
# 備份
svnadmin hotcopy /app/svn/prj YYmmdd_fully_backup --clean-logs
# 恢復(fù)
svnadmin hotcopy YYmmdd_fully_backup /app/svn/prj
Tomcat 內(nèi)存優(yōu)化
Linux下修改JVM內(nèi)存大小
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引號(hào)要帶上,紅色的為新添加的.
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-server -Xms512M -Xmx512M -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:PermSize=64M -XX:MaxPermSize=128m"
cygwin=false
我本身是 Java 工程師出身,寫代碼至今已超過(guò) 15 年,創(chuàng)業(yè)也超過(guò) 10 年,曾經(jīng)外包過(guò)很多項(xiàng)目給別人,也接過(guò)很多外包的項(xiàng)目,現(xiàn)在不接了,只經(jīng)營(yíng)電子報(bào)發(fā)送平臺(tái),在二年內(nèi)累積超過(guò) 5000 家企業(yè)用戶使用。身處在創(chuàng)業(yè)圈,只要有創(chuàng)業(yè)朋友主動(dòng)問(wèn)過(guò)我的,我都會(huì)和他說(shuō)如果你能不接就不要接 ( 當(dāng)然我也知道,如果不是為了活下去,誰(shuí)愿意接 ? ),因?yàn)檫@其中有太多陷阱,我分享如下給大家作個(gè)參考: 因?yàn)槟銓懘a很快 通常會(huì)出來(lái)接私活的工程師大多是有些年資,也會(huì)有自己擅常的工具及 library,所以往往可以很快完成主管交代的工作,會(huì)認(rèn)為客戶的需求只要能在很短的時(shí)間內(nèi)完成,這個(gè)項(xiàng)目就賺錢了。 【BUT】項(xiàng)目完成的快慢取決于客戶的心情,只要他心情不好,就慢慢拖吧。你以為你的 Code 可以 reuse,最后你才發(fā)現(xiàn)真正被 reuse 的是你的肝。 因?yàn)槟銓懘a很快,所以只要客戶比價(jià)、殺價(jià)、壓你結(jié)案時(shí)間,你就會(huì)心里想一下:嗯,只要我努力趕一下,應(yīng)該沒(méi)問(wèn)題。 【BUT】,無(wú)形中你就犧牲了你的利潤(rùn)空間,只有賺到微利,你知道工程師估完成時(shí)間的準(zhǔn)確率有多少嗎 ? 準(zhǔn)確率有多高,賺到微利的機(jī)率就有多高。 因?yàn)槟憧梢再嵜磕甑木S護(hù)費(fèi) 接私活是這樣,只要你接了,之后的維護(hù)客戶也很難不找你維護(hù),只要慢慢的累積,每年都會(huì)有可觀的維護(hù)費(fèi)可以賺。 【BUT】,你知道大部份臺(tái)灣公司有個(gè)不成文規(guī)定,同一套系統(tǒng)的維護(hù)費(fèi)預(yù)算是每年遞減的,客戶會(huì)想:系統(tǒng)每年調(diào)整也該穩(wěn)定了吧,都穩(wěn)定了你也沒(méi)作什么事為什么還要拿這么多錢 ? 接下來(lái),你可能會(huì)想說(shuō)如果客戶想加新功能第一個(gè)一定先找你,試想一下,叫你照著三年前自己寫的代碼架構(gòu)來(lái)新增功能,如果沒(méi)有吐血,大概代表這三年你也沒(méi)什么長(zhǎng)進(jìn)。不接總行吧 ? 偏偏你就這么有責(zé)任感,你不接客戶也只能打掉重來(lái)請(qǐng)別人重新作一套,你忍心嗎 ? 所以你覺(jué)得這維護(hù)費(fèi)好賺嗎? 因?yàn)槟愫苣転榭蛻糁?/strong>
你因?yàn)楹転楣局耄3T陂_發(fā)過(guò)程中發(fā)現(xiàn)缺了什么或是主管規(guī)劃錯(cuò)了,你會(huì)主動(dòng)的加班把這些缺的部份補(bǔ)上調(diào)好,公司對(duì)你贊譽(yù)有加,如果接私活的時(shí)候以這樣的態(tài)度來(lái)對(duì)待自己的客戶,那雙方合作的感覺(jué)一定很好。
【BUT】,你的客戶當(dāng)然好啊,因?yàn)槟阒鲃?dòng)幫他加功能把系統(tǒng)調(diào)的更好,都不用再花錢啊。加錢 ? 合約當(dāng)初就簽好了,如何告訴客戶要加錢 ? 況且這是你自己主動(dòng)要加功能的??梢圆患訂?? 可以啊,但你可以忍受你的作品明明可以更好的而不讓它更好嗎 ? 如果是當(dāng)初規(guī)劃就錯(cuò)了,不調(diào)整能驗(yàn)收嗎 ?
因?yàn)槟阒揽蛻粢裁?/strong>
因?yàn)樵诠緯r(shí)主管常常也語(yǔ)無(wú)倫次,但你總是能分析出主管要的是什么,你也都能完成它,所以接私活時(shí)就算對(duì)方不懂技術(shù),你也能完成他需要的功能。
【BUT】,你知道客戶要的是什么嗎 ? 不,你不知道,因?yàn)榻^大部份客戶自己要什么都不知道,而且你知道客戶的上面還有老板嗎 ? 你知道客戶的老板要的是什么嗎 ? 不,你不會(huì)知道,因?yàn)檫B他老板自己都不知道,這是最可怕的嗎 ? 不,還有更可怕的,他們會(huì)告訴你他們知道想要的功能是什么,但你就是無(wú)法作出他們想要的。
因?yàn)槟愫苣芤?guī)劃
你是個(gè)邏輯觀念很好的人,只要主管告訴你他的需求,你可以很快畫出系統(tǒng)架構(gòu)圖、代碼架構(gòu)圖甚至是資料庫(kù)架構(gòu)圖,準(zhǔn)確率非常高,所以接私活的時(shí)候只要客戶告訴你需求,你很快腦中就會(huì)出現(xiàn)各種架構(gòu)圖雛形。
【BUT】,你知道規(guī)格是誰(shuí)開的嗎 ? 對(duì),是客戶開的,因?yàn)樗婚_你就無(wú)法報(bào)價(jià),如果他要你開,你也怕開完后報(bào)價(jià)他不接受就等于作白工了。那你覺(jué)得客戶的邏輯會(huì)有你好嗎 ? 所以通常你要作的是先了解客戶的邏輯,然后找出矛盾的地方,然后提出更好的解決方桉,這一段來(lái)來(lái)回回就要花不少時(shí)間了,喔對(duì),這一段通常是收不到錢的,客戶會(huì)覺(jué)得你要接我的項(xiàng)目,你本來(lái)就要先來(lái)了解我的需求。
因?yàn)槟阌袌F(tuán)隊(duì)
因?yàn)槟阍跇I(yè)界有一定的人脈了,自己會(huì)寫代碼,再找個(gè)業(yè)務(wù)高手、美編高手,這樣最小單位就好,大家可以分工,這樣接私活的問(wèn)題就變少、進(jìn)行更順利。
【BUT】,因?yàn)槟阌腥齻€(gè)人,所以你只能接可以養(yǎng)活 >= 3 個(gè)人的項(xiàng)目,這種項(xiàng)目通常會(huì)稍大一點(diǎn),因?yàn)橐陨纤龇N種原因會(huì)造成結(jié)案很慢,如果不結(jié)案人卡在這個(gè)項(xiàng)目拿不到錢,新的項(xiàng)目接不了,怎么辦 ? 對(duì),加人,所以你的團(tuán)隊(duì)變成了 4 個(gè)人,接下來(lái)你只能接可以養(yǎng)活 >= 4 個(gè)人的項(xiàng)目,這個(gè)時(shí)候如果來(lái)了個(gè)大項(xiàng)目呢 ? 對(duì),你會(huì)陷入無(wú)限迴圈,直到你再也接不到更大的項(xiàng)目。
因?yàn)槟阆胗每蛻舻捻?xiàng)目來(lái)練兵
正如阿甘說(shuō)的:人生就像一盒巧克力,你永遠(yuǎn)不知道下一個(gè)會(huì)是什么口味。所以你永遠(yuǎn)不知道下一個(gè)項(xiàng)目在那里,但當(dāng)你開始有了團(tuán)隊(duì),每個(gè)月都要付薪水時(shí),這時(shí)來(lái)一個(gè)不大不小的項(xiàng)目,反正也不知道下一個(gè)項(xiàng)目何時(shí)進(jìn)來(lái),這個(gè)剛好可以付團(tuán)隊(duì)薪水又可以拿來(lái)練兵,這也蠻好的。
【BUT】,接私活有個(gè)特性是你接了這個(gè)項(xiàng)目就會(huì)降低接下個(gè)項(xiàng)目的能力,因?yàn)槿肆皶r(shí)間總是有限,如果你因?yàn)榻恿艘粋€(gè)小項(xiàng)目造成大項(xiàng)目沒(méi)人力接,你說(shuō)大家氣不氣 ? 不幸這個(gè)小項(xiàng)目的業(yè)主特別麻煩 (基于上述原因,你知道這機(jī)率還不小),那你磨練團(tuán)隊(duì)的可不是他們的技術(shù),你磨練的可是大家的身心靈啊,慢慢的就會(huì)有一股將相無(wú)能,累死三軍的聲音傳出來(lái)了 … 你為何不自己開發(fā)個(gè)小產(chǎn)品來(lái)練兵呢 ?
因?yàn)槟銘?yīng)對(duì)客戶有一套
你的個(gè)性很好,以前在公司的時(shí)候都可以和廠商或客戶相處很好,可以接的接,不可以接的也會(huì)擋,如果出來(lái)接私活和客戶應(yīng)對(duì)對(duì)不會(huì)有問(wèn)題。
【BUT】,客戶百百款,你對(duì)客戶有一套,客戶對(duì)你可是有好幾套,他可以議價(jià)、殺價(jià)、壓時(shí)間、加功能、拖驗(yàn)收、會(huì)計(jì)不見、老板出國(guó) …..,最后怪你為何拖這么久再扣你一筆錢,說(shuō)了一句:你們不是專業(yè)的嗎 ? 開發(fā)階段你們是朋友,驗(yàn)收階段你們就變甲乙雙方。
因?yàn)槟銖膩?lái)不缺客戶
你從來(lái)不需要自己去陌生開發(fā),客戶都是透過(guò)朋友介紹或是客戶轉(zhuǎn)介紹來(lái)的,這比一般公司好太多了,別人想要客戶都還沒(méi)有呢。
【BUT】,你有沒(méi)有想過(guò),你有上面所述種種優(yōu)點(diǎn),重點(diǎn)是你還比別人便宜,別人不找你,我都想找你了。所以你賺到錢了嗎 ?
因?yàn)槟愣加泻灪霞s
為了避免以上不必要的問(wèn)題,每個(gè)項(xiàng)目你一定都會(huì)簽合約保護(hù)雙方,凡事照合約走就沒(méi)問(wèn)題了。
【BUT】,對(duì)方有法務(wù)你有嗎 ? 對(duì)方有錢你有嗎 ? 真正要打官司你打的起嗎 ? 你真的有把握合作過(guò)程中你完全沒(méi)錯(cuò) ? 合約里有辦法規(guī)范到所有的功能細(xì)節(jié)、操作流程 ? 合約訂了一大本,你客戶會(huì)和你簽 ? 所以,你真的能照合約走嗎 ?
你最近一次開心寫代碼是什么時(shí)候
在我和你有一樣能力的時(shí)候,我曾經(jīng)說(shuō)過(guò)一句話:我希望我死前的最后一個(gè)動(dòng)作是按下 【Enter】,我寫代碼的動(dòng)力不是賺錢 ( 當(dāng)然賺錢很重要,但如果只是賺錢,我大可去作直銷、賣保險(xiǎn)、到大公司上班 … ),精準(zhǔn)來(lái)說(shuō)不只是賺錢,我的動(dòng)力來(lái)源來(lái)自于我寫出來(lái)的代碼可以讓非常多人使用,真正幫助到很多人,而且很多人都說(shuō)好。( 相信我,如果你真的作到這一點(diǎn),其實(shí)你也賺到錢了 )
但自從我接私活之后,我最多只能幫助到我有限的客戶,說(shuō)精準(zhǔn)一點(diǎn)也許就只有真正使用系統(tǒng)的某些人,也只有這些人會(huì)說(shuō)我好,其它人也只會(huì)認(rèn)為那是你該作的,但只要最后驗(yàn)收時(shí)他離職了、他生氣了、一切努力就沒(méi)了。所以那時(shí)我只有二個(gè)時(shí)候點(diǎn)是開心的,一個(gè)是收到訂金、另一個(gè)是收到尾款,中間一大段時(shí)間是痛苦的,當(dāng)同時(shí)多個(gè)項(xiàng)目進(jìn)行,其實(shí)所有時(shí)間都是痛苦的。我還記得我那時(shí)常說(shuō)的一句話:收到你冷冷的支票,我的心就覺(jué)得暖暖的。
當(dāng)然一定有人接私活接的很好,只是別人的成功很難複制,但別人的失敗可以避免,如果你能避掉我以上所說(shuō)的陷阱也無(wú)法保證你能成功,因?yàn)檫@也只是冰山一角,我已經(jīng)離開接私活的狀態(tài)很久,很多事忘了也不想去想,只是希望你在決定接私活前,仔細(xì)想一下,你真的只有接私活這個(gè)選項(xiàng)嗎 ? 如果可以,我會(huì)建議你應(yīng)該要開發(fā)自己的產(chǎn)品及服務(wù)。
來(lái)自:電子豹博客
fn:contains 判斷字符串是否包含另外一個(gè)字符串 <c:if test="${fn:contains(name, searchString)}">
fn:containsIgnoreCase 判斷字符串是否包含另外一個(gè)字符串(大小寫無(wú)關(guān)) <c:if test="${fn:containsIgnoreCase(name, searchString)}">
fn:endsWith 判斷字符串是否以另外字符串結(jié)束 <c:if test="${fn:endsWith(filename, ".txt")}">
fn:escapeXml 把一些字符轉(zhuǎn)成XML表示,例如 <字符應(yīng)該轉(zhuǎn)為< ${fn:escapeXml(param:info)}
fn:indexOf 子字符串在母字符串中出現(xiàn)的位置 ${fn:indexOf(name, "-")}
fn:join 將數(shù)組中的數(shù)據(jù)聯(lián)合成一個(gè)新字符串,并使用指定字符格開 ${fn:join(array, ";")}
fn:length 獲取字符串的長(zhǎng)度,或者數(shù)組的大小 ${fn:length(shoppingCart.products)}
fn:replace 替換字符串中指定的字符 ${fn:replace(text, "-", "?")}
fn:split 把字符串按照指定字符切分 ${fn:split(customerNames, ";")}
fn:startsWith 判斷字符串是否以某個(gè)子串開始 <c:if test="${fn:startsWith(product.id, "100-")}">
fn:substring 獲取子串 ${fn:substring(zip, 6, -1)}
fn:substringAfter 獲取從某個(gè)字符所在位置開始的子串 ${fn:substringAfter(zip, "-")}
fn:substringBefore 獲取從開始到某個(gè)字符所在位置的子串 ${fn:substringBefore(zip, "-")}
fn:toLowerCase 轉(zhuǎn)為小寫 ${fn.toLowerCase(product.name)}
fn:toUpperCase 轉(zhuǎn)為大寫字符 ${fn.UpperCase(product.name)}
fn:trim 去除字符串前后的空格 ${fn.trim(name)}
函數(shù)
描述
fn:contains(string, substring)
如果參數(shù)string中包含參數(shù)substring,返回true
fn:containsIgnoreCase(string, substring)
如果參數(shù)string中包含參數(shù)substring(忽略大小寫),返回true
fn:endsWith(string, suffix)
如果參數(shù) string 以參數(shù)suffix結(jié)尾,返回true
fn:escapeXml(string)
將有特殊意義的XML (和HTML)轉(zhuǎn)換為對(duì)應(yīng)的XML character entity code,并返回
fn:indexOf(string, substring)
返回參數(shù)substring在參數(shù)string中第一次出現(xiàn)的位置
fn:join(array, separator)
將一個(gè)給定的數(shù)組array用給定的間隔符separator串在一起,組成一個(gè)新的字符串并返回。
fn:length(item)
返回參數(shù)item中包含元素的數(shù)量。參數(shù)Item類型是數(shù)組、collection或者String。如果是String類型,返回值是String中的字符數(shù)。
fn:replace(string, before, after)
返回一個(gè)String對(duì)象。用參數(shù)after字符串替換參數(shù)string中所有出現(xiàn)參數(shù)before字符串的地方,并返回替換后的結(jié)果
fn:split(string, separator)
返回一個(gè)數(shù)組,以參數(shù)separator 為分割符分割參數(shù)string,分割后的每一部分就是數(shù)組的一個(gè)元素
fn:startsWith(string, prefix)
如果參數(shù)string以參數(shù)prefix開頭,返回true
fn:substring(string, begin, end)
返回參數(shù)string部分字符串, 從參數(shù)begin開始到參數(shù)end位置,包括end位置的字符
fn:substringAfter(string, substring)
返回參數(shù)substring在參數(shù)string中后面的那一部分字符串??
fn:substringBefore(string, substring)
返回參數(shù)substring在參數(shù)string中前面的那一部分字符串
fn:toLowerCase(string)
將參數(shù)string所有的字符變?yōu)樾?,并將其返?br style="margin: 0px; padding: 0px; list-style-type: none;" />
fn:toUpperCase(string)
將參數(shù)string所有的字符變?yōu)榇髮?,并將其返?br style="margin: 0px; padding: 0px; list-style-type: none;" />
fn:trim(string)
在jsp中 使用EL表達(dá)式時(shí),不可以使用java提供的功能,比如indexOf()等。
<c:if test="${Boolean.valueOf(requestScope.addresult)==false}">
報(bào)錯(cuò)
The function valueOf must be used with a prefix when a default namespace is not specified
posted @
2014-08-05 15:24 Alpha 閱讀(15589) |
評(píng)論 (0) |
編輯 收藏
公司發(fā)布的SEO專員招聘有一段時(shí)間了,一直沒(méi)有找到合適的人選, 一方面專門從事這塊職業(yè)的人員比較少,另一方面對(duì)這個(gè)職位有一定了解的人也比較少.那么我們所說(shuō)的seo專員是什么樣的一個(gè)職位呢? 今天我們來(lái)探討一下,在網(wǎng)上搜索了一個(gè)相關(guān)資料,找到這么一篇文章:http://seo.aizhan.com/qa/542.html,我們看看文章里面的表述:
其實(shí)seo專員的主要職責(zé)就是執(zhí)行完成SEO主管制定的SEO策略和優(yōu)化目標(biāo)任務(wù),通常需要做大量的內(nèi)容編輯、軟文發(fā)布和外鏈建設(shè)等各種體力活。現(xiàn)在也有很多公司在發(fā)布招聘的時(shí)候也有專門招聘SEO外鏈專員這樣的職位,有一定規(guī)模的網(wǎng)站也會(huì)分為SEO網(wǎng)站優(yōu)化、SEO網(wǎng)站編輯、SEO外鏈專員等這樣的細(xì)分崗位,每個(gè)崗位根據(jù)SEO優(yōu)化工作的側(cè)重點(diǎn)不同,執(zhí)行完成的工作重點(diǎn)也是不一樣的。那么今天我們要講的SEO專員的具體工作是什么?做好這個(gè)職位需要具備什么樣的素質(zhì)?
SEO專員的具體工作,說(shuō)到底核心工作就是研究搜索引擎,完成網(wǎng)站內(nèi)容建設(shè),豐富網(wǎng)站的內(nèi)容,到各大網(wǎng)站平臺(tái)發(fā)布定量合適的外鏈,交換友情鏈接,幫助網(wǎng)站獲得關(guān)鍵詞排名,并做好數(shù)據(jù)分析與跟蹤。
在這篇文章里講述了什么是SEO專員, SEO專員的具體工作,說(shuō)到底核心工作就是研究搜索引擎,完成網(wǎng)站內(nèi)容建設(shè),豐富網(wǎng)站的內(nèi)容,到各大網(wǎng)站平臺(tái)發(fā)布定量合適的外鏈,交換友情鏈接,幫助網(wǎng)站獲得關(guān)鍵詞排名,并做好數(shù)據(jù)分析與跟蹤。 但是要找到一名有耐心,有良好的溝通能力,超強(qiáng)的執(zhí)行力,有比較強(qiáng)的心里承受能力,受得了寂寞的SEO專員卻是一件不容易的事情。
發(fā)布一則房民網(wǎng)SEO專員招聘要求:
任職要求:
1、男女不限,大專以上學(xué)歷,年齡在20-35歲之間;
2、對(duì)互聯(lián)網(wǎng)有濃厚的興趣,熟悉網(wǎng)站的運(yùn)作和推廣的各種方式,能夠根據(jù)公司的需求獨(dú)立策劃網(wǎng)站推廣方案并執(zhí)行;會(huì)熟練打字操作常用辦公軟件;
3、有一定的分析判斷能力,能根據(jù)推廣效果提出調(diào)整建議,具有敏銳的思維和創(chuàng)新能力,思維開闊;
4、工作認(rèn)真、細(xì)致、敬業(yè),有較強(qiáng)的溝通能力和團(tuán)隊(duì)合作精神;
5、1年以上相關(guān)工作經(jīng)歷或精通網(wǎng)站編輯及平面設(shè)計(jì)者或有一定的文字寫作能力者優(yōu)先。
崗位職責(zé):
1、負(fù)責(zé)完成網(wǎng)站內(nèi)容建設(shè),友鏈外鏈建設(shè),關(guān)鍵字優(yōu)化,提高網(wǎng)站排名、搜索引擎收錄量;
2、執(zhí)行在線推廣活動(dòng),收集推廣反饋數(shù)據(jù),不斷改進(jìn)推廣效果;
3、及時(shí)提出網(wǎng)絡(luò)推廣改進(jìn)建議,給出實(shí)際可行的改進(jìn)方案。
快來(lái)加入吧:)
一直從事于開發(fā)與運(yùn)維相關(guān)技術(shù)的研究實(shí)踐,最近在做幾個(gè)房產(chǎn)網(wǎng)分站的SEO優(yōu)化技術(shù)儲(chǔ)備, 緣于長(zhǎng)沙房產(chǎn)網(wǎng)的百度快照陰情不定讓人很蛋疼,于是對(duì)此進(jìn)行了深入的研究,發(fā)現(xiàn)SEO網(wǎng)站優(yōu)化也是一門相當(dāng)有技術(shù)含量的技術(shù)活,涉及的知識(shí)點(diǎn)和技術(shù)面都要廣才能掌握大局,同時(shí)也要調(diào)動(dòng)團(tuán)隊(duì)各環(huán)節(jié),從網(wǎng)站的最初版面功能策劃到頁(yè)面的視覺(jué)設(shè)計(jì)和代碼編寫,再到程序開發(fā)時(shí)的架構(gòu)設(shè)計(jì),最后做內(nèi)容時(shí)的內(nèi)容編排等一系列的問(wèn)題都得考慮到,且都要執(zhí)行到位,否則任何一個(gè)環(huán)節(jié)沒(méi)做好都有可能影響到整個(gè)SEO優(yōu)化的效果.因此,今天開辟一個(gè)新版塊,專門從事SEO優(yōu)化技術(shù)的研究與實(shí)踐.
目前在拿房產(chǎn)網(wǎng)的四個(gè)分站進(jìn)行實(shí)戰(zhàn)研究,希望能從中找到一些答案,這四個(gè)站的主關(guān)鍵詞也是相當(dāng)有競(jìng)爭(zhēng)難度,比如東莞房產(chǎn)網(wǎng)這個(gè)關(guān)鍵詞的收錄量有250多萬(wàn),但是http://dg.fmw.cn/這個(gè)域名的百度收入占有量卻只有兩位數(shù),而比東莞房產(chǎn)網(wǎng)遲了一個(gè)多月上線的昆明房產(chǎn)網(wǎng),這個(gè)站域名是http://km.fmw.cn/,它收錄量都上三位數(shù)了,遠(yuǎn)遠(yuǎn)超過(guò)了東莞房產(chǎn)網(wǎng)的收入量,這讓人更是摸不著頭腦.表現(xiàn)最滿意的是佛山房產(chǎn)網(wǎng),它同樣比東莞房產(chǎn)網(wǎng)上線遲了一個(gè)多月,但是收入量等各方面指數(shù)上升很明顯.同樣的網(wǎng)站架構(gòu),同樣每天都有堅(jiān)持在做內(nèi)容,但是卻有不一樣的表現(xiàn),這是一個(gè)值得研究的課題.
SEO既Search Engine Optimization,翻譯為搜索引擎優(yōu)化,是一種利用技術(shù)手段提升網(wǎng)站在搜索引擎之中的排名的方式,讓搜索引擎更為信任網(wǎng)站,通過(guò)排在搜索引擎的前頁(yè)從而獲得更多的流量。
希望在接下來(lái)的SEO優(yōu)化研究和實(shí)踐工作中能找到這一系列的答案,屆時(shí)房民網(wǎng)與大家一起來(lái)分享.
給大家推薦一處php主機(jī)-wopus主機(jī),專業(yè)的wordpress主機(jī)!還可以省錢購(gòu)買php主機(jī),永久免費(fèi)使用.
購(gòu)買可以用wopus主機(jī)優(yōu)惠碼:alpha, 提交訂單時(shí)手動(dòng)輸入 alpha
或者通過(guò)>>wopus主機(jī)優(yōu)惠碼<<鏈接進(jìn)入直接購(gòu)買就可獲得優(yōu)惠,可以省錢喲. http://idc.wopus.org/?f=alpha
(wopus主機(jī)推介優(yōu)惠碼:alpha 永久有效)!打算買php主機(jī)的朋友請(qǐng)看以下介紹!
他們自己是這樣介紹他們的產(chǎn)品的:
專業(yè)博客主機(jī)服務(wù)商
WopusIDC一直致力于為廣大獨(dú)立博客用戶提供優(yōu)質(zhì)實(shí)惠的專業(yè)博客主機(jī)服務(wù),現(xiàn)已積累有超過(guò)四年的專業(yè)博客主機(jī)服務(wù)經(jīng)驗(yàn),成為眾多獨(dú)立博客們的主機(jī)首選。
國(guó)內(nèi)、國(guó)外主機(jī)任選
從國(guó)外主機(jī)到國(guó)內(nèi)主機(jī),WopusIDC給用戶帶來(lái)多種主機(jī)選擇,打破訪問(wèn)速度的瓶頸,給廣大獨(dú)立博客用戶帶來(lái)更佳的主機(jī)體驗(yàn)。
快速搭建個(gè)性化博客
依托于Wopus平臺(tái)上發(fā)布的數(shù)量眾多的主題、插件以及文章教程,WopusIDC用戶可以簡(jiǎn)單快速的搭建屬于自己的個(gè)性化博客。
買php主機(jī)用 wopus主機(jī)優(yōu)惠碼:alpha , 提交訂單時(shí)手動(dòng)輸入 alpha ,永久免費(fèi)使用,長(zhǎng)期有效.
或 點(diǎn)擊 http://idc.wopus.org/?f=alpha 購(gòu)買主機(jī)立即省錢!
1.首先確認(rèn)服務(wù)器出于安全的狀態(tài),也就是沒(méi)有人能夠任意地連接MySQL數(shù)據(jù)庫(kù)。
因?yàn)樵谥匦略O(shè)置MySQL的root密碼的期間,MySQL數(shù)據(jù)庫(kù)完全出于沒(méi)有密碼保護(hù)的
狀態(tài)下,其他的用戶也可以任意地登錄和修改MySQL的信息。可以采用將MySQL對(duì)
外的端口封閉,并且停止Apache以及所有的用戶進(jìn)程的方法實(shí)現(xiàn)服務(wù)器的準(zhǔn)安全
狀態(tài)。最安全的狀態(tài)是到服務(wù)器的Console上面操作,并且拔掉網(wǎng)線。
2.修改MySQL的登錄設(shè)置:
# vi /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables
例如:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
保存并且退出vi。
3.重新啟動(dòng)mysqld
# /etc/init.d/mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]
4.登錄并修改MySQL的root密碼
# /usr/bin/mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.56
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> USE mysql ;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> flush privileges ;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
5.將MySQL的登錄設(shè)置修改回來(lái)
# vi /etc/my.cnf
將剛才在[mysqld]的段中加上的skip-grant-tables刪除
保存并且退出vi。
6.重新啟動(dòng)mysqld
# /etc/init.d/mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]

經(jīng)常使用CentOS的朋友,可能會(huì)遇到和我一樣的問(wèn)題。開啟了防火墻導(dǎo)致80端口無(wú)法訪問(wèn),剛開始學(xué)習(xí)centos的朋友可以參考下。
經(jīng)常使用CentOS的朋友,可能會(huì)遇到和我一樣的問(wèn)題。最近在Linux CentOS防火墻下安裝配置 ORACLE
數(shù)據(jù)庫(kù)的時(shí)候,總顯示因?yàn)榫W(wǎng)絡(luò)端口而導(dǎo)致的EM安裝失敗,遂打算先關(guān)閉一下CentOS防火墻。偶然看到CentOS防火墻的配置操作說(shuō)明,感覺(jué)不錯(cuò)。執(zhí)
行”setup”命令啟動(dòng)文字模式配置實(shí)用程序,在”選擇一種工具”中選擇”防火墻配置”,然后選擇”運(yùn)行工具”按鈕,出現(xiàn)CentOS防火墻配置界面,
將”安全級(jí)別”設(shè)為”禁用”,然后選擇”確定”即可.
這樣重啟計(jì)算機(jī)后,CentOS防火墻默認(rèn)已經(jīng)開放了80和22端口
簡(jiǎn)介:CentOS是Linux家族的一個(gè)分支。
CentOS防火墻在虛擬機(jī)的CENTOS裝好APACHE不能用,郁悶,解決方法如下
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
然后保存:
/etc/rc.d/init.d/iptables save
centos 5.3,5.4以上的版本需要用
service iptables save
來(lái)實(shí)現(xiàn)保存到配置文件。
這樣重啟計(jì)算機(jī)后,CentOS防火墻默認(rèn)已經(jīng)開放了80和22端口。
這里應(yīng)該也可以不重啟計(jì)算機(jī):
/etc/init.d/iptables restart
CentOS防火墻的關(guān)閉,關(guān)閉其服務(wù)即可:
查看CentOS防火墻信息:/etc/init.d/iptables status
關(guān)閉CentOS防火墻服務(wù):/etc/init.d/iptables stop
永久關(guān)閉?不知道怎么個(gè)永久法:
chkconfig –level 35 iptables off
上面的內(nèi)容是針對(duì)老版本的centos,下面的內(nèi)容是基于新版本。
iptables -P INPUT DROP
這樣就拒絕所有訪問(wèn) CentOS 5.3 本系統(tǒng)數(shù)據(jù),除了 Chain RH-Firewall-1-INPUT (2 references) 的規(guī)則外 , 呵呵。
用命令配置了 iptables 一定還要 service iptables save 才能保存到配置文件。
cat /etc/sysconfig/iptables 可以查看 防火墻 iptables 配置文件內(nèi)容
# Generated by iptables-save v1.3.5 on Sat Apr 14 07:51:07 2001
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1513:149055]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Apr 14 07:51:07 2001
另外補(bǔ)充:
CentOS 防火墻配置 80端口
看了好幾個(gè)頁(yè)面內(nèi)容都有錯(cuò),下面是正確方法:
#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
然后保存:
#/etc/rc.d/init.d/iptables save
再查看是否已經(jīng)有了:
[root@vcentos ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
* 設(shè)置iptables為自動(dòng)啟動(dòng)
chkconfig --level 2345 iptables on
可能因?yàn)榇蠹沂褂玫陌姹静灰唬惺褂梅椒ㄒ猜杂胁煌?
如果需要遠(yuǎn)程管理mysql,則使用以下指令臨時(shí)打開,用完后關(guān)閉
* 打開指令
iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT
* 關(guān)閉指令
iptables -D INPUT -p tcp -s xxx.xxx.xxx.xxx --dport 3306 -j ACCEPT
nginx 80 端口訪問(wèn)不了?
添加一個(gè)本地回路
iptables -A INPUT -i lo -j ACCEPT
posted @
2012-09-17 23:59 Alpha 閱讀(32158) |
評(píng)論 (0) |
編輯 收藏
系統(tǒng)連接狀態(tài)篇:
1.查看TCP連接狀態(tài)
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或
netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"t",state[key]}'
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"t",arr[k]}'
netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
2.查找請(qǐng)求數(shù)請(qǐng)20個(gè)IP(常用于查找攻來(lái)源):
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
3.用tcpdump嗅探80端口的訪問(wèn)看看誰(shuí)最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
4.查找較多time_wait連接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
5.找查較多的SYN連接
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
6.根據(jù)端口列進(jìn)程
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
網(wǎng)站日志分析篇1(Apache):
1.獲得訪問(wèn)前10位的ip地址
cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'
2.訪問(wèn)次數(shù)最多的文件或頁(yè)面,取前20
cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
3.列出傳輸最大的幾個(gè)exe文件(分析下載站的時(shí)候常用)
cat access.log |awk '($7~/.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20
4.列出輸出大于200000byte(約200kb)的exe文件以及對(duì)應(yīng)文件發(fā)生次數(shù)
cat access.log |awk '($10 > 200000 && $7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
5.如果日志最后一列記錄的是頁(yè)面文件傳輸時(shí)間,則有列出到客戶端最耗時(shí)的頁(yè)面
cat access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
6.列出最最耗時(shí)的頁(yè)面(超過(guò)60秒的)的以及對(duì)應(yīng)頁(yè)面發(fā)生次數(shù)
cat access.log |awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
7.列出傳輸時(shí)間超過(guò) 30 秒的文件
cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
8.統(tǒng)計(jì)網(wǎng)站流量(G)
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
9.統(tǒng)計(jì)404的連接
awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort
10. 統(tǒng)計(jì)http status
cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn
10.蜘蛛分析,查看是哪些蜘蛛在抓取內(nèi)容。
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
網(wǎng)站日分析2(Squid篇)按域統(tǒng)計(jì)流量
zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%st%dn",domain,trfc[domain]}}'
數(shù)據(jù)庫(kù)篇
1.查看數(shù)據(jù)庫(kù)執(zhí)行的sql
/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
系統(tǒng)Debug分析篇
1.調(diào)試命令
strace -p pid
2.跟蹤指定進(jìn)程的PID
gdb -p pid
awk '{ip[$1]+=1} END{for(i in ip){print i," "ip[i]}}' access.log |wc -l
其中access.log就是apache的訪問(wèn)日志。這個(gè)就可以統(tǒng)計(jì)獨(dú)立ip數(shù)據(jù)
1、把IP數(shù)量直接輸出顯示:
cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l
永久鏈接 : http://www.ha97.com/4392.html
經(jīng)常使用CentOS的朋友,可能會(huì)遇到和我一樣的問(wèn)題。開啟了防火墻導(dǎo)致80端口無(wú)法訪問(wèn),剛開始學(xué)習(xí)centos的朋友可以參考下。
經(jīng)常使用CentOS的朋友,可能會(huì)遇到和我一樣的問(wèn)題。最近在Linux CentOS防火墻下安裝配置 ORACLE 數(shù)據(jù)庫(kù)的時(shí)候,總顯示因?yàn)榫W(wǎng)絡(luò)端口而導(dǎo)致的EM安裝失敗,遂打算先關(guān)閉一下CentOS防火墻。偶然看到CentOS防火墻的配置操作說(shuō)明,感覺(jué)不錯(cuò)。執(zhí) 行”setup”命令啟動(dòng)文字模式配置實(shí)用程序,在”選擇一種工具”中選擇”防火墻配置”,然后選擇”運(yùn)行工具”按鈕,出現(xiàn)CentOS防火墻配置界面, 將”安全級(jí)別”設(shè)為”禁用”,然后選擇”確定”即可.
這樣重啟計(jì)算機(jī)后,CentOS防火墻默認(rèn)已經(jīng)開放了80和22端口
簡(jiǎn)介:CentOS是Linux家族的一個(gè)分支。
CentOS防火墻在虛擬機(jī)的CENTOS裝好APACHE不能用,郁悶,解決方法如下
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
然后保存:
/etc/rc.d/init.d/iptables save
centos 5.3,5.4以上的版本需要用
service iptables save
來(lái)實(shí)現(xiàn)保存到配置文件。
這樣重啟計(jì)算機(jī)后,CentOS防火墻默認(rèn)已經(jīng)開放了80和22端口。
這里應(yīng)該也可以不重啟計(jì)算機(jī):
/etc/init.d/iptables restart
CentOS防火墻的關(guān)閉,關(guān)閉其服務(wù)即可:
查看CentOS防火墻信息:/etc/init.d/iptables status
關(guān)閉CentOS防火墻服務(wù):/etc/init.d/iptables stop
永久關(guān)閉?不知道怎么個(gè)永久法:
chkconfig –level 35 iptables off
上面的內(nèi)容是針對(duì)老版本的centos,下面的內(nèi)容是基于新版本。
iptables -P INPUT DROP
這樣就拒絕所有訪問(wèn) CentOS 5.3 本系統(tǒng)數(shù)據(jù),除了 Chain RH-Firewall-1-INPUT (2 references) 的規(guī)則外 , 呵呵。
用命令配置了 iptables 一定還要 service iptables save 才能保存到配置文件。
cat /etc/sysconfig/iptables 可以查看 防火墻 iptables 配置文件內(nèi)容
# Generated by iptables-save v1.3.5 on Sat Apr 14 07:51:07 2001
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1513:149055]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Apr 14 07:51:07 2001
另外補(bǔ)充:
CentOS 防火墻配置 80端口看了好幾個(gè)頁(yè)面內(nèi)容都有錯(cuò),下面是正確方法:
#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
然后保存:
#/etc/rc.d/init.d/iptables save
再查看是否已經(jīng)有了:
[root@vcentos ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
* 設(shè)置iptables為自動(dòng)啟動(dòng)
chkconfig --level 2345 iptables on
可能因?yàn)榇蠹沂褂玫陌姹静灰?,所有使用方法也略有不同?/div>
posted @
2012-09-13 15:06 Alpha 閱讀(14546) |
評(píng)論 (0) |
編輯 收藏
1.關(guān)閉防火墻
[root@CentOS ~]# chkconfig iptables off
2.關(guān)閉selinux
vi /etc/sysconfig/selinux
//將SELINUX=enforcing修改為disabled然后重啟生效
3、配置CentOS 6.0 第三方y(tǒng)um源(CentOS默認(rèn)的標(biāo)準(zhǔn)源里沒(méi)有nginx軟件包)
[root@CentOS ~]# yum install wget
//下載wget工具
[root@CentOS ~]# wget http://www.atomicorp.com/installers/atomic
//下載atomic yum源
[root@CentOS ~]# sh ./atomic
//安裝提示輸入時(shí)輸yes
[root@CentOS ~]# yum check-update
//更新yum軟件包
4.安裝開發(fā)包和庫(kù)文件
[root@CentOS ~]# yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng
libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel
gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2
libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel
5.卸載已安裝的apache、mysql、php
[root@CentOS ~]# yum remove httpd
[root@CentOS ~]# yum remove mysql
[root@CentOS ~]# yum remove php
6.安裝nginx
[root@CentOS ~]# yum install nginx
[root@CentOS ~]# service nginx start
[root@CentOS ~]# chkconfig --levels 235 nginx on
//設(shè)2、3、5級(jí)別開機(jī)啟動(dòng)
7.安裝mysql
[root@CentOS ~]# yum install mysql mysql-server mysql-devel
[root@CentOS ~]# service mysqld start
[root@CentOS ~]# chkconfig --levels 235 mysqld on
[root@CentOS ~]# mysqladmin -u root password "123456"
//為root用戶設(shè)置密碼
[root@CentOS ~]# service mysqld restart
//重啟mysql
8.安裝php
[root@CentOS ~]# yum install php lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap
php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap
php-tidy php-common php-devel php-fpm
//安裝php和所需組件使PHP支持MySQL、FastCGI模式
[root@CentOS ~]# service php-fpm start
[root@CentOS ~]# chkconfig --levels 235 php-fpm on
9.配置nginx支持php
[root@CentOS ~]# mv /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
//將配置文件改為備份文件
[root@CentOS ~]# cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
//由于原配置文件要自己去寫因此可以使用默認(rèn)的配置文件作為配置文件
//修改nginx配置文件,添加fastcgi支持
[root@CentOS ~]# vi /etc/nginx/nginx.conf
index index.php index.html index.htm;
//加入index.php
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
//將以上代碼注釋去掉,并修改成nginx默認(rèn)路徑
10.配置php
//編輯文件php.ini,在文件末尾添加cgi.fix_pathinfo = 1
[root@CentOS ~]# vi /etc/php.ini
11.重啟nginx php-fpm
[root@CentOS ~]# service nginx restart
[root@CentOS ~]# service php-fpm restart
12.建立info.php文件
[root@CentOS ~]# vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>
13.測(cè)試nginx是否解析php
輸入:192.168.1.105/info.php
顯示php界面說(shuō)明解析成功