nginx代理tomcat

http://blog.csdn.net/kongqz/article/details/6838989

http://www.800l.com/linux-nginx-tomcat-jdk.html

http://wangxr66.iteye.com/blog/1559082

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务。之初,曾有个小小的疑问为何不采用开源的apache、Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx、apache是基于http反向代理方式,位于ISO模型的第七层应用层。直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提供负载均衡。

=============================

http://www.lerx.com/html/2012/05/13/093207745.html

一般利用nginx做代理,网上搜索的资料均为下面这种方式:

在nginx.conf中

server {
        listen       80;
        server_name  localhost;
        root   /home/mysite/public_html;

        location / {
            index  index.html index.htm  index.jsp;
        }

        location ~ .*.jsp$
        {
                index index.jsp;
                proxy_pass http://localhost:8080;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
                proxy_set_header  Host  $http_host;

        }

        location ~ \.action$ {
                proxy_pass http://localhost:8080;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        Host $http_host;
        }

        location ~ ^/WEB-INF/* {
        proxy_pass http://localhost:8080;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

这种方式需要服务器开两个端口,一是80,二是8080。只使用80,只需如下配置,在tomcat下面的的配置中加入address。

<Connector port="8080" address="127.0.0.1" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

这种方式才真正实现了反向代理。

在多站点设置中,可能就不是这种方式,比如有二十个站点,tomcat的端口可能是8001-8020。有些客户的防火墙对上网行为进行了限制。比如,只允许访问外面的80端口,这样就造成了这些站点无法正常访问。

笔者的解决方法:

在网络配置中增加多ip。

linux环境中可以在/etc/sysconfig/network-scripts编写ifcfg-eth0-range0文件,内容如下:

DEVICE=eth0
BOOTPROTO=static
BROADCAST=172.16.20.255
HWADDR=00:04:23:C4:9A:0D

IPADDR_START=172.16.20.201
IPADDR_END=172.16.20.220
CLONENUM_START=1

NETMASK=255.255.255.0
NETWORK=172.16.20.0
ONBOOT=yes

这样系统启动的时候将产生172.16.20.201-220二十个ip,绑定在eth0。

http://www.lerx.com/html/2012/03/23/151125393.html的内容进行多站点配置。

将proxy_pass http://localhost:8080;改为:proxy_pass http://172.16.20.(201-220):8080;

在每个站点的Tomcat的conf的server.xml中相应的http端口中加入address=172.16.20.(201-220)。

如:

<Connector port="8005" address="172.16.20.205" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

在各用户站点目录中执行./tomcat.sh stop 再执行./tomcat.sh start重启tomcat即可。

这样,该服务器对外的web端口将只使用80,不再有其它端口。nginx将向IP为172.16.20.(201-220,绑定在本机)的8001-8020的端口发送请求,并返回给自己,然后从80端口返回页面给客户。

=======================================

http://www.netingcn.com/nginx-tomcat.html

使用nginx做为前端服务器,tomcat作为后端服务器,通过一些简单的配置就可以达到tomcat集群的目的。一般情况下,只需要在nginx的配置文件nginx.conf进行如下配置即可。

http {
    upstream  tomcat-host{
        server 192.168.1.201:8080 weight=3;
        server 192.168.1.202:8080;
        ip_hash;
    }  

    server {
        listen 80;
        server_name www.domain.com;  

        location / {
            proxy_pass              http://tomcat-host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
        }
    }
}

其中upstream是配置后端服务器列表、load balance的权重,ip_hash能够把来自同一个客户端的多次请求指派到某个固定的后端服务器,能一定程度的解决session问题,如果完美的解决集群后session问题,可以采用memcached的方式来处理。在server段配置中,主要就是proxy_pass,prxoy_pass目标地址就是上述设置的upstream名字,注意,不能缺少“http://”,proxy_set_header处理客户端的IP信息,由于前端是nginx,在tomcat的java应用中用request.getRemoteAddr(),得到的ip信息不再是客户端的ip,而是nginx服务器的ip,解决办法是需要修改java应用,大致可以使用如下代码:

String ip = request.getHeader("x-forwarded-for");

if (ip == null || "".equals(ip.trim())) {
	ip = request.getRemoteAddr();
} else {
	String[] ars = ip.split(",");
	ip = ars[ars.length-1].trim();
}

欢迎转载,转载请注明文章出处,谢谢!

========================================

http://www.cnblogs.com/XL-Liang/archive/2012/02/24/2367065.html

三、nginx与tomcat整合

Nginx与tomcat的整合其实就是只要配置好nginx.conf文件就可以了。

查看并修改nginx.conf文件:

vim /usr/local/nginx/conf/nginx.conf 

修改后的nginx.conf文件,红色部分为添加的关于tomcat的代码:

user  www www;worker_processes 1;error_log  /home/wwwlogs/nginx_error.log  crit;pid        /usr/local/nginx/logs/nginx.pid;#Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 51200;events     {         use epoll;         worker_connections 51200;     }http     {         include       mime.types;         default_type  application/octet-stream;        server_names_hash_bucket_size 128;         client_header_buffer_size 32k;         large_client_header_buffers 4 32k;         client_max_body_size 50m;        sendfile on;         tcp_nopush     on;        keepalive_timeout 60;        tcp_nodelay on;                  client_body_buffer_size 512k;          proxy_connect_timeout 5;          proxy_read_timeout 60;          proxy_send_timeout 5;          proxy_buffer_size 16k;          proxy_buffers 4 64k;          proxy_busy_buffers_size 128k;          proxy_temp_file_write_size 128k;                  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 256k;        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-javascript text/css application/xml;         gzip_vary on;        upstream tomcat_server {              server 127.0.0.1:8080;          }          #limit_zone  crawler  $binary_remote_addr  10m;server     {         listen       80;         server_name www.test.com;         index index.html index.htm index.jsp index.do default.jsp default.do index.php;         root  /home/wwwroot;        if (-d $request_filename)          {              rewrite ^/(.*)([^/])$http://$host/$1$2/ permanent;          }          location ~ \.(jsp|jspx|do|wsdl)?$ {              proxy_set_header Host $host;              proxy_set_header X-Forwarded-For $remote_addr;              proxy_pass http://tomcat_server;          }          location ~ .*\.(php|php5)?$             {                 fastcgi_pass  unix:/tmp/php-cgi.sock;                 fastcgi_index index.php;                 include fcgi.conf;             }        location /status {             stub_status on;             access_log   off;         }        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$             {                 expires      30d;             }        location ~ .*\.(js|css)?$             {                 expires      12h;             }        log_format  access  ‘$remote_addr - $remote_user [$time_local] "$request" ‘              ‘$status $body_bytes_sent "$http_referer" ‘              ‘"$http_user_agent" $http_x_forwarded_for‘;         access_log  /home/wwwlogs/access.log  access;     } include vhost/*.conf; }

在配置文件中,静态HTML网页、图片、js、css、Flash等使用Nginx来处理,以便得到更快的速度,文件扩展名为.JSP、.do、wsdl的请求,由Nginx反向代理Tomcat HTTP服务器来处理。

修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:

/usr/local/nginx/sbin/nginx -t

如果屏幕显示以下两行信息,说明配置文件正确: 

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

重新启动nginx:

/usr/local/nginx/sbin/nginx -s reload

nginx启动后,可以访问以下URL中的jsp实例程序,检查jsp程序能否运行。 http://localhost/examples/jsp/ 注意:nginx与tomcat的工作原理是由nginx代理tomcat输出网页,因此如果开启了防火墙,防火墙不用打开8080端口,也一样可以访问jsp页面。

========================================

http://bbs.linuxtone.org/thread-19493-1-1.html

upstream  adminweb  {
              server   192.168.10.30:80;
      }

server {
            listen       808;
            server_name  a.com;

upstream displayweb  {
              server   192.168.10.30:8888;
     }
    location / {
                    proxy_pass              http://adminweb;
                    proxy_redirect          off;
                    proxy_set_header       Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                    }
            }
server {
            listen       808;
            server_name  b.com;

    location / {
                    proxy_pass              http://displayweb;
                    proxy_redirect          off;
                    proxy_set_header       Host            $host;
                    proxy_set_header        X-Real-IP       $remote_addr;
                    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                    }
            }
}

============================================

http://jsczxy2.iteye.com/blog/1164102

server { 
listen 80; 
server_name xxx.com;

#charset koi8-r;

#DEFAULT: access_log logs/host.access.log main; 
access_log off; 
error_log logs/localhost.error.log notice buffer=32k;

#location / { 
# root html; 
# index index.html index.htm; 
#}

#方式一: 
location ~ ^/(.*)$ { 
proxy_pass http://localhost:8083; 
proxy_redirect off; 
proxy_set_header Host $host; 
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; 
proxy_send_timeout 90; 
proxy_read_timeout 90; 
proxy_buffer_size 4k; 
proxy_buffers 4 32k; 
proxy_busy_buffers_size 64k; 
proxy_temp_file_write_size 64k; 
}

#方式二: 
#location / { 
# proxy_pass http://www.xxx.com:8083$request_uri; 
#}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html 

error_page 500 502 503 504 /50x.html; 
location = /50x.html { 
root html; 
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80 

#location ~ \.php$ { 
# proxy_pass http://127.0.0.1; 
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 

#location ~ \.php$ { 
# root html; 
# fastcgi_pass 127.0.0.1:9000; 
# fastcgi_index index.php; 
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
# include fastcgi_params; 
#}

# deny access to .htaccess files, if Apache‘s document root 
# concurs with nginx‘s one 

#location ~ /\.ht { 
# deny all; 
#} 
}

http://jsczxy2.iteye.com/blog/1443419

使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP。要解决这个问题可以在Nginx配置一个新的Header,用来存储$remote_add,然后再Tomcat获取记录这个值。

1.Nginx新增配置:

  1. server {
  2. listen 80;
  3. server_name www.xxxxx.com;
  4. location / {
  5. proxy_pass http://IP:8080/;
  6. proxy_set_header X-Real-IP $remote_addr;
  7. }
  8. }

可以参见:http://wiki.nginx.org/NginxHttpProxyModule

其实就是新增了一个名为X-Real-IP值为真实客户端IP的头信息。

2.修改tomcat日志配置:(<host></host>中间)

  1. <Valve className="org.apache.catalina.valves.AccessLogValve"  directory="logs"  prefix="tomcat_access_log." suffix=".txt"  pattern="%a %r %t %{X-Real_IP}i" resolveHosts="false"/>

可以参见:http://www.docjar.org/docs/api/org/apache/catalina/valves/AccessLogValve.html

没有Nginx这一层的时候直接用%a就可以获得客户端IP,现在我们得用%{X-Real-IP}i 来获得真实的IP了。

转载至:http://oraclestudy.iteye.com/blog/1232858

http://www.oschina.net/question/248849_102602

上面的配置,我没有写全啊,你去Nginx 官网好好看看吧,很简单的,

详细的配置如下:

location ~ . *\.ation$

 { proxy_cache cache_one;

           proxy_cache_valid 200 304 12h;

           proxy_cache_valid 301 302 1m;

           proxy_cache_valid any 1m;

           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://bak_server;

  }

http://sndapk.blog.51cto.com/5385144/1009073

server{
listen 80;
server_name java.test.com;
access_log logs/java_test_com.access.log main;
location / {
index index.jsp;
root /data/webroot/java;
if ( !-e $request_filename) {
proxy_pass http://java;
}
}
location ~* .*\.(jpg|png|gif|js|css)$ {
expires 3h;
proxy_store on;
proxy_store_access user:rw group:r all:r;
proxy_temp_path /data/webroot/java;
include proxy.conf;
if ( !-e $request_filename) {
proxy_pass http://java;
}
}
location ~* \.(xml|class|jsp|properties)$ {
include proxy.conf;
if ( !-e $request_filename) {
proxy_pass http://java;
} 

} 

} 

upstream java {
server 192.168.2.127:8080 max_fails=3 fail_timeout=30s;
server 192.168.2.128:8080 max_fails=3 fail_timeout=30s;
}

 =============================================================================

http://chrinux.blog.51cto.com/6466723/1211622

一、Tomcat简介

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是7.0。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为7.0.39。

Tomcat最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O‘Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为Tomcat(英语公猫或其他雄性猫科动物)。而O‘Reilly出版的介绍Tomcat的书籍(ISBN 0-596-00318-8)[1]的封面也被设计成了一个公猫的形象。而Tomcat的Logo兼吉祥物也被设计成了一只公猫。

二、Java环境JDK的部署

2.1、JAVA介绍

JAVA组件主要包括四个独立却又彼此相关的技术:

java程序语言设计、java api、java class、JVM。其中JVM是java虚拟机,不同的系统上通过部署JVM来实现java程序的解析和运行,这样就实现了java的哲学原理:一次编译、到处运行!

JVM的实现方式:

一次解释器,解释字节并执行,是一句一句的进行解析;

即时编译器,解释后的数据会缓存下来,需要更多的内存来缓存解释后的结果;

自适应编译器:缓存20%的代码,提高80%左右的速度,此遵循“二八法则”!

JVM的种类:

sun的HotSpot JVM,其包括JRE和JDK,JRE只是实现java的运行环境,而JDK中包涵了JAVA的开发环境和运行环境;

开源的OpenJDK:其类似于JDK,也是实现开发和运行环境的组合。

JAVA根据应用领域的不同,java可分为两类    
   java SE:标准版,早先叫J2SE     
   java EE:企业版,J2EE     
   jave ME:移动版,J2ME

2.2、JAVA环境JDK安装和配置

java环境的安装可以使rpm、通用二进制、源码编译方式进行安装,这里使用通用二进制的bin格式的包来进行安装

使用jdk-6u21-linux-x64-rpm.bin包进行安装

[[email protected] ~]# chmod +x jdk-6u21-linux-x64-rpm.bin  #增加执行权限
[[email protected] ~]# ./jdk-6u21-linux-x64-rpm.bin         #安装jdk

默认的安装目录是在/usr/java 目录下,其中有/usr/java/ jdk1.6.0_21/bin/目录下是java的常用命令

设置环境变量、使系统可以调用JDK环境

[[email protected] java]# vim /etc/profile.d/java.sh
                             #添加环境变量,增加如下内容
JAVA_HOME=/usr/java/jdk1.6.0_21
export PATH=$PATH:$JAVA_HOME/bin
[[email protected] java]# . /etc/profile.d/java.sh
                            #执行下脚本,使环境立即生效
[[email protected] ~]# java –version       #查看java的版本等信息

java的相关参数:

-XX:+<option>开启此参数指定的功能
-XX:-<option>关闭功能
-XX:<option>=<value>给option指定的选项赋值
-XX:+PrintFlagsFinal显示所有参数
-D<name>=<value>:设置系统参数
java的相关监控命令
jps:JVM Process Status Toll,显示指定系统内所有使用Hotspot虚拟机进程的列表信息
jstat:JVM Statistic Monitoring Tool:收集并显示Hotspot虚拟机各方面的运行数据
jinfo:显示正在运行的Hotspot虚拟机的配置信息-sysprops pid 显示某个虚拟机的配置信息的
jmap:生成某hotspot虚拟机的内存转储快照,用于调试
可视化工具:
jconsole:java的监控与管理控制台
jvisualvm:java的虚拟平台的可视化工具
fg:使用jconsole工具
[[email protected] jdk1.6.0_21]# jconsole            #会启动一个图形界面


1

[[email protected] bin]# jvisualvm               #也是一个可视化工具

三、tomcat的安装和配置

3.1、tomcat的架构运行层次如下图

上图解释:

server:在最外层,每个server就是一个tomcat实例。又叫顶级组件

service服务:将一个和多个连接器关联到一个引擎上。一个service内部只能有一个引擎。

Engine,引擎:servlet的实现jvm,能够解码别人发来的请求,其内部有一个web服务器,其可以工作在80端口上。定义的时候需要定义一个默认主机,来响应没有指定主机的访问。

HOST:容器内的主机,类似apache的虚拟主机,主机可以有多了    
           Context,主机内的,类似于路径别名的定义

连接器:将server和引擎连接起来的工具。

其配置结构如下,配置文件为server.xml

<Server>
    <Service>
        <Connector />
        <Engine>
            <Host>
                <Context> </Context>
            </Host>
        </Engine>
    </Service>
</Server>

3.2、tomcat安装

此处使用最新版安装:apache-tomcat-7.0.40.tar.gz

[[email protected] ~]# tar xf apache-tomcat-7.0.40.tar.gz -C /usr/local/
                                        #解压到/usr/local
[[email protected] ~]# cd /usr/local/
[[email protected] local]# ln -sv apache-tomcat-7.0.40 tomcat
                                        #创建个连接文件

配置文件:

所有配置文件都在tomcat的安装目录下的conf目录内

主配置文件server.xml详解

启动tomcat
要想启动tomcat,首先需要输出环境变量,建立tomcat的环境变量
[[email protected] conf]# vim /etc/profile.d/tomcat.sh
                            #编辑环境变量,添加如下内容
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
[[email protected] conf]# . /etc/profile.d/tomcat.sh
                            #执行下脚本,使其加入到环境变量内来
[[email protected] bin]# catalina.sh version
                            #查看服务运行情况,也可以使用varsion.sh

启动tomcat

[[email protected] ~]# catalina.sh start

至此我们的tomcat已经能够起来了,访问以下网页测试以下

[[email protected] tomcat]# ls work/Catalina/localhost/_/org/apache/jsp/
index_jsp.class  index_jsp.java
             #java解析的工作目录,把index转换为.class和index.java

3.3、添加一个tomcat的服务脚本,便于管理tomcat服务

[[email protected] ~]# vim /etc/init.d/tomcat
                                    #建立服务脚本,添加如下内容
#!/bin/sh
# Tomcat init script for Linux.
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
exec $CATALINA_HOME/bin/catalina.sh $*

为其增加执行权限并增加至系统服务列表

[[email protected] ~]# chmod +x /etc/init.d/tomcat
[[email protected] ~]# chkconfig --add tomcat
[[email protected] ~]# chkconfig --list tomcat

关闭和启动服务就可以通过系统服务那样进行了

[[email protected] ~]# service tomcat stop
[[email protected] ~]# service tomcat start

上面提到的管理接口的时候需要用户名和密码

在tomcat-users.xml定义用户和密码,然后通过输入用户名和密码进行认证进入管理接口

[[email protected] conf]# vim tomcat-users.xml          #编辑tomcat的用户配置文件,在注释行外面添加如下内容
<role rolename="manager-gui" />
<user username="chris" password="chris" roles="manager-gui" />  #roles有三种:manager-gui实现状态和Manager App查看和管理;manger-status实现Host Manager功能,如果一个用户需要使用多个角色,角色中间使用逗号隔开即可,例如roles=“manger-status,admin-gui”

测试如下:

此时我们通过刚才的设置,用户还没有Host Manager的权限,如果想要管理主机,可以在刚才的roles的设置里增加上admin-gui角色即可!

四、架构Nginx实现反向代理tomcat

4.1、自己先部署一个jsp的网站、方便下面的操作,使用JavaCenter_Home_2.0_GBK.tar.bz2

在server.xml内新建一个虚拟主机

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml  #编辑配置文件,添加如下内容
  <Engine name="Catalina" defaultHost="www.chris.com">  #把默认引擎修改为我们自己的主机,方便测试
<Host name="www.chris.com" appBase="/web"
      unpackWARs="ture" autoDeploy="ture">
      <Context path="/" docBase="webapp" reloadable="ture" />
</Host>

由于使用的是基于主机名的虚拟主机,所以需要先能解析:

[[email protected] webapp]# vim /etc/hosts    #添加如下内容
172.16.7.20     www.chris.com                          #让其能解析域名
[[email protected] ~]# mkdir /web/webapp/    #建立app目录
[[email protected] ~]# tar xf JavaCenter_Home_2.0_GBK.tar.bz2 #解压网页
[[email protected] ~]# mv JavaCenter_Home_2.0_GBK/*  /web/webapp/  #所有文件移到app目录
注意:此网站依赖于mysql,利用yum安装下mysql
[[email protected] ~]# yum –y install mysql-server

安装JavaCenter

创建数据库和用户名

[[email protected] ~]# mysql
mysql> CREATE DATABASE jcenter;
mysql> GRANT ALL ON jcenter.* TO ‘jcenter‘@‘localhost‘ IDENTIFIED BY ‘chris‘;

安装配置以后,可以进入主页,显示如下

4.2、Nginx+tomcat实现其反向代理

架构图如下

安装并配置nginx

安装环境:

Development Libraries和Development Tools
[[email protected] ~]# groupadd -r -g 106 nginx
[[email protected] ~]# useradd -r -g 106 nginx
[[email protected] ~]# yum -y install opessl-devel pcre-devel

安装nginx

[[email protected] nginx-1.4.1]# cd nginx-1.4.1
[[email protected] nginx-1.4.1]# cd nginx-1.4.1
[[email protected] nginx-1.4.1]# ./configure   --prefix=/usr   --sbin-path=/usr/sbin/nginx   --conf-path=/etc/nginx/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=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_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   --with-pcre
[[email protected] nginx-1.4.1]# make && make install

提供nginx的服务配置脚本

[[email protected] nginx-1.4.1]# vim /etc/init.d/nginx   添加如下内容
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse #               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`
   options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
   for opt in $options; do
       if [ `echo $opt | grep ‘.*-temp-path‘` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

增加权限并加入服务列表

[[email protected] nginx-1.4.1]# chmod +x /etc/init.d/nginx
[[email protected] nginx-1.4.1]# chkconfig --add nginx
[[email protected] nginx]# service nginx start

保证nginx是能正常访问

修改配置文件,让请求其连接都代理至后端tomcat服务器、并定义使用缓存来缓存静态内容

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
keepalive_timeout  65;
    proxy_cache_path /nginx/cache levels=1:2 keys_zone=first:10m inactive=24h max_size=1g;
   upstream backend {
        server 192.168.0.1 weight=1;
   }
   #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        index index.jsp index.html;
        #access_log  logs/host.access.log  main;
        location ~* "\.(jsp|do)$" {
                proxy_pass http://backend;
        }
        location / {
            root   html;
           rewrite / http://172.16.7.6/index.jsp last;
        }
        location ~* "\.(jpg|jpeg|png|gif|html|css)$" {
                proxy_pass http://backend;
                proxy_cache first;
                proxy_cache_valid 200 24h;
                proxy_cache_valid 302 10m;
                add_header X-Cache-Status $upstream_cache_status;
        }

nginx.conf内只需要修改上面的内容即可,其详细解释如下图

通过以上配置我们实现了nginx反向代理tomcat的架构!测试如下:

至此我们的nginx实现tomcat的反向代理已经搭建成功,并且实现了动态网页代理到后端tomcat服务器上,静态网页缓存到本地!

五、Apache使用mod_jk和mod_proxy反向代理tomcat

5.1基本介绍

httpd通过mod_proxy或者mod_jk模块来对tomcat进行反向代理,而且其比Nginx的强大,Nginx的反向代理只能通过http协议进行代理,而apache既可以代理http协议,还可以代理ajp协议,而且mod_proxy 还可以实现session会话的绑定。mod_jk其开发就是对tomcat做反向代理的,通过apache反向代理tomcat的时候,我们可以在tomcat上禁止http连接器,从而来防止前端客户和tomcat通信,所有的连接都是通过apache的代理进来,这样可以增加后端主机的安全性!

5.2、环境配置和架构

Apache上网络基本配置

外网IP
DEVICE=eth0
BOOTPROTO=static
IPADDR=172.16.7.6
NETMASK=255.255.0.0
ONBOOT=yes
内网IP
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.0.2
NATMASK=255.255.255.0
ONBOOT=yes

Tomcat1上基本网络设置和域名解析文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改为如下内容
DEVICE="eth0"
BOOTPROTO="static"
GATEWAY="192.168.0.2"
IPADDR="192.168.0.1"
NETMASK="255.255.255.0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
设置域名解析hosts文件
vim /etc/hosts
192.168.0.1    tomcat1.chris.com

Tomcat2上基本网络配置和域名解析文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改为如下内容
DEVICE="eth0"
BOOTPROTO="static"
GATEWAY="192.168.0.2"
IPADDR="192.168.0.3"
NETMASK="255.255.255.0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
设置域名解析hosts文件
vim /etc/hosts
192.168.0.3   tomcat2.chris.com

5.3、在tomcat1和tomcat2上配置java环境并设置,然后建立测试主页

配置和设置环境上面已经详细介绍过,这里不在重述,只配置下虚拟主机和测试网页

tomcat1

虚拟主机的配置

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml   #编辑配置文件,修改为以下内容
<Engine name="Catalina" defaultHost="tomcat1.chris.com">
<Host name="tomcat1.chris.com"  appBase="/web"
            unpackWARs="true" autoDeploy="true">
      <Context path="/" docBase="webapp" reloadable="ture" />
</Host>
测试页面为前面搭建的jscent

tomcat2

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml   #编辑配置文件,修改为以下内容
<Engine name="Catalina"defaultHost="tomcat2.chris.com">
<Host name="tomcat2.chris.com"appBase="/web"
unpackWARs="true"autoDeploy="true">
<Context path="/"docBase="webapp"reloadable="ture"/>
</Host>

设置数据库并创建用户名和设置权限

[[email protected] webapp]# mysql
mysql> create database jsprun;
mysql> grant all on jsprun.* to ‘jsprun‘@‘localhost‘ identified by ‘chris‘;
安装、初始化jsprun
http://192.168.0.3/install.jsp

测试页面为前面搭建的jsprun,页面如下

5.4、安装配置apache

httpd-2.4.4安装依赖的较新apr-1.4.6.tar.bz2和 apr-util-1.5.2.tar.bz2,由于系统上的apr还被别软件所依赖,不能直接卸载,所以这里采用编译源码安装的方式进行

编译安装apr

[[email protected] ~]# tar xf apr-1.4.6.tar.bz2
[[email protected] ~]# cd apr-1.4.6
[[email protected] apr-1.4.6]# ./configure --prefix=/usr/local/apr --disable-ipv6
[[email protected] apr-1.4.6]# make && make install

编译安装apr-util

[[email protected] ~]#  tar xf apr-util-1.5.2.tar.bz2
[[email protected] ~]# cd apr-util-1.5.2
[[email protected] apr-util-1.5.2]# ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
[[email protected] apr-util-1.5.2]# make && make install

编译安装httpd

[[email protected] ~]# tar xf httpd-2.4.4.tar.bz2
[[email protected] ~]# cd httpd-2.4.4
[[email protected] httpd-2.4.4]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer  --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm  --enable-slotmem-plain --enable-watchdog
[[email protected] httpd-2.4.4]# make && make install

配置httpd服务,增加服务脚本

[[email protected] httpd-2.4.4]# vim /etc/init.d/httpd
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve #           HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
    echo -n $"Stopping $prog: "
    killproc -p ${pidfile} -d 10 $httpd
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
        status -p ${pidfile} $httpd
    RETVAL=$?
    ;;
  restart)
    stop
    start
    ;;
  condrestart)
    if [ -f ${pidfile} ] ; then
        stop
        start
    fi
    ;;
  reload)
        reload
    ;;
  graceful|help|configtest|fullstatus)
    $apachectl [email protected]
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
    exit 1
esac
exit $RETVAL

增加执行权限

[[email protected] httpd-2.4.4]# chmod +x /etc/init.d/httpd

加入系统服务列表

[[email protected] httpd-2.4.4]# chkconfig --add httpd
[[email protected] httpd-2.4.4]# chkconfig  httpd on
[[email protected] httpd-2.4.4]# chkconfig --list httpd

增加环境变量

[[email protected] ~]# vim /etc/profile.d/httpd.sh  添加如下内容
export PATH=$PATH:/usr/local/apache/bin
[[email protected] ~]# . /etc/profile.d/httpd.sh

反向代理的配置

httpd -D DUMP_MODULES  查看httpd的模块
proxy_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)
lbmethod_byrequests_module (shared)    #根据请求做负载均衡
lbmethod_bytraffic_module (shared)     #根据流量做负载均衡
lbmethod_bybusyness_module (shared)    #根据繁忙程度负载均衡
lbmethod_heartbeat_module (shared)     #heartbeat模块

修改配置文件/etc/httpd/httpd.conf

注释中心主机
增加虚拟主机的配置文件
#DocumentRoot "/usr/local/apache/htdocs"
ServerRoot "/usr/local/apache"
PidFile "/var/run/httpd.pid"                # 增加pid
# Virtual hosts
#Include /etc/httpd/extra/httpd-vhosts.conf
Include /etc/httpd/extra/httpd-proxy.conf
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so     #启动这两个模块,被proxy使用的
LoadModule slotmem_plain_module modules/mod_slotmem_plain.so

增加虚拟主机配置

[[email protected] logs]# vim /etc/httpd/extra/httpd-proxy.conf  添加如下内容
<VirtualHost *:80>
ProxyRequests Off
ProxyPass / http://192.168.0.1:80/          #前面把tomcat的8080端口修改为了80
ProxyPassReverse / http://192.168.0.1:80/
<Proxy *>
  Require all granted
</Proxy>
<Location  / >
  Require all granted
</Location>
</VirtualHost>

配置参数解释

ProxyPreserveHost {On|Off}:如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无需打开此功能。

ProxyVia  {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多级代理中控制代理请求的流向。默认为Off,即不启用此功能;On表示每个请求和响应报文均添加Via:;Full表示每个Via:行都会添加当前apache服务器的版本号信息;Block表示每个代理请求报文中的Via:都会被移除。

ProxyRequests {On|Off}:是否开启apache正向代理的功能;启用此项时为了代理http协议必须启用mod_proxy_http模块。同时,如果为apache设置了ProxyPass,则必须将ProxyRequests设置为Off。

ProxyPass  [path]  !|url  [key=value key=value ...]]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径。使用此指令时必须将ProxyRequests的值设置为Off。需要注意的是,如果path以“/”结尾,则对应的url也必须以“/”结尾,反之亦然。

重启服务,测试如下

至此我们实现了利用mod_proxy实现了一个tomcat的代理

==============================================================

下面配置下mod_jk模块进行配置实现反向代理功能

mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。,在apache服务器上安装

编译、安装tomcat-connectors

[[email protected] ~]# tar xf tomcat-connectors-1.2.37-src.tar.gz
[[email protected] ~]# cd tomcat-connectors-1.2.37-src/native/
[[email protected] native]# ./configure --with-apxs=/usr/local/apache/bin/apxs  #编译apache的模块
[[email protected] native]# make && make install

apache要使用mod_jk连接器,需要在启动时加载此连接器模块。为了便于管理与mod_jk模块相关的配置,这里使用一个专门的配置文件/etc/httpd/extra/httpd-jk.conf来保存相关指令及其设置。其内容如下:

# Load the mod_jk
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties jk配置文件
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA        把那个uri路径送到那个tomcat上去,TomcatA是jvm的名称

为了让apache能使用/etc/httpd/extra/httpd-jk.conf配置文件中的配置信息,需要编辑/etc/httpd/httpd.conf,添加如下一行:
Include  /etc/httpd/extra/httpd-jk.conf

对于apache代理来说,每一个后端的Tomcat实例中的engine都可以视作一个worker,而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker。约定俗成,配置这些信息的文件通常为workers.properties,其具体路径则是使用前面介绍过的JkWorkersFile指定的,在apache启动时,mod_jk会扫描此文件获取每一个worker的配置信息。比如,我们这里使用/etc/httpd/extra/workers.properties。

配置apache实用mod_jk模块

[[email protected] bin]# vim /etc/httpd/extra/httpd-jk.conf 添加 如下内容
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  tomcat1       #tomcat1 必须和workers.properties内定义的相同
JkMount  /jkstatus/  stat1

根据前文中的指定,这里使用/etc/httpd/extra/workers.properties来定义一个名为TomcatA的worker,并为其指定几个属性。文件内容如下:

[[email protected] bin]# vim /etc/httpd/extra/workers.properties
worker.list = tomcat1,stat1
worker.tomcat1.type = ajp13
worker.tomcat1.host = 192.168.0.1
worker.tomcat1.port = 8009
worker.tomcat1.lbfactor=1
worker.stat1.type = status

重启httpd服务,并进行测试

[[email protected] bin]# service httpd restart

测试页面如下

通过上面的配置和测试,现在已经实现了apache基于mod_proxy和mod_jk反向代理tomcat,下面我们通过apache和两个tomcat实现负载均衡

tomcat1上的配置

修改配置文件,增加jvmRoot的定义,这是集群中必须配置的参数

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml  #修改下面参数
<Engine name="Catalina" defaultHost="tomcat1.chris.com" jvmRoot="tomcat1">

重启服务使其生效

[[email protected] webapp]# service tomcat stop

tomcat2上的配置

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml  #修改下面参数
<Engine name="Catalina" defaultHost="tomcat2.chris.com" jvmRoot=tomcat2"">
[[email protected] webapp]# service tomcat start
[[email protected] webapp]# service tomcat stop

两台tomcat服务器上只需要修改上面这两个参数,下面在apache上进行配置

基于mod_jk的负载均衡

修改/etc/httpd/extra/httpd-jk.conf为如下内容:
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  lbcluster1                #lbcluster1集群名称
JkMount  /jkstatus/  stat1

编辑/etc/httpd/extra/workers.properties,添加如下内容:

worker.list = lbcluster1,stat1 --lbcluster1集群名称
worker.TomcatA.type = ajp13
worker.TomcatA.host = 172.16.100.1
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 5
worker.TomcatB.type = ajp13
worker.TomcatB.host = 172.16.100.2
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 5
worker.lbcluster1.type = lb  负载均衡work,lb内置的类
worker.lbcluster1.sticky_session = 1     会话绑定
worker.lbcluster1.balance_workers = TomcatA, TomcatB 集群中的实列
worker.stat1.type = status

重启服务,使配置生效

[[email protected] ~]# service httpd restart

测试访问,已经代理到不同的后端 主机上了

基于mod_proxy的负载均衡

先禁用上面基于mod_jk的配置文件

[[email protected] ~]# vim /etc/httpd/httpd.conf
Include /etc/httpd/extra/httpd-proxy.conf          #启用mod_proxy的配置
#Include /etc/httpd/extra/httpd-jk.conf            #禁用mod_jk的配置

配置proxy负载均衡

在httpd.conf的全局配置中配置如下内容:

ProxyRequests Off
<proxy balancer://lbcluster1>
BalancerMember ajp://192.168.0.1:8009 loadfactor=10 route=tomcat1
BalancerMember ajp://192.168.0.3:8009 loadfactor=10 route=tomcat2
</proxy>

在虚拟主机中实现代理

<VirtualHost *:80>
ServerName www.magedu.com
ProxyPass / balancer://lbcluster1/ stickysession=jsessionid
ProxyPassReverse / balancer://lbcluster1/
</VirtualHost>

测试结果如下

至此实现了apache基于mod_jk和mod_proxy的负载均衡的反向代理的功能。这两个模块的配置原理大致相同,就是所使用的命令和配置位置有点小出入,需要注意下!

由于配置过程中命令繁多,难免会出现错误,还望各位大牛们指出~~谢谢!

本文出自 “Chris—on the way” 博客,请务必保留此出处http://chrinux.blog.51cto.com/6466723/1211622

时间: 2024-10-11 00:54:32

nginx代理tomcat的相关文章

Nginx代理Tomcat实例安装

一. JDK安装 下载jdk和tomcat(一般tomcat版本要和jdk对应,及tomcat7对应jdk1.7) mkdir /usr/java tar xf jdk1.7.0_75.tar.gz -C /usr/java/ 然后在/etc/profile中添加如下内容: export JAVA_HOME=/usr/java/jdk1.7.0_75 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH

Docker Compose 一键部署Nginx代理Tomcat集群

Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [[email protected] ~]# tree compose_nginx_tomcat/ compose_nginx_tomcat/ ├── docker-compose.yml ├── mysql │   ├── conf │   │   └── my.cnf │   └── data ├── nginx │   ├── Dockerfile │   ├── nginx-1.12.1.tar.gz │  

使用nginx代理tomcat

接上一遍博文的配置,这里不再说明 tomcat安装配置:http://chenshoubiao.blog.51cto.com/6159058/1885232 把端口改回8080 /etc/init.d/tomcat stop cd /usr/local/nginx/conf vim nginx.conf 在最后括号前面加上如下内容 include vhosts/*.conf; 保存退出 mkdir vhosts cd vhosts vim proxy.conf  就是代理的配置文件 写入如下内容

nginx 代理tomcat 访问上传后图片显示问题

nginx error log 2016/01/05 10:55:28 [crit] 15049#0: *143858 open() "nginx/proxy_temp/2/12/0000000122" failed (13: Permission denied) while reading upstream, client: 127.0.0.1, server: api.abc.com, request: "GET /image/690/1451876181382.jpg

使用 nginx 代理 tomcat 服务器

server { listen 80; server_name xxx.com; root /usr/share/tomcat/webapps/xxx; error_log logs/wechat-jsp.err.log; location / { proxy_redirect off; proxy_pass http://127.0.0.1:8080/xxx/; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$ { expires

nginx下载,安装,基础命令,和代理tomcat例子理解

一.nginx应用场景: 1.反向代理(用的非常多) 通俗就是,互联网的请求,nginx接受到后,转给内部的服务器,然后返回的内容给nginx,nginx再返回给请求放.因为是向外的,所以叫反向代理服务器 2.负载均衡(常用) 通俗就是将这一项业务功能,分给多个服务器使用,也是避免了一个服务器挂了,就over的情况,因为可以访问到其他的. 3.HTTp服务器 动静分离 4.正向代理 二 windows下载 及安装 下载稳定版本,以nginx/Windows-1.12.2为例,直接下载 nginx

Nginx+keepalived+Tomcat集群架构

keepalived实现nginx发生故障时,自动切换,实现nginx反向代理的高可用. 环境: CentOS6.4  64bit: Jdk6.tar.gz Aapache-tomcat-6.0.41.tar.gz nginx-1.4.2.tar.gz 主机规划: keepalived-master:192.168.115.10 keepalived-slave: 192.168.115.20 tomcat1         : 192.168.115.30 tomcat2         :

jpress-配合nginx与tomcat安装

目录 1. 前言 2. yum安装tomcat 2. yum安装MySQL 3. 下载JPress并安装 4. 配置tomcat使其可以部署多个网站 5. 安装nginx并配置 6. 将已经安装好的jpress打包 参考资料 1. 前言 tomcat是一款开源软件,是运行Java后端程序的,简单来说就是执行.jsp程序的,tomcat自身也可以运行静态资源,如html,css等,但通常tomcat还是会配合appache或nginx使用,以达到更好的性能.其官网是tomcat.apache.or

nginx反向代理tomcat提示13 permission denied while connecting to upstream

nginx反向代理tomcat提示13 permission denied while connecting to upstream,网上很多都是说13 permission denied while reading to upstream,这是两个完全不同的错误,我遇到的如下截图: 查看selinux日志发现错误: 后来发现是selinux的问题,于是先关掉selinux:setenforce 0:然后再访问果然好使. 于是启用selinux,再执行下面的命令,修改selinux的值: set