??xml version="1.0" encoding="utf-8" standalone="yes"?>
源码目录为:/usr/local/src
1、安装make
yum -y install gcc automake autoconf libtool make
2、安装g++
yum install gcc gcc-c++
3、安装PCRE?
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
出现如下报错Q?
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
权限不够Q切换到rootQ重新make install卛_?
4、安装zlib?
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?
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 支持国密标准
https://blog.51cto.com/1012682/2380553
6、创建用户及用户l?
一般ؓ了服务器安全Q会指定一个普通用h限的账号做ؓNginx的运行角Ԍq里使用www用户做ؓNginx工作q程的用戗后l安装的PHP也以www用户作ؓ工作q程用户?
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~译选项说明Q?
--prefix表示nginx要安装到哪个路径下,q里指定刚才新徏好的/alidata/server目录下的nginx-1.12.2Q?
--sbin-path表示nginx的可执行文g存放路径
--conf-path表示nginx的主配置文g存放路径Qnginx允许使用不同的配|文件启动,通过命o行中?c选项
--pid-path表示nginx.pid文g的存放\径,存储的主进E的q程受安装完成后Q可以随时改变的文g?Q?在nginx.conf配置文g中?PID指o。默认情况下Q文件名 为prefix/logs/nginx.pid
--error-log-path表示nginx的主错误、警告、和诊断文g存放路径
--http-log-path表示nginx的主h的HTTP服务器的日志文g的存放\?
--user表示nginx工作q程的用?
--group表示nginx工作q程的用L
--with-select_module?-without-select_module表示启用或禁用构Z个模块来允许服务器用select()Ҏ
--with-poll_module?-without-poll_module表示启用或禁用构Z个模块来允许服务器用poll()Ҏ
--with-http_ssl_module表示使用https协议模块。默认情况下Q该模块没有被构建。徏立ƈq行此模块的OpenSSL库是必需?
--with-pcre表示pcre的源码\径,因ؓ解压后的pcre是放在root目录下的Q所以是/root/pcre-8.41Q?
--with-zlib表示zlib的源码\径,q里因ؓ解压后的zlib是放在root目录下的Q所以是/root/zlib-1.2.11
--with-openssl表示openssl库的源码路径
配置OKQ?
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、启?
/usr/local/nginx/sbin/nginx
启动时报错:
nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory)
手动创徏该目录即可:mkdir -p /var/tmp/nginx/client
再次启动Q打开览器访问此机器的IPQ浏览器出现Welcome to nginx! 则表C?Nginx 已经安装q运行成功?
5、设|Yq接
ln -sf /usr/local/nginx/sbin/nginx /usr/sbin
q样可以直接执行nginx来启动了?
6、检nginx
nginx -t
昄Q?
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需要的常用?
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
安装信息如下Q?
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、添加环境变?
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命o重新加蝲配置文gQ?
source /etc/profile
查看环境变量Q?
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命o对php-fpm.conf的内容进行如下修?
pid = /usr/local/php/var/run/php-fpm.pid
使用vim命o对php-fpm.conf的内容进行如下修改:
user = www
group = www
其他配置可根据需求进行修改,比如pm.max_childrenQphp-fpm 能启动的子进E的最大数量)、pm.start_serversQphp启动Ӟ开启的子进E的数量Q、pm.min_spare_serversQ动态方式空闲状态下的最php-fpmq程数量Q、pm.max_spare_serversQ动态方式空闲状态下的最大php-fpmq程数量Q等?
7、启动php-fpm
/usr/local/php/sbin/php-fpm
可以通过ps aux | grep php查看phpq程?
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
]]>
打开l端输入以下命oQ?/p>
ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client
git-core是git版本控制核心软g
安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文?/p>
然后中间有个认操作Q输入Y后等待系l自动从镜像服务器中下蝲软g安装Q安装完后会回到用户当前目录。如?/p>
安装提示p|Q可能是因ؓpȝ软g库的索引文g太旧了,先更C下就可以了,更新命o如下Q?/p>
ubuntu:~$ sudo apt-get update
更新完Y件库索引后l执行上面的安装命o卛_?/p>
安装python的setuptools和gitosisQ由于gitosis的安装需要依赖于python的一些工P所以我们需要先安装python
的setuptools?/p>
执行下面的命令:
ubuntu:~$ sudo apt-get install python-setuptools
q个工具比较,安装也比较快Q接下来准备安装gitosisQ安装gitosis之前需要初始化一下服务器的git用户信息,q个随便填?/p>
ubuntu:~$ git config --global user.name "myname"
ubuntu:~$ git config --global user.email "******@gmail.com"
初始化服务器用户信息后,可以安装gitosis了,gitosis主要是用于给用户授权Q设|权限也是很方便的?/p>
可以通过以下命o获取gitosis版本文g
ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git
注意Q中间有两个是数字零
获取gitosis文g后,q入到文件目录下?/p>
ubuntu:/tmp$ cd gitosis/
接着使用python命o安装目录下的setup.py的python脚本q行安装
ubuntu:/tmp/gitosis$ sudo python setup.py install
到这里,整个安装步骤完成了Q下面就开始对gitq行一些基本的配置?/p>
二、创建git理员̎戗配|git
创徏一个̎PgitQ作为git服务器的理员,可以理其他用户的项目权限?/p>
ubuntu:/tmp/gitosis$ sudo useradd -m git
ubuntu:/tmp/gitosis$ sudo passwd git
然后?home目录下创Z个项目仓库存储点Qƈ讄只有git用户拥有所有权限,其他用户没有M权限?/p>
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默认状态下会将仓库攑֜用户的repositories目录下,例如git用户的仓库地址默认?home/git/repositories/目录下,q里我们需要创Z个链接映。让他指向我们前面创建的专门用于存放目的仓库目?home/gitrepository?/p>
ubuntu:/tmp/gitosis$ sudo ln -s /home/gitrepository /home/git/repositories
q里我将在服务器端生成ssh公钥Q如果想在其他机器上理也可以在其他机器上生成一个ssh的公钥?/p>
ubuntu:/home/git$ ssh-keygen -t rsa
q里会提C入密码,我们不输入直接回车即可?/p>
然后用刚生成公钥id_rsa.pub来对gitosisq行初始化?br />
向gitosisd公钥q初始化Q?br />
$ cp ~/.ssh/id_rsa.pub /tmp
$ sudo -H -u gitadmin gitosis-init < /tmp/id_rsa.pub
出现如上信息说明gitosis已经初始化成功?/p>
gitosis主要是通过gitosis-admin.git仓库来管理一些配|文件的Q如用户权限的管理。这里我们需要对其中的一个post-update文gd可执行的权限?/p>
ubuntu:/home/git$ sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update
三、服务器上创建项目仓?/p>
使用git账户在服务器上创Z个目录(mytestproject.gitQƈ初始化成git目仓库?/p>
ubuntu:/home/git$ su git
$ cd /home/gitrepository
$ mkdir mytestproject.git
$ git init --bare mytestproject.git
$ exit
如果出现以下信息p明已l成功创Z一个名为mytestproject.git的项目仓库了Q新建的q个仓库暂时q是I的Q不能被客户端cloneQ还需要对gitosisq行一些配|操作?/p>
四、用gitosis理用户操作目的权?/p>
首先需要在前面生成ssh公钥Q用来初始化gitosisQ的机器上将gitosis-admin.git的仓库clone下来?/p>
在客L机器上新Z个目录用于存放gitosis-admin.git仓库
ubuntu:~$ mkdir gitadmin
ubuntu:~$ cd gitadmin/
ubuntu:~/gitadmin$ git clone git@192.168.1.106:gitosis-admin.git
clone正确会显CZ下信?/p>
clone下来会有一个gitosis.conf的配|文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,keydir主要用户存放ssh公钥文gQ一般以“用户?pub”命名Qgitosis.conf配置文g中需使用相同用户名)Q用于认证请求的客户端机器?/p>
现在让需要授权的用户使用前面的方式各自在其自q机器上生成相应的ssh公钥文gQ管理员把他们分别按用户名命名好Q复制到keydir目录下?/p>
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/
l箋~辑gitosis.conf文g
[gitosis]
[group gitosis-admin]
####理员组
members = charn@ubuntu
####理员用户名Q需要在keydir目录下找到相应的.pub文gQ多个可用空格隔开Q下同)
writable = gitosis-admin####可写的项目仓库名Q多个可用空格隔开Q下同)
[group testwrite]
####可写权限l?br />members = zhangsan####l用?br />writable = mytestproject####可写的项目仓库名
[group
testread] ####只读权限l?br />members =lisi####l用?br />readonly= mytestproject####只读目仓库?/p>
因ؓq些配置的修改只是在本地修改的,q需要推送到服务器中才能生效?/p>
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
推送成功会昄下面提示信息
又是后新增的用户不能立即生效Q这时候需要重新启动一下sshd服务
ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart
现在Q服务端的git已l安装和配置完成了,接下来就需要有权限的组成员在各自的机器上clone服务器上的相?/p>
目仓库q行相应的工作了?/p>
五、客LQwindowsQ用git
下蝲安装windows版本的git客户端YӞ下蝲地址Qhttp://msysgit.github.io/
安装完成后右键菜单会出现几个git相关的菜单选项Q我们主要用其中的git
bash通过命o行来q行操作?/p>
在本地新Z个目录,使用git初始化这个目录,然后再里面新Z个文本文件用于测试,最后关联到git服务器仓?/p>
中的相关目Q最后上传本地版本到服务器?/p>
$ 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
q样服务端就创徏好了一个mytestproject.git的仓库的基础版本了,现在其他l员只要从服务端q行clone可以了?/p>
window下面q入到需要克隆的本地目录下面右键选择git bash选项Q输?/p>
$ git clone git@serverip:mytestproject.git
可以把目clone到本C库了?/p>
下面q行单的修改和提交操?/p>
$ 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
最后推送到服务器成功会昄如下信息
gitolite搭徏git仓库Q服务端+客户端)
http://blog.csdn.net/ChiChengIT/article/details/49863383
pȝ理员,最谨慎的linux是rm命o了,一不小心数据就没干掉,最恐怖的是数据没有备份,没法q原了,此类事情发生的太多了Q针对于此,我们l过多次试演练Q终于成功的把大部分删除的数据找回来了,下面我把演练q程l大家介l一下?/p>
二、安装恢复Y?/strong>
extundelete,该工具官方给出的是可以恢复ext3或者ext4文gpȝ被删除的文g?/p>
1Q通过命o安装
#yum install extundelete -y
2Q通过源码~译安装
#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
三、删除数据查?/strong>
首先Q我们先删除一个文Ӟ如图Q?/p>
如上图,我们刚才?boot目录下删除了个symvers-2.6.32-431.el6.x86_64.gz文gQ?boot是落?dev/sda1?/p>
在Linux下可以通过“ls -id”命o来查看某个文件或者目录的inode|例如查看根目录的inode|可以输入Q?/p>
[root@cloud boot]# ls -id /boot 2 /boot
注:根目录的inode一般ؓ2
然后我们开始查找被删除的文Ӟ需要根据分区inode查找Q命令如下:
#extundelete /dev/sda1 --inode 2
l果如下图:
我们可以看到标识ؓDeleted的被删除数据了?/p>
四、数据恢?/strong>
我们开始恢复,命o如下Q?/p>
#extundelete /dev/sda1 --restore-file symvers-2.6.32-431.el6.x86_64.gz
如图Q?/p>
q原成功
当然Q还有可能删除整个文件夹Q我们也举个例子Q如下:
#extundelete /dev/sda1 --restore-directory test
恢复全部删除数据Q如下:
#extundelete /dev/sdb1 --restore-all
也可以通过旉D|复,q里׃说了Q参数如下:
--version, -[vV]Q显CY件版本号?--helpQ显CY件帮助信息?--superblockQ显CU块信息?--journalQ显C日志信息?--after dtimeQ时间参敎ͼ表示在某D|间之后被删的文g或目录?--before dtimeQ时间参敎ͼ表示在某D|间之前被删的文g或目录?动作QactionQ有Q?--inode inoQ显C?#8220;ino”的信息?--block blkQ显C数据块“blk”的信息?--restore-inode ino[,ino,...]Q恢复命令参敎ͼ表示恢复节点“ino”的文Ӟ恢复的文件会自动攑֜当前目录下的RESTORED_FILES文g夹中Q用节点编号作为扩展名?--restore-file 'path'Q恢复命令参敎ͼ表示恢复指定\径的文gQƈ把恢复的文g攑֜当前目录下的RECOVERED_FILES目录中?--restore-files 'path'Q恢复命令参敎ͼ表示恢复在路径中已列出的所有文件?--restore-allQ恢复命令参敎ͼ表示尝试恢复所有目录和文g?-j journalQ表CZ已经命名的文件中d扩展日志?-b blocknumberQ表CZ用之前备份的块来打开文gpȝQ一般用于查看现有超U块是不是当前所要的文g?-B blocksizeQ通过指定数据块大来打开文gpȝQ一般用于查看已l知道大的文g?/pre>五、ȝ
数据恢复Q不一定能全部数据恢复回来,q是一句话Q操作要谨慎。万一操作pQ也不要慌,损失减到最,首先停止所有操作,其次让专业h员去处理?br />
]]>
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm安裝後,會自動產?yum ?repository a定(?/etc/yum.repos.d/nginx.repo)Q?nbsp;
yum install nginx
systemctl start nginx
查看目前運作狀?
systemctl status nginx查看 nginx 服務目前的啟動設?
systemctl list-unit-files | grep nginx
若是 disabledQ可以改成開自動啟?
systemctl enable nginx若有a定防火牆,查看防火牆運行狀態,看是否有開啟 nginx 使用?port
firewall-cmd --state
怹開放開啟防火牆的 http 服務
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload
列出防火?public 的設?
firewall-cmd --list-all --zone=publicE過以上a定Q應該就可以使用瀏覽器訪?nginx 的預a頁面?/li>
yum install php php-fpm php-mysql查看 php-fpm 服務目前的啟動設?nbsp;
systemctl list-unit-files | grep php-fpm
Ҏ開機自動啟動
systemctl enable php-fpm立即啟動
systemctl start php-fpm
查看目前運作狀?
systemctl status php-fpm
listen = 127.0.0.1:9000
Ҏ
listen = /var/run/php-fpm/php-fpm.sock然後重新啟動 php-fpm
systemctl restart php-fpm
a:不要Ҏ listen = /tmp/php-fcgi.sock (?php-fcgi.sock a定?/tmp 底下)Q?因為pȝ產生 php-fcgi.sock 時,會放?/tmp/systemd-private-*/tmp/php-fpm.sock 隨機U有目錄下, 除非?/usr/lib/systemd/system/ 裡面?PrivateTmp=true a定Ҏ PrivateTmp=falseQ?但還是會產生其他問題Q所以還是換個位|最方便 # yum remove php*
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 install php70w php70w-opcache
安装其他插gQ选装Q?br style="margin: 0px; padding: 0px;" />
注:如果安装pearQ需要安装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
配置QconfigureQ、编译(makeQ、安装(make installQ?/p>
~译安装一定要指定定prefixQ这是安装目录,会把所有文仉制在q个目录Q卸载时只需要删除那个目录就可以Q如果不指定会安装到很多地方Q后边删除不方便?/p>
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
注意
内存于1G安装往往会出错,在编译参数后面加上一行内?code style="margin: 1px 5px; height: 20px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: "Courier New", sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important; background-color: #f5f5f5 !important;">--disable-fileinfo
--exec-prefix=EXEC-PREFIX
可以把体pȝ关的文g安装C个不同的位置Q而不是PREFIX讄的地方.q样做可以比较方便地在不同主Z间共享体pȝ关的文g
--bindir=DIRECTORY
为可执行E序声明目录Q缺省是 EXEC-PREFIX/bin
--datadir=DIRECTORY
讄所安装的程序需要的只读文g的目录.~省?PREFIX/share
--sysconfdir=DIRECTORY
用于各种各样配置文g的目录,~省?PREFIX/etc
--libdir=DIRECTORY
库文件和动态装载模块的目录Q缺省是 EXEC-PREFIX/lib
--includedir=DIRECTORY
C ?C++ 头文件的目录Q缺省是 PREFIX/include
--docdir=DIRECTORY
文档文gQ(?“manQ手册页Q?#8221;以外Q?被安装到这个目录.~省?PREFIX/doc
--mandir=DIRECTORY
随着E序一起带的手册页 安装到q个目录Q在它们相应的manx子目录里Q?~省是PREFIX/man
注意: Z减少对共享安装位|(比如 /usr/local/includeQ?的污染,configure 自动?datadirQ?sysconfdirQincludedirQ??docdir 上附加一?“/postgresql” 字串Q?除非完全展开以后的目录名字已l包含字?“postgres” 或?“pgsql”Q比如,如果你选择 /usr/local 做前~Q那?C 的头文g安装到 /usr/local/include/postgresqlQ?但是如果前缀?/opt/postgresQ那么它们将 被放q?/opt/postgres/include
--with-includes=DIRECTORIES
DIRECTORIES 是一pd冒号分隔的目录,q些目录被加入~译器的头文?搜烦列表中.如果你有一些可选的包(比如 GNU ReadlineQ安装在 非标准位|,你就必须使用q个选项Q以及可能还有相应的 --with-libraries 选项Q?br style="margin: 0px; padding: 0px;" />
--with-libraries=DIRECTORIES
DIRECTORIES 是一pd冒号分隔的目录,q些目录是用于查扑ֺ文g的. 如果你有一些包安装在非标准位置Q你可能需要用这个选项 Q以及对应的--with-includes选项Q?br style="margin: 0px; padding: 0px;" />
--enable-XXX
打开XXX支持
--with-XXX
制作XXX模块
[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 ;a?65536 的原因是-1 可能不是unlimited ;說明 http://php.net/manual/en/install.fpm.configuration.php#104172 slowlog = /usr/local/php/var/log/slow.log request_slowlog_timeout = 10
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; #若沒a定Q可能出N?65535 worker_connections exceed open file resource limit: 1024 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 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 (說明 http://nginx.org/en/docs/http/ngx_http_gzip_module.html) gzip off; gzip_min_length 1k;#1k以上才壓^?/span> gzip_buffers 32 4k; #http://stackoverflow.com/questions/4888067/how-to-get-linux-kernel-page-size-programatically #使用 getconf PAGESIZE 取得pȝ one memory page sizeQ?/span> 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; #查看 nginx ?mime.types 檔案(/etc/nginx/mime.types),裡面有各E類型的定義 gzip_vary on; include /etc/nginx/conf.d/*.conf; }若出珑ևN?setrlimit(RLIMIT_NOFILE, 65535) failed (1: Operation not permitted)
ulimit -n若設定值太,修改 /etc/security/limits.conf
vi /etc/security/limits.conf加上或修改以下兩行設?
* soft nofile 65535 * hard nofile 65535
单个Tomcat的处理性能是有限的Q当q发量较大的时候,需要有部v多套来进行负载均衡了?nbsp;
集群的关键点有以下几点:
1.引入负蝲?/strong>
软负载可以用nginx或者apache来进行,主要是用一个分发的功能
参考:
http://ajita.iteye.com/blog/1715312Qnginx负蝲Q?nbsp;
http://ajita.iteye.com/blog/1717121Qapache负蝲Q?nbsp;
2.׃nsession处理
目前的处理方式有如下几种Q?nbsp;
1).使用Tomcat本n的Session复制功能
参考http://ajita.iteye.com/blog/1715312QSession复制的配|)
Ҏ的有Ҏ配置单,~点是当集群数量较多ӞSession复制的时间会比较长,影响响应的效?nbsp;
2).使用W三Ҏ存放׃nSession
目前用的较多的是使用memcached来管理共享SessionQ借助于memcached-sesson-manager来进行Tomcat的Session理
参考http://ajita.iteye.com/blog/1716320Q用MSM理Tomcat集群sessionQ?nbsp;
3).使用黏性session的策?nbsp;
对于会话要求不太强(不涉及到计费Q失败了允许重新h下等Q的场合Q同一个用Lsession可以由nginx或者apache交给同一个Tomcat来处理,q就是所谓的session sticky{略Q目前应用也比较?nbsp;
参考:http://ajita.iteye.com/blog/1848665Qtomcat session stickyQ?nbsp;
nginx默认不包含session sticky模块Q需要重新编译才行(windows下我也不知道怎么重新~译Q?nbsp;
优点是处理效率高多了Q缺ҎZ话要求的场合不合?nbsp;
3.结
以上是实现集的要点Q其??可以l合使用Q具体场景具体分析吧~
Tomcat本nq是q行在JVM上的Q通过对JVM参数的调整我们可以Tomcat拥有更好的性能。针对JVM的优化目前主要在两个斚wQ?nbsp;
1.内存调优
内存方式的设|是在catalina.sh中,调整一下JAVA_OPTS变量卛_Q因为后面的启动参数会把JAVA_OPTS作ؓJVM的启动参数来处理?nbsp;
具体讄如下Q?nbsp;
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
其各参数如下:
-Xmx3550mQ设|JVM最大可用内存ؓ3550M?nbsp;
-Xms3550mQ设|JVM促内存?550m。此值可以设|与-Xmx相同Q以避免每次垃圾回收完成后JVM重新分配内存?nbsp;
-Xmn2gQ设|年M大小?G。整个堆大小=q轻代大?+ q老代大小 + 持久代大。持久代一般固定大ؓ64mQ所以增大年M后,会减小q老代大小。此值对pȝ性能影响较大QSun官方推荐配置为整个堆?/8?nbsp;
-Xss128kQ设|每个线E的堆栈大小。JDK5.0以后每个U程堆栈大小?MQ以前每个线E堆栈大ؓ256K。更具应用的U程所需内存大小q行调整。在相同物理内存下,减小q个D生成更多的线E。但是操作系l对一个进E内的线E数q是有限制的Q不能无限生成,l验值在3000~5000左右?nbsp;
-XX:NewRatio=4:讄q轻代(包括Eden和两个Survivor区)与年老代的比|除去持久代)。设|ؓ4Q则q轻代与q老代所占比gؓ1Q?Q年M占整个堆栈的1/5
-XX:SurvivorRatio=4Q设|年M中EdenZSurvivor区的大小比倹{设|ؓ4Q则两个SurvivorZ一个Eden区的比gؓ2:4Q一个Survivor区占整个q轻代的1/6
-XX:MaxPermSize=16m:讄持久代大ؓ16m?nbsp;
-XX:MaxTenuringThreshold=0Q设|垃圾最大年龄。如果设|ؓ0的话Q则q轻代对象不l过Survivor区,直接q入q老代。对于年老代比较多的应用Q可以提高效率。如果将此D|ؓ一个较大|则年M对象会在Survivor行多ơ复Ӟq样可以增加对象再年M的存zL_增加在年M卌回收的概论?nbsp;
2.垃圾回收{略调优
垃圾回收的设|也是在catalina.sh中,调整JAVA_OPTS变量?nbsp;
具体讄如下Q?nbsp;
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100"
具体的垃圑֛收策略及相应{略的各参数如下:
串行攉器(JDK1.5以前主要的回收方式)
-XX:+UseSerialGC:讄串行攉?nbsp;
q行攉器(吞吐量优先)
CZQ?nbsp;
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100
-XX:+UseParallelGCQ选择垃圾攉器ؓq行攉器。此配置仅对q轻代有效。即上述配置下,q轻代用ƈ发收集,而年老代仍旧使用串行攉?nbsp;
-XX:ParallelGCThreads=20Q配|ƈ行收集器的线E数Q即Q同时多个U程一赯行垃圑֛收。此值最好配|与处理器数目相{?nbsp;
-XX:+UseParallelOldGCQ配|年老代垃圾攉方式为ƈ行收集。JDK6.0支持对年老代q行攉
-XX:MaxGCPauseMillis=100:讄每次q轻代垃圑֛收的最长时_如果无法满此时_JVM会自动调整年M大小Q以满此倹{?nbsp;
-XX:+UseAdaptiveSizePolicyQ设|此选项后,q行攉器会自动选择q轻代区大小和相应的Survivor区比例,以达到目标系l规定的最低相应时间或者收集频率等Q此值徏议用ƈ行收集器Ӟ一直打开?nbsp;
q发攉器(响应旉优先Q?nbsp;
CZQjava -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGCQ设|年老代为ƈ发收集。测试中配置q个以后Q?XX:NewRatio=4的配|失效了Q原因不明。所以,此时q轻代大最好用-Xmn讄?nbsp;
-XX:+UseParNewGC: 讄q轻代ؓq行攉。可与CMS攉同时使用。JDK5.0以上QJVM会根据系l配|自行设|,所以无需再设|此倹{?nbsp;
-XX:CMSFullGCsBeforeCompactionQ由于ƈ发收集器不对内存I间q行压羃、整理,所以运行一D|间以后会产生“片”Q得运行效率降低。此D|运行多次GC以后对内存空间进行压~、整理?nbsp;
-XX:+UseCMSCompactAtFullCollectionQ打开对年老代的压~。可能会影响性能Q但是可以消除碎?nbsp;
3.结
在内存设|中需要做一下权?nbsp;
1)内存大Q一般情况下处理的效率也高Q但同时在做垃圾回收的时候所需要的旉也就长Q在q段旉内的处理效率是必然要受媄响的?nbsp;
2)在大多数的网l文章中都推?Xmx和Xms讄Z_说是避免频繁的回Ӟq个在测试的时候没有看到明昄效果Q内存的占用情况基本都是锯状的效果Q所以这个还要根据实际情冉|定?/p>
AJP是ؓ Tomcat ?HTTP 服务器之间通信而定制的协议Q能提供较高的通信速度和效率。如果tomcat前端攄是apache的时候,会用到AJPq个q接器。由于我们公司前端是由nginx做的反向代理Q因此不使用此连接器Q因此需要注销掉该q接器?/p>
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
默认 Tomcat 是开启了对war包的热部|的。ؓ了防止被植入木马{恶意程序,因此我们要关闭自动部|Ӏ?/p>修改实例Q?/p>
<Host name="localhost" appBase="" unpackWARs="false" autoDeploy="false">
3.配置pptp.首先我们要编?etc/pptpd.conf文g:
#vim /etc/pptpd.conf
扑ֈ”locapip”?#8221;remoteip”q两个配|项,前面的”;”注释W去?更改Z期望的IPD?localip表示服务器的IP,remoteip表示分配l客L的IP地址,可以讄为区?q里我们使用pptp默认的配|?
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
注意,q里的IPD设|?直接媄响后面的iptables规则d命o.h意匹配的正确?如果你嫌ȝ,q本文的配|?可以一直复制命令和文本使用?
4.接下来我们再~辑/etc/ppp/options.pptpd文g,为VPNdGoogle DNSQ?/span>
#vim /etc/ppp/options.pptpd
在末添加下面两?
ms-dns 8.8.8.8
ms-dns 8.8.4.4
5、设|pptp VPN账号密码.我们需要编?etc/ppp/chap-secretsq个文g:
#vim /etc/ppp/chap-secrets
在这个文仉?按照”用户?pptpd 密码 *”的Ş式编?一行一个̎号和密码.比如d用户名ؓtest,密码?234的用?则编辑如下内?
test pptpd 1234 *
6、修改内核设|?使其支持转发.~辑/etc/sysctl.conf文g:
#vim /etc/sysctl.conf
?#8221;net.ipv4.ip_forward”改ؓ1,变成下面的Ş?
net.ipv4.ip_forward=1
保存退?q执行下面的命o来生效它:
#sysctl -p
7、添加iptables转发规则.l过前面?个步?我们的VPN已经可以拨号?但是q不能访问Q何网?最后一步就是添加iptables转发规则?输入下面的指?
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
需要注意的?q个指o中的”192.168.0.0/24″是根据之前的配置文g中的”localip”|段来改变的,比如你设|的”10.0.0.1″|段,则应该改?#8221;10.0.0.0/24″.此外q有一炚w要注意的是eth0,如果你的外网|卡不是eth0,而是eth1(比如SoftLayer的服务器是q样的情?,那么误得将eth0也更改ؓ对应的网卡编?不然是上不了|的.
然后我们输入下面的指令让iptables保存我们刚才的{发规?以便重启pȝ后不需要再ơ添?
#/etc/init.d/iptables save
然后我们重启iptablesQ?/span>
#/etc/init.d/iptables restart
8、重启pptp服务.输入下面的指令重启pptp:
#/etc/init.d/pptpd restart
现在你已l可以连接自qVPNq浏览网了.不过我们q需要做最后的一?
9、设|开动运行服?我们最后一步是pptp和iptables讄为开动运?q样׃需要每ơ重启服务器后手动启动服务了,当然你不需要自动启动服务的话可以忽略这一?输入指o:
#chkconfig pptpd on
#chkconfig iptables on
q样大功告成了,赶快到Windows下徏立一个VPNq接,IP填写自己的服务器IP,用户名和密码填写自己讄好的用户名和密码,点击”q接”,成功后就可以使用服务器去览|页?
备注Q?/span>
多ip服务器{发指定规?/span>
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 服务器外|ip
如果iphone之类的设备能q上Q访问网|者youtube特别慢,需要做如下修改Q?/span>
vi /etc/ppp/ip-up
增加一?/span>
/sbin/ifconfig $1 mtu 1400
或者修改iptables规则
iptables -A FORWARD -p tcp --syn -s 192.168.8.0/24 -j TCPMSS --set-mss 1356
1356的值可能需要自p_调节到能保证|络正常使用情况下的最大?br />