apache与tomcat 反向代理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache与tomcat 反向代理相关的知识,希望对你有一定的参考价值。
参考技术A apache与tomcat 反向代理首先,有client proxy server
正向代理:有多个client,想要访问server,这时client与proxy是一个lan,proxy将client的请求转发给server,server只知道有人来请求,但不知道是谁(因为被代理了)
反向代理:这时proxy与server是一个lan,client想要访问server,proxy将client的请求拿到,之后从server里挑了一个出来,应答给client,对于client来说,它以为自己是直接访问server,其实却是proxy经过操作后的结果。
正向代理代理客户端,反向代理代理服务端
反向代理好处:
1. 提升对静态文件的处理性能
2. 利用 Web 服务器来做负载均衡以及容错
3. 无缝的升级应用程序
这三点对一个 web 网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个 Tomcat
宕机或者是升级程序导致用户访问不了。
Apache与tomcat的反向代理有两种方案,一种方案是用mod_jk,另一种方案使用Apache2.2之后自带的模块prxoy,这边主要讲proxy。
关于proxy,有2种代理的方法,一种是用ajp_proxy,一种是http_proxy。从名字上就可以看出,这是两种不同协议的代理方式,因为同属于proxy模块,配置起来差别不大。
安装好Apache后,它有许多自带的模块是不开启的,我们想用proxy模块,需要自己开启它。Apache目录下的conf\httpd.conf,Apache在启动时会根据里面的内容自动加载模块,不需要加载的模块在里面是被注释掉的,我们要做的是把注释去掉
#---------------------start------------------------
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule rewrite_module modules/mod_rewrite.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 speling_module modules/mod_speling.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule buffer_module modules/mod_buffer.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule xml2enc_module modules/mod_xml2enc.so
----------------------end---------------------
将Include conf/extra/httpd-vhosts.conf注解去掉
模块的具体作用详解Apache官网说明
之后修改 conf\extra\httpd-vhosts.conf
可以在这里面看到相应配置
serveradmin :当出错的时候显示管理员的邮箱地址
documentroot :设置Apache自己的本地目录地址,SRVROOT为相对地址,使用时还有修改<directory>,以获取目录权限,这2个在httpd.conf中修改,或者不修改,直接写自己的地址
servername:要代理的地址
serveralias :要代理的地址的别名
errorlog:错误日志地址
customlog :日志地址
<VirtualHost*:80>
ServerAdmin husun@hotmail.com
ServerName localhost
ServerAlias localhost
ProxyPass /ajp://127.0.0.1:8009/
ProxyPassReverse /ajp://127.0.0.1:8009/
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
注意:这里的8009是与tomcat中ajp协议端口号是一致的。这样就实现了在访localhost的时候,Apache将这个请求代理成了 127.0.0.1:8009。不过反向代理的主要作用是维护服务端的安全,所以要做负载均衡,如下图官网所示,下图不全,具体请到官网上看
我的,简单的负载均衡就完成了
loadfactor表示响应次数,例如9119响应一次,9219响应2次,这样算一轮,
proxyset是负载均衡算法的加载,这些算法有自己的模块,使用时要先加载。
官网链接:http://httpd.apache.org/docs/2.4/
负载均衡参考:https://blog.csdn.net/ranxiaoqian/article/details/58594504
两种方案三种方式:https://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html
Nginx+apache/Tomcat实现反向代理与动静分离
其实本人比较喜欢nginx跑静态和做负载反向代理,动态php还是交给apache处理比较稳定,jsp就交给tomcat、resin或jboss。nginx跑静态的能力是无与伦比的,是目前web服务器里最强的。nginx和apache、tomcat、resin的动静分离配置其实很简单,就几句配置,稳定性也非常好。
1、nginx和apache的动静分离配置:
把下面配置放到nginx配置文件相应的server { }里面,如果使用其他端口号,改一下就行:
#所有php的动态页面均交由apache处理
1
2
3
4
5
6
|
location ~ \.(php)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:88; } |
#所有静态文件由nginx直接读取不经过apache
1
2
3
4
|
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 15d; } location ~ .*\.(js|css)?$ { expires 1h; } |
如果之前设置了FastCGI的,把下面的配置注释掉:
1
2
3
4
5
6
7
8
|
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root /var/www/html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # include fastcgi.conf; #} |
重启nginx就生效,如图所示,标头显示nginx,phpinfo里面显示是apache,说明动静分离生效。
2.niginx和tomcat的动静分离配置:
#主配置文件配置
1
|
[[email protected] ~] # vi /usr/local/nginx/conf/nginx.conf |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
user nginx; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { worker_connections 1024; } http { include 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 logs/access.log main; sendfile on; keepalive_timeout 65; #gzip压缩功能设置 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascripttext/css application/xml; gzip_vary on; server { listen 80; server_name www.test.com; location / { #jsp网站程序根目录,一般nginx与tomcat在同一个目录 root /usr/local/tomcat/webapps/ROOT; index index.html index.jsp index.html; } location ~ .*.jsp$ { index index.jsp; proxy_pass http://127.0.0.1:8080; #来自jsp请求交给tomcat处理 proxy_redirect off; proxy_set_header Host $host; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数 proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 6 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } location ~ .*\.(gif|jpg|png|bmp|swf)$ #由nginx处理静态页面 { expires 30d; #使用expires缓存模块,缓存到客户端30天 } location ~ .*\.( jsp|js|css)?$ { expires 1d; } error_page 404 /404.html; #错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } |
#编写nginx启动、停止、重启等SysV管理脚本,方便使用
1
|
[[email protected] ~] # vi /etc/init.d/nginx |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#!/bin/bash # chkconfig: 345 99 20 # description: Nginx servicecontrol script PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $PROG echo "Nginx servicestart success." ;; stop) kill -s QUIT $(cat $PIDF) echo "Nginx service stopsuccess." ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) echo"reload Nginx configsuccess." ;; *) echo "Usage: $0{start|stop|restart|reload}" exit 1 esac |
1
2
3
4
|
[[email protected] ~] # chmod +x /etc/init.d/nginx [[email protected] ~] # service nginx restart [[email protected] ~] # chkconfig --add nginx [[email protected] ~] # chkconfig nginx on |
以上是关于apache与tomcat 反向代理的主要内容,如果未能解决你的问题,请参考以下文章
Nginx+apache/Tomcat实现反向代理与动静分离