Nginx反向代理后端多个Tomcat、Nginx+PHP服务器(Nginx的代理和负载功能)

需求分析:

现有3个二级域名,一个IP地址,要实现将这3个域名通过1个IP地址对外提供web服务,可使用IP+端口的方式对域名进行解析,且互不影响。如:


Domain1:www.huangming.org     IPADDR:192.168.1.33:80

Domain2:web1.huangming.org    IPADDR:192.168.1.33:8080

Domain3:web2.huangming.org    IPADDR:192.168.1.33:8080

其中Domain1作为Nginx反向代理的2台后端Read Server(Nginx+PHP),并实现负载均衡的功能。Domain2、3为通过Nginx反向代理的2台后端Tomcat Server。

实验拓扑:

环境介绍:

Hostname IPADDR Server
host1 192.168.1.231 Nginx PHP Tomcat MySQL
host2 192.168.1.232 Nginx PHP Tomcat MySQL
hxm(huangming.org) 192.168.1.33 Nginx-Proxy

Step1:在host1、2上搭建配置Tomcat虚拟主机,下面是相关配置

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml

1、打开server.xml配置文件,修改defaultHost="web1.huangming.org",并设置Hostname

2、指定webapp的目录存放路径appBase="/data/webapp1"

3、设置日志存放路径directory="/data/webapp1/logs"

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml    ;在文件最后增加一个Host

    <Engine name="Catalina" defaultHost="web1.huangming.org">   
      </Host>
        <Host name="web1.huangming.org" appBase="/data/webapp1" unpackWARS="true" autoDeploy="true">
            <Context path="" docBase="/data/webapp1" reloadabled="true" />
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/webapp1/logs"
                prefix="web1_access_log" suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>
    </Engine>

4、创建webapp的目录文件

[[email protected] ~]# mkdir /data/webapp1

[[email protected] ~]# mkdir /data/webapp1/{lib,classes,WEB-INF,META-INF,logs} -p

[[email protected] ~]# ls /data/webapp1/
classes  index.jsp  lib  logs  META-INF  WEB-INF

5、创建一个index.jsp页面

<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head>
        <title>web1.huangming.org test page.</title>
    </head>
    <body>
        <% out.println("Hello,This is web1."); %>
    </body>
</html>

6、在host2创建配置Tomcat,与host1相同

    <Engine name="Catalina" defaultHost="web2.huangming.org">
      </Host>
        <Host name="web2.huangming.org" appBase="/data/webapp2" unpackWARS="true" autoDeploy="true">
            <Context path="" docBase="/data/webapp2" reloadabled="true" />
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/webapp2/logs"
                prefix="web2_access_log" suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>
    </Engine>

Step2:Host1和Host2的Nginx虚拟主机搭建和配置

1、Host1配置一个WEB虚拟主机,添加一个server.conf配置文件

[[email protected] ~]# vim /etc/nginx/vhosts/www.conf

server {
    listen      80;
    server_name 192.168.1.231;
    index index.html index.htm index.php index.jsp;
    server_tokens       off;
    root        /data/www/html;
    access_log  /var/log/nginx/www_access.log main;

    location / {
        root    /data/www/html;
        index   index.html inex.htm index.php;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/lib/php/php-fcgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www/html$fastcgi_script_name;
    }

2、Host2配置一个WEB虚拟主机,添加一个server.conf配置文件

[[email protected] ~]# vim /etc/nginx/vhosts/www.conf

server {
    listen      80;
    server_name 192.168.1.232;
    index index.html index.htm index.php index.jsp;
    server_tokens       off;
    root        /data/www/html;
    access_log  /var/log/nginx/www_access.log main;

    location / {
        root    /data/www/html;
        index   index.html inex.htm index.php;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/lib/php/php-fcgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www/html$fastcgi_script_name;
    }

3、php-fpm的配置

# vim /usr/local/php/etc/php-fpm.conf

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /var/lib/php/php-fcgi.sock
user = php-fpm
group = php-fpm
listen.owner = nginx
listen.group = nginx
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

slowlog = /var/log/php/www_slow.log
request_slowlog_timeout = 1
php_admin_value[open_basedir]=/data/www/:/tmp/

Step3:Nginx反向代理服务器配置

在nginx配置文件的http模块中添加server配置


http {

include vhosts/*.conf;

......

upstream bbs {  ;负载均衡配置

ip_hash;
    server 192.168.1.231:80 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.1.232:80 weight=1 max_fails=3 fail_timeout=30s;
    }

server {    ;此server代理Domain1:www.haungming.org

listen      80;

server_name www.huangming.org huangming.org 192.168.1.33;

index index.html index.htm index.php index.jsp;

server_tokens       off;

access_log  /var/log/nginx/www.access.log main;

location / {

proxy_pass http://bbs;

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_next_upstream http_500 http_502 http_503 error timeout invalid_header;

proxy_buffering on;

proxy_redirect off;

proxy_connect_timeout 300s;

proxy_send_timeout 300s;

proxy_read_timeout 300s;

proxy_buffer_size 64k;

proxy_buffers 4 64k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

proxy_max_temp_file_size 1024m;

}

}

server {    ;此server代理Domian2:web1.huangming.org

listen      80;

server_name web1.huangming.org;

index index.html index.htm index.jsp;

server_tokens       off;

access_log  /var/log/nginx/web1.access.log main;

location / {

proxy_pass http://192.168.1.231:8080;

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_next_upstream http_500 http_502 http_503 error timeout invalid_header;

}

}

server {    ;此server代理Domain3:web2.huangming.org

listen      80;

server_name web2.huangming.org;

index index.html index.htm index.jsp;

server_tokens       off;

access_log  /var/log/nginx/web2.access.log main;

location / {

proxy_pass http://192.168.1.232:8080;

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_next_upstream http_500 http_502 http_503 error timeout invalid_header;

}

}

}

Step4:后端Nginx read server的日志记录

如果在web前端使用了代理,Nginx会使用默认的日志记录格式,记录不到客户的真实IP地址,故将两台host1、2的Nginx日志格式记录如下:


http {

......

log_format  main  ‘$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" ‘

‘$status $body_bytes_sent "$http_referer" "$request_time"‘

‘"$http_user_agent" $HTTP_X_Forwarded_For‘;

测试效果

[[email protected] ~]# curl http://192.168.1.33 -I

Step5:Nginx代理服务的日志记录

http {
......
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$gzip_ratio" "$http_referer"‘
                      ‘"$http_user_agent" "$http_x_forwarded_for" [$upstream_addr] ‘
                      ‘"$upstream_response_time" - "$request_time"‘;
}

测试效果:

其中"$upstream_addr"为响应客户请求的后端read server的IP address


Step6:Nginx的静态缓存、防盗链的相关配置,在host1、2上

server {
......
    location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {
         expires        7d;
         root   /data/www/html;
         access_log     off;
        valid_referers none blocked *.huangming.org huangming.org;
        if ($invalid_referer)
            {
                return 403;
            }
     }

    location ~ .*\.(js|css)?$ {
        expires         24h;
        access_log      off;
    }

    location ~ (static|cache) {
        access_log      off;
    }
}

Step7:测试Nginx反向代理和负载均衡

首先需要将域名做好解析,可以在本机hosts文件设置,或者在万网解析

1、测试Domian1

查看日志记录是否负载成功

2、测试访问Domain2、3(Tomcat服务器)

查看Nginx代理Tomcat的访问日志

[[email protected] ~]# tail -2 /var/log/nginx/web1.access.log 
101.233.172.217 - - [07/Apr/2016:11:51:02 +0800] "GET / HTTP/1.1" 200 145 "-" "-""Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko" "-" [192.168.1.231:8080] "0.007" - "0.007"
101.233.172.217 - - [07/Apr/2016:11:51:44 +0800] "GET / HTTP/1.1" 200 145 "-" "-""curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-" [192.168.1.231:8080] "0.005" - "0.005"
[[email protected] ~]# tail -2 /var/log/nginx/web2.access.log 
101.233.172.217 - - [07/Apr/2016:11:50:30 +0800] "GET /favicon.ico HTTP/1.1" 404 1016 "-" "-""Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" "-" [192.168.1.232:8080] "0.018" - "0.018"
101.233.172.217 - - [07/Apr/2016:11:51:56 +0800] "GET / HTTP/1.1" 200 145 "-" "-""curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-" [192.168.1.232:8080] "0.011" - "0.011"

Step8:关于Tomcat的默认管理主页

将name=localhost,修改为本机地址192.168.1.231,这样可以在本地通过访问这个IP进入Tomcat的默认主页和配置管理页面(这样与web1.huangming.org不产生冲突)

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml

Step9:Domain1:www.huangming.org站点目录的同步

这里在Host1和Host2之间使用NFS文件服务器,Host2挂载Host1的站点目录文件

[[email protected] conf]# df -Th
Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/sda3            ext4    13G  5.8G  6.1G  49% /
tmpfs                tmpfs  491M     0  491M   0% /dev/shm
/dev/sda1            ext4   190M   27M  154M  15% /boot
192.168.1.231:/data/www/html
                     nfs     13G  3.4G  8.6G  29% /data/www/html

结语:Nginx服务器的缓存配置

在web的前端,通常会加一层缓存服务器,作为缓存后端Read Server的网页内容,以加快访问速度,因此可以使用前端的Nginx代理服务器配置文件中添加缓存配置同时作为缓存服务使用

时间: 2024-08-06 09:25:16

Nginx反向代理后端多个Tomcat、Nginx+PHP服务器(Nginx的代理和负载功能)的相关文章

分别使用Nginx反向代理和Haproxy调度器实现web服务器负载均衡

1.1 使用nginx实现静态分离得负载均衡集群 1.1.1 Nginx负载均衡基础知识 本实验使用的主机是: 主机 IP地址 角色 centos23.cn 192.168.3.23 Nginx反向代理服务器 centos24.cn 192.168.3.24 web服务器 centos25.cn 192.168.3.25 web服务器 网络拓扑图: Nginx的upstream负载的5种方式,目前最常用得前3种方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同得后端服务器,如果后端服务器d

Nginx反向代理与后端服务采用连接池参数分析,长连接减少TIME_WAIT

前面已经讲过,在使用locust直连后端服务器时,可以通过设置HTTP头部为keep-alive,并在客户端断开连接,减少服务器的连接压力.因为由客户端断开连接,客户端的连接会变为TIME_WAIT状态,从而有效的节省了服务器的资源. 但通常,我们的服务器并不是简单的一个服务器端程序,一般还会有cache服务器,反向代理服务器,负载均衡服务器等等很多的中间部分,而这些模块之间都是通过新的连接相连,如果频繁的新建断开他们之间的连接,不仅会导致服务器端出现大量TIME_WAIT连接,还会导致性能的下

nginx 反向代理

关于什么是nginx以及为什么使用的理论网上还是有很多资料的,这里就不在赘述了.下面简单的说一下nginx的反向代理及实现 一.反向代理: 反向代理(Reverse Proxy)方式是指它根据客户端的请求,从后端的服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端. 与正向代理不同,正向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端(如Web服务器)作为代理使用, 而不是客户端. 客户端通过正向代理可以访问很多不同的资源,而反向代理是很多客户端都通

Web服务之Nginx反向代理与负载均衡

一.代理 正向代理: 正向代理是一个位于客户端和目标服务器之间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标服务器,然后代理向目标服务器转交请求并将获得的内容返回给客户端.客户端必须要进行一些特别的设置才能使用正向代理. 作用: 访问无法访问的服务器(翻墙,懂得) 加速访问目标服务器(链路加速) Cache缓存(访问加速) 实现客户端访问授权 隐藏访问者 反向代理: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转

Linux平台部署nginx反向代理实例

nginx有着优秀的代理性能,很多情况下,nginx常常被充当反向代理服务器负载后端应用web构建起一个高性能高可用的web集群(淘宝tengix ,京东的nginx集群都使用到了nginx反向代理功能),接下来给大家讲解Linux平台部署nginx反向代理实例. [本文档所介绍的内容适用于公司测试/生产等常见的nginx反向代理应用] 1. nginx环境部署前准备: 1.1相关软件以及系统 系统要求:Centos 6.0以上 (64位) 相关中间件:Nginx: 1.6.0 以上(包含1.6

centos7.4 搭建nginx反向缓存代理

nginx可以实现基于硬盘缓存的反向代理服务通过proxy_cache和fastcgi_cache两个功能模块完成配置 ----- 本例:nginx反向代理服务器192.168.80.81web服务器192.168.80.82win7客户机 192.168.80.79 -----### web服务器192.168.80.82 配置:安装简单的httpd,提供web服务即可 -----### nginx反向代理服务器192.168.80.81配置:1.上传反向代理插件.软件和解压:tar xzvf

nginx反向代理到后端tomcat,并将IP地址发送到后端的配置

nginx反向代理到后端,并将IP地址发送到后端的tomcat上. 假设我们的网站叫demo.demo.com 前端Nginx配置如下: /usr/local/nginx/conf/nginx.conf 在http段加上下面4行:     proxy_set_header X-Forwarded-For $remote_addr;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_set_head

nginx反向代理tomcat集群实现动静分离

我们都知道,nginx作为一个轻量级的web服务器,其在高并发下处理静态页面的优越性能是tomcat这样的web容器所无法媲美的,tomcat更倾向于处理动态文件,所以一个web应用可以通过nginx反向代理来实现动静分离,静态文件由nginx处理,动态文件由tomcat处理. 环境: hadoop0.updb.com    192.168.0.100    nginx server hadoop2.updb.com    192.168.0.102    tomcat server hadoo

tomcat配置及基于nginx、apache反向代理tomcat

如今,基于Web的应用越来越多,传统的Html已经满足不了如今的需求.我们需要一个交互式的Web,于是便诞生了各种Web语言.如Asp,Jsp,Php等.当然,这些语言与传统的语言有着密切的联系,如Php基于C和C 语言,Jsp基于Java语言.Tomcat即是一个Jsp和Servlet的运行平台. Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成.由于有了Sun的参与和支持,最新