Apache web服务软件安装启动负载均衡反向代理配置
Posted 广东互动学堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache web服务软件安装启动负载均衡反向代理配置相关的知识,希望对你有一定的参考价值。
Apache服务简介
HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
相关模块
1.SSO Module - LemonLDAP
LemonLdap 是 Apache 的一个实现了 Web SSO 的模块,可处理超过 20 万的用户。
2.并发限制模块 - limitipconn
limitipconn 是一个 Apache 的模块,用来限制每个 IP 的并发连接数。支持 Apache 1.x 和 2.x。
3.日志监控模块
Apache Live Log 是一个 Perl 编写的模块,可以在浏览器上直接实时的通过 Ajax 技术浏览和监控 Apache 的 日志文件。
4.负载均衡模块
mod_backhand 是一个Apache 的负载平衡模块 。它定义了每个请求的HTTP重定向在一个异构的Apache服务器群集。每个请求的处理,并贯穿了一套“候选人的职能” ,以确定哪些服务器是最适合的回应。请求然后代理到该服务器。设施已到位,让你写您自己的动态加载决策算法。一切有关的要求和当前可用的资源可用于决策过 程。
5.图像处理模块
mod_gfx 是一个对图像进行即时处理的 Apache 模块,提供很多灵活的接口,包括:
Resizing
Resampling
Watermarking
Cropping
以后还将添加如下功能:
Add Text
Rotate
Draw Polygons
6. 压缩模块
mod-gzip-disk 是一个使用磁盘进行存储预压缩页面的 Apache 模块,与 mod-gzip 不同的是不需要每次请求的时候重新压缩。
使用方法:
gunzip -c mod_gzip_disk-0.5.tar.gz | tar -xvpf -
cd mod_gzip_disk
sudo make module
7. 音乐模块
mod_musicindex 是一个 Apache 用来处理音频文件的模块,类似 Perl 的 Apache::MP3,支持音频格式包括:MP3, Ogg Vorbis, FLAC, or MP4 / AAC ,可根据不同的音频属性进行排序列表、在线播放、下载、构建播放列表和搜索等,提供 RSS 和 Podcast 输出,支持多 CSS 和包下载。
8.LDAP 认证模块
LDAP 是轻量级目录访问协议,基于 X.500 标准,但更简单,并可根据需要进行定制。mod_psldap 是 Apache 用来执行 LDAP 认证和授权的模块。同时可通过 Web 界面进行简单的 LDAP 管理
9.带宽限制模块
mod_cband 是一个用来限制请求占用带宽的 Apache 模块。
10.CGI V8 引擎包
v8cgi 是一个很小的 C ++ 和 JS 文件集合,允许开发者在服务器端使用 JS 的模块,基本功能包括:IO, GD, mysql, Sockets, templates, FastCGI and Apache module.
安装HTTPD服务
1.在终端输入更新检查命令,sudo apt-get update
2. 在更新完成后(如果不想检查更新,也可直接输入此步)输入:sudo apt-get install apache2
3.完成后,在浏览器输入https://localhost 或者127.0.0.1,如果顺利跳出Apache版本网页,即代表安装成功
4.停止服务:sudo /etc/init.d/apache2 stop
配置httpd服务
查看版本
[root@conling 桌面]# httpd -vServer version: Apache/2.2.15 (Unix)Server built: Aug 2 2013 08:02:15123
httpd的常用的功能特性:
支持路径别名:alias
支持用户认证:基本认证和摘要认证authentication
支持虚拟主机:virtual host 在一个物理主机上提供多个站点
支持负载均衡:是反向代理的一个子特性
支持用户站点:当前用户都可以在自己的家目录下创建自己的站点
支持CGI:Common Gateway Interface 通用网关接口
目录结构
服务脚本:/etc/rc.d/init.d/httpd脚本配置文件路径:/etc/sysconfig/httpd运行目录:/etc/httpd配置文件: 主配置:/etc/httpd/conf/httpd.conf 扩展配置:/etc/httpd/conf.d/*.conf监听的Socket: tcp的80, 443是https/tcp的监听端口在内核中使用小于1023的端口的只有管理员文档根目录:/var/www/htmlCGI目录:/var/www/cgi-bin/12345678910
主配置文件结构
全局配置:对主服务器或虚拟主机都有效,且有些功能是服务器自身工作属性;
主服务器配置:主站属性
虚拟服务器:虚拟主机及属性定义
测试配置和查看的命令
service httpd configtest #测试配置文件有没有语法错误httpd -t #同上httpd -l #当前服务器所使用的模型及开启模块httpd -D DUMP_MODULES #当前服务器支持的模块service httpd reload #重新加载配置文件service httpd restart #重启httpd服务1234567891011
注意:修改配置文件后要重新加载配置文件,修改服务器监听端口后要重启服务
主配置文件的基本配置
配置httpd的工作属性时,指令不区分大小写,但有约定俗成的习惯:
单词的首字母大写;指令的值很有可能区分大小写;有些指令可以重复使用多次;
Listen [IP:]PORT //配置监听的端口,IP为可选项,不写则监听所有接口的端口。 例如:Listen 172.16.3.1:80 ,多个站点时需要监听多个接口。12
指定网站的主目录
DocumentRoot "/var/www/html" 1
Options //配置页面文件的访问属性Indexes #是否允许索引页面文件,建议关闭FollowSymLinks #是否跟随软连接文件SymLinksifOwnerMatch #跟随符号链接,只允许访问运行apache的用户有属主权限的文件ExecCGI: #是否允许执行CGI脚本;12345
基于客户端的访问控制
系统默认允许所有人访问Order #定义allow和deny那个为默认法则;写在后面的为默认法则:写在前面的指令没有显示定义的即受后面的指令控制:Order allow,denyAllow from all #所有人可以访问例:配置允许172.16.0.0/16访问,但不允许172.16.3.1访问Order allow,denyDeny from 172.16.3.1 #禁用一个IP访问Allow from 172.16.0.0/16 #允许一个网段访问123456789
userdir个人站点
# UserDir is disabled by default since it can confirm the presence# of a username on the system (depending on home directory# permissions).##UserDir disabled #注释此项## To enable requests to /~user/ to serve the user's public_html# directory, remove the "UserDir disabled" line above, and uncomment# the following line instead:#UserDir public_html #开启此项//在相应的用户家目录中创建文件public_html 即可实现访问。重新加载配置文件后用:http://HOST/~username/例如:http://172.16.3.1/~centos/1234567891011121314
定义默认主页
DirectoryIndex index.php index.jsp index.html1
日志功能
日志有两类:访问日志(格式自定义)、错误日志
错误日志:ErrorLog "/path/to/error_log_file"访问日志:CustomLog "/path/to/custom_log_file" logformat日志格式:{combined|common|agent}LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combinedLogFormat "%h %l %u %t "%r" %>s %b" commonLogFormat "%{Referer}i -> %U" refererLogFormat "%{User-agent}i" agent1234567891011121314151617
%h #主机名
%l #
%u #用户名
%t #请求到达的时间
%r #请求报文的起始行,方法
%s #
%b #响应报文的大小
%{Foobar}i #显示从发那个站点跳转过来
%{User-Agent}i #用户代理
基于用户访问控制
当你的网站或者站点的某个路径只想让你授权的用户访问时,就可以使用基于用户的访问控制
这里使用htpasswd命令建立用户帐号文件
htpasswd-c #第一次使用-c创建新文件,不是第一次不要使用此选项-m #用户密码使用MD5加密后存放-s #用户密码使用SHA加密后存放-p #用户密码不加密-d #禁用一个账户-e #启用一个账户12345678910111213
例如:
# htpasswd -c -m /etc/httpd/conf/.htpass tom
命令 选项 生成的用户文件路径及文件名 用户名
# htpasswd -m /etc/httpd/conf/.htpass jerry
# 再次添加用户时就不要使用-c选项了,否则会覆盖之前内容先生成
(1)建立用户帐号文件# htpasswd -c -m /etc/httpd/conf/.htpass tom(2)修改主配置文件(直接在主站添加用户认证功能)# vi /etc/httpd/conf/httpd.conDocumentRoot "/www/html" #此时网站根目录就是/www/htmlOptins IndexesAllowOverride AuthConfigAuthName "Oaly for employees." #登录提示信息,可自定义AuthType Basic #认证方式AuthUserFile /etc/httpd/conf/.htpass #用户帐号文件Require valid-user #允许的用户Require 指定可以访问的用户,可以指定单个用户,直接写用户名就可以了,用户名可以写多个用空格分开,也可以指定所有用户就用 valid-user1234567891011121314151617181920212223
对某个目录进行用户访问控制
虚拟主机
第一种方式,在主配置文件的末尾,有虚拟主机的模板
<VirtualHost *:8080> DocumentRoot /var/www/blog DirectoryIndex index.html</VirtualHost>Listen 8080//添加以上内容 意为启用监听8080端口,且该端口的网站目录为/var/www/blog,默认文档为index.html.//该方式为通过指定端口的形式来访问不同的站点。12345678
第二种方式,在同一台服务器上创建不同的主机名的虚拟主机。
(1)注释主服务器,添加虚拟主机# DocumentRoot "/www/html" #注释主服务器NameVirtualHost 172.16.3.1:80 #开启虚拟主机DocumentRoot /www/web1 #虚拟主机的网站根目录ServerName web1.lyd.com #主机名DocumentRoot /www/web2ServerName web2.lyd.com(2)给虚拟主机提供测试文件mkdir /www/web{1,2}echo web1.lyd.com > /www/web1/index.htmlecho web2.lyd.com > /www/web2/index.html(3)配置完后用 httpd -t 测试配置文件有没有错误(4)重启服务 service httpd restart(5)验证,修改验证客户端的hosts文件,windows客户端开始-->运行-->输入"c:windowssystem32driversetchosts"用记事本打开并添加以下行172.16.3.1web1.lyd.com172.16.3.1web2.lyd.com12345678910111213141516171819
配置防火墙
#修改防火墙配置: # vi + /etc/sysconfig/iptables #添加配置项 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #重启防火墙 # service iptables restart123456
检查端口状态
netstat -tln //查看相应的端口是否已开启
配置负载均衡
项目准备
负载均衡就是把所有用户的访问压力分散到多台服务器上,也可以分散到多个tomcat里。
现在只是做的一个测试例子,所以apache,tomcat都是装在我的电脑上,我的IP是172.16.X.X
首先要创建一个web项目,在项目的web.xml中需要加上以下配置,表明该应用可多应用分流处理,能进行Session的复制。
<display-name>TomcatClusterDemo</display-name> <distributable/> 123
把项目放到到tomcat1、tomcat2的webapps目录下。
我的目标是要用两个tomcat(tomcat1,tomcat2)来进行分流,这两个Tomcat的端口、AJP等配置要不一样。
tomcat1的server.xml:
<Server port="10005" shutdown="SHUTDOWN">12
<Connector port="10001" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />123
<Connector port="20001" protocol="AJP/1.3" redirectPort="8443" /> 1
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> 1
tomcat2的server.xml
<Server port="10006" shutdown="SHUTDOWN">12
<Connector port="10002" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />123
<Connector port="20002" protocol="AJP/1.3" redirectPort="8443" />1
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">1
修改httpd.conf
在Apache安装目录下找到Apache24/conf/下的 httpd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。
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_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
去掉 Include conf/extra/httpd-vhosts.conf前面的注释#,
在httpd.conf文档最下面加上以下代码:
ProxyRequests Off<Proxy balancer://mycluster>BalancerMember ajp://172.16.X.X:20001/ loadfactor=1 route=jvm1BalancerMember ajp://172.16.X.X:20002/ loadfactor=1 route=jvm2</Proxy> 12345
这里的配置是跟tomcat的server.xml配置对应的。172.16.X.X是tomcat服务器的IP,端口号对应tomcat中server.xml里的ajp的端口号,route对应jvmRoute的配置。
3.用文本编辑器打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上以下代码:
<VirtualHost *:80> ServerName 172.16.X.XServerAlias localhostProxyPass / balancer://mycluster/ stickysession=jsessionid nofailover=OnProxyPassReverse / balancer://mycluster/ErrorLog "logs/lbtest-error.log"CustomLog "logs/lbtest-access.log" common</VirtualHost> 12345678
到这里配置就基本上完成了。
然后写个测试页面test.jsp放到两个tomcat的项目里测试:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Cluster App Test</title></head><body>Server Info:<%out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%><%out.println("<br> ID " + session.getId()+"<br>");// 如果有新的 Session 属性设置System.out.println( "=========test==========");%></table></form></body></html>123456789101112131415161718192021222324
重启apache,tomcat1,tomcat2,
在浏览器输入http://172.16.X.X/test.jsp ,然后多刷新几次。
来源丨青峰科技
以上是关于Apache web服务软件安装启动负载均衡反向代理配置的主要内容,如果未能解决你的问题,请参考以下文章