Linux环境:CentOS6.6
一、安装前提准备
在终端下输入命令将系统更新为最新。
[root@localhost ~]#yum -y update
1、首先确认是否安装GCC编译环境,如果没有安装,可以通过在线安装的方式进行安装,确保服务器联网。
[root@localhost ~]#yum -y install gcc
2、安装apr
下载apr安装包,上传、解压、开始安装
[root@localhost download]#cd apr-1.4.5
[root@localhost apr-1.4.5]#./configure --prefix=/usr/local/apr
[root@localhost apr-1.4.5]#make
[root@localhost apr-1.4.5]#make install
设置apr的环境变量,编辑/etc/profile文件,在末尾添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
保存后,应用,执行以下命令
[root@localhost download]#source /etc/profile
3、安装apr-util
下载apr-util安装包,上传、解压、开始安装
[root@localhost download]#tar -vzxf apr-util-1.3.12.tar.gz
[root@localhost download]#cd apr-util-1.3.12
[root@localhost apr-util-1.3.12]#./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config
[root@localhost apr-util-1.3.12]#make
[root@localhost apr-util-1.3.12]#make install
4、安装OpenSSL
到OpenSSL官网下载最新的OpenSSL安装包,上传到服务器,依次执行以下命令
--解压
[root@localhost download]#tar -xvzf openssl-1.0.2a.tar.gz
--进入源文件目录
[root@localhost download]#cd openssl-1.0.2a
--指定安装路径
[root@localhost openssl-1.0.2a]#./config --prefix=/usr/local/openssl
[root@localhost openssl-1.0.2a]#./config -t
--编译
[root@localhost openssl-1.0.2a]#make
--安装
[root@localhost openssl-1.0.2a]#make install
二、JDK安装
1、卸载系统自带JDK
CentOS下默认自带OpenJDK,建议更换
--查看系统安装了那些jdk,全部卸载
[root@localhost ~]#rpm -qa | grep java
--卸载 java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.i686
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.i686
2、确认Linux版本
--查看安装的Linux版本
[root@localhost ~]#file /sbin/init
注意:
JDK版本要与操作系统一致,32位只能装32位,64位下最好装64位。
确认Linux版本后到Oracle官网下载相应版本的安装包,建议下载rpm安装包。
3、安装JDK并配置相应环境变量
手动安装JDK命令
[root@localhost download]#rpm -ivh jdk-7u79-linux-i586.rpm
默认安装位置为/usr/java/
配置JAVA环境变量,编辑/etc/profile文件,在文件末尾加入以下三行
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/bin
保存后,应用,执行以下命令
[root@localhost ~]#source /etc/profile
--检查JDK安装情况
[root@localhost ~]#java -version
三、Tomcat设置
Tomcat下载后上传,解压即可,核心是开启apr,需要native的编译和安装。
Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术。
APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心。
APR有很多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),OS级别功能(随机数生成,系统状态等等),本地进程管理(共享内存,NT管道和UNIX sockets)。这些功能可以使Tomcat作为一个通常的前台WEB服务器,能更好地和其它本地web技术集成,总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器。
在产品环境中,特别是直接使用Tomcat做WEB服务器的时候,应该使用Tomcat Native来提高其性能。
Tomcat的SSL配置分为两种情况:使用APR、不使用APR
证书集成采用APR模式:
native编译,native无需下载,在tomcat的bin目录下有,解压后进入tomcat-7.0.27/bin/tomcat-native-1.1.23-src/jni/native/目录
[root@localhost native]# ./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/openssl
[root@localhost native]#make
[root@localhost native]#make install
配置SSL(如果采用Apache直接集成SSL证书的方式,该步骤可以略过)
配置Tomcat,屏蔽8080,私钥的保护密码为空时可以去掉SSLPassword配置项。
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" SSLCertificateFile="D:\tomcat-7.0.27-ssl\conf\2_gtgymap.com.crt" SSLCertificateKeyFile="D:\tomcat-7.0.27-ssl\conf\3_gtgymap.com.key" SSLPassword="Dsp21stccomcn" clientAuth="optional" sslProtocol="TLS" />
四、Apache的安装和优化
1、检查系统是否按照 Apache服务
[root@localhost ~]#chkconfig --list httpd
如果已安装了Apache服务,则将Apache服务关闭ba
[root@localhost ~]#chkconfig httpd off
2、下载Apache源文件;
3、将安装包上传到服务器/opt/目录下,并解压。
解压命令
[root@localhost download]#tar -xvzf httpd-2.4.12.tar.gz
4、定位到httpd-2.4.12目录下
[root@localhost download]#cd httpd-2.4.12
5、配置Apache编译路径和相关参数,并编译、安装: 依次执行
[root@localhost httpd-2.4.12]# ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all -with-apr=/usr/local/apr -with-apr-util=/usr/local/apr-util
[root@localhost httpd-2.4.12]#make
[root@localhost httpd-2.4.12]#make install
执行完成后Apache的安装路径为 /usr/local/apache
进入Apache安装目录检查相关模块是否编译安装成功,重点是modules下的各个模块。
6、进入Apache安装目录,启动Apache服务
[root@localhost httpd-2.4.12]#cd /usr/local/apache/bin
[root@localhost bin]#./apachectl -k start
7、通过浏览器访问,确认Apache是否安装成功,如果无法访问,首先确认是否操作系统防火墙屏蔽了80端口,可以用如下命令停止操作系统的防火墙
[root@localhost ~]#service iptables stop
关闭防火墙后,如果可以在浏览器看到It’s work!,那么请将端口添加到防火墙例外中:
编辑/etc/sysconfig/iptables文件,在22端口这条规则的下面添加要开放的端口
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT
重启防火墙,验证规则是否生效。
8、配置Apache,请在Apache下按以下步骤进行配置配置。
(1)基本配置
配置服务根目录,这样所有涉及该目录皆可使用变量形式作为参数配置
Define SRVROOT “usr/local/apache2.4"
ServerRoot "${SRVROOT}"
确认端口是否为80端口
Listen 80
确认ServerName(如果没有域名,使用IP即可)
ServerName www.21at.net
配置DocumentRoot(可用于index.html跳转)
DocumentRoot "${SRVROOT}/htdocs"
配置错误404等跳转
ErrorDocument 500 "The server made a boo boo."
ErrorDocument 500 "/index.html"
ErrorDocument 404 "/index.html"
ErrorDocument 402 "/index.html"
具体说明请参见《Apache配置404错误页面》
(2)Apache性能优化。
判断httpd的工作模式,进入到Apache的bin目录下,输入命令:
[root@localhost bin]#httpd -l
如果是worker模式,配置以下内容:
<IfModule mpm_worker_module>
StartServers 20
MaxClients 2000
ServerLimit 100
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>
如果是prefork模式,配置以下内容:
<IfModule mpm_prefork_module>
ServerLimit 2000
StartServers 50
MinSpareServers 20
MaxSpareServers 50
MaxClients 2000
MaxRequestsPerChild 0
</IfModule>
具体说明请参见《Apache的工作方式及性能优化》
(2)配置Apache的日志按天生成
利用Apache自带的rotatelogs工具,以下是配置项
注意的问题:rotatelogs工具必须是全路径
ErrorLog "|/usr/local/apache/bin/rotatelogs -l logs/access-%Y-%m-%d.log 86400"
CustomLog "|/usr/local/apache/bin/rotatelogs -l logs/access-%Y-%m-%d.log 86400" combined
(3)多虚拟主机配置
在虚拟主机配置时,目前已见到两种场景,第一种为市政管委网站,一个Apache服务器搭建两个虚拟主机,采用两个域名分别访问不同主机;第二种为公司即时服务门户,一个Apache服务器搭建一个虚拟机主机,采用一个域名两个虚拟目录分别访问不同主机。
在配置时,可以直接在httpd.conf下直接配置,也可以
市政管委网站相关配置段如下,以下配置了两个虚拟主机 www.bjmac.gov.cn和www.gcz.gov.cn,在各自虚拟主机内部配置了反向代理,通过不同的域名访问不同的主机
<VirtualHost *:80>
ServerName www.bjmac.gov.cn
DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /pub http://172.24.3.32:3008/pub/
ProxyPassReverse /pub http://172.24.3.32:3008/pub/
ProxyPass /template http://172.24.3.32:3008/template/
ProxyPassReverse /template http://172.24.3.32:3008/template/
ProxyPass /gwweb2011 http://172.24.3.32:3008/gwweb2011/
ProxyPassReverse /gwweb2011 http://172.24.3.32:3008/gwweb2011/
</VirtualHost>
<VirtualHost *:80>
ServerName www.gcz.gov.cn
DocumentRoot "/usr/local/apache/htdocs2"
<Directory "/usr/local/apache/htdocs2">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /worklog http://172.172.5.202/worklog/
ProxyPassReverse /worklog http://172.172.5.202/worklog/
</VirtualHost>
公司即时服务门户相关配置段如下,以下配置了一个虚拟主机 www.21at.net,在虚拟主机内部配置了两个虚拟目录,访问不同的主机。
<VirtualHost _default_:80>
ServerName www.21at.net
ServerAlias 21at.net
DocumentRoot "${SRVROOT}/htdocs"
#服务门户
Alias /portal "${SRVROOT}/htdocs/"
<Directory "${SRVROOT}/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#服务中心
Alias /center "${SRVROOT}/htdocs2/"
<Directory "${SRVROOT}/htdocs2">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#资源目录
Alias /atp "/sdata/catalog"
<Directory "/sdata/catalog">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
#数据目录
Alias /source "/sdata/source"
<Directory "/sdata/source">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /geoserver http://192.168.204.30:8888/geoserver
ProxyPassReverse /geoserver http://192.168.204.30:8888/geoserver
</VirtualHost>
具体说明请参见《Apache下一个站点绑定多个域名》
10、SSL配置及代理相关配置
如果网站(例如公司即时服务门户https://www.21at.net)采用了SSL证书加密,则需要开启SSL相关模块。
(1)加载SSL相关模块
LoadModule ssl_module modules/mod_ssl.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
(2)加载代理相关模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
以上模块,在Apache的Windows版本中,直接放开#即可,在Linux版本下,可能需要自行填写,因为现场部署环境下曾经遇到过虽然modules文件夹内有该模块,但是httpd.conf中却没有load。
(3)配置SSL
在httpd.conf文件中找到
<IfModule ssl_module>
加入Include conf/extra/httpd-ahssl.conf,用于加载与SSL相关配置
httpd-ahssl.conf虚拟主机配置样例
<VirtualHost *:443>
SSLEngine on
ServerName www.21at.net:443
SSLCertificateFile "${SRVROOT}/private/21at.net_crt.txt"
SSLCertificateKeyFile "${SRVROOT}/private/21at.net_key.txt"
#配置根证书连接文件,无根证书连接文件可以去到该配置项
SSLCertificateChainFile "${SRVROOT}/private/21at.net_INTERMEDIATE_CA.txt"
SSLProxyEngine On
SSLProxyCheckPeerCN On
SSLProxyCheckPeerExpire On
#以下配置SSL反向代理
ProxyPass /ATPortal http://192.168.204.30:8080/ATPortal
ProxyPassReverse /ATPortal http://192.168.204.30:8080/ATPortal
ProxyPass /ATCenter http://192.168.204.31:8080/ATCenter
ProxyPassReverse /ATCenter http://192.168.204.31:8080/ATCenter
</VirtualHost>
样例文件:httpd-ahssl.conf
(4)开启Gzip压缩
#Gzip压缩
<IfModule mod_deflate.c>
#压缩率, 6是建议值.
DeflateCompressionLevel 6
SetOutputFilter DEFLATE
#设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
#同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
#设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
AddOutputFilterByType DEFLATE text/*
#这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
#这段是告诉apache对php类型的文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
# Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 有更多的问题,所以不开启压缩
BrowserMatch ^Mozilla/4.0[678] no-gzip
# IE浏览器会伪装成 Netscape ,但是事实上它没有问题
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</具体说明请参见《Apache开启Gzip压缩》
(5)防盗链配置
# 防盗链配置
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://21at.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://21at.net$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.21at.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.21at.net$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://www.21at.net/index.html [R,NC]
具体说明请参见《Apache实现图片防盗链》
(6)自动跳转配置
# 自动跳转配置
#RewriteCond %{HTTP_HOST} ^21at.net/ [NC]
#RewriteRule ^(.*)$ http://www.21at.net/$1 [L,R=301]
(7)隐藏Apache版本号及敏感信息
修改httpd.conf文件的下面配置为:
ServerTokens ProductOnly
ServerSignature Off
重启Apache,现在 http 头里面只看到:
Server: Apache
具体说明请参见《隐藏Apache的版本号及其它敏感信息》
(8)关闭TraceEnable
黑客攻击网站前一般会搜集网站的相关信息,以查找出系统可能存在的漏洞,比如系统版本和名称,网站服务器版本和名称,对外开放端口,确认网址IP地址和DNS信息,WEB资料收集等。
而TraceEnable选项是默认开启,用途是除错,在网站漏洞检测中是一个警告漏洞,建议关闭。
2.0.55以上版本的Apache服务器,可以在httpd.conf的尾部添加:
TraceEnable off
如果你使用的是Apache,确认rewrite模块激活(httpd.conf,下面一行前面没有#):
LoadModule rewrite_module modules/mod_rewrite.so
- 在各虚拟主机的配置文件里添加如下语句:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
注:可以在httpd.conf里搜索VirtualHost确定虚拟主机的配置文件。
其他资料:
《Apache下.htaccess文件的常用配置》
《25个Apache性能优化技巧推荐》