tomcat+nginx

目录

1.代理服务

1)反向代理:web服务器调度器

2.Nginx+Tomcat 构筑Web服务器集群的负载均衡

1.nginx 核心特点

2.Nginx的upstream负载的5中策略

1.轮询(默认)

2.IP_hash

3.least_conn

4.url_hash

5. fair(第三方)

3.Nginx部署

1)添加模块

2) 上传 模块并解压 

3)编译安装nginx

 部署tomcat

安装jdk

上传软件包

解压jdk

配置jdk环境变量

查看java环境 

安装tomcat 

解压软件包

重命名目录

tomcat启动脚本

启动脚本添加执行权限

建立系统服务文件 

启动tomcat

添加开机自启 

查看端口和进程

安装mysql-connector 

创建测试页面

 配置ngix负载均衡

nginx -sticky-module模块

负载均衡与健康检查

测试:

健康检测

nginx的proxy缓存使用

修改nginx配置文件:

测试:

测试缓存功能

​编辑 删除缓存:

后端服务器获取客户真实IP

nginx代理服务器的配置

tomcat作为后端服务器的配置 

补充说明

负载配置说明

ngiinx怎么把请求把转发给后端服务器

upstream每个设备状态

使用nginx实现静动分离

修改配置文件


1.代理

代理服务分为反向代理和正向代理

正向代理:用于代理内部网络对 Internet 的连接请求,客户端指定代理服务器,将要给web服务器发送的请求先发送到代理服务器,由代理服务器访问web服务器,web服务器将会应返回给代理,代理将回应返回给客户端。

反向代理:与正向代理相反,代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web服务器

1)反向代理:web服务器调度器

反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web服务器(可能是apache、nginx、tomcat、iis等)

也可理解为客户端给web服务器提供了一个同一的访问入口,通过反向代理服务把用户的请求发给不同的web服务器

2)反向代理的作用

1.保护网站安全:来自互联网的任何请求都必须经过代理服务器

2.缓存web服务器上的某些静态资源,减轻web服务器的负载压力,当代理服务器没有缓存会到web服务器上拉取数据(穿透缓存)在响应客户端,如代理有缓存则直接响应给客户端(缓存命中)。

3.实现负载均衡:充当负载均衡算法均衡的分发请求到各个集群中的web服务器

2.Nginx+Tomcat 构筑Web服务器集群的负载均衡

1.nginx 核心特点

Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器

1)跨平台:Nginx 可以在大多数OS编译运行,也有Windows的版本

1)配置简单,易上手

3)非阻塞、高并发连接:依靠于epoll模型,请求的基本过程:建立连接—>接收数据—>发送数据

在系统的底层来说就是读写事件,访问就是读,向web提交数据就是写

非阻塞调用的方式: 如事件没处理完成,进程不会挂起,可以处理其他请求,进程会定时的检查事件处理是否就绪,提高了并发处理,非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程

4)事件驱动:通信机制采用epoll模型事件处理机制,支持更大的并发连接。它是异步非阻塞处理机制。

以epoll模型为例:当事件没有准备好时,就放入epoll(队列)里,当事件就绪就去处理该事件,没就绪的事件则在epoll里面等待。这里的并发请求,是指未处理完的请求。线程只有一个,所以同时能处理的请求只有一个,优势也在于无需创建线程。

通过异步阻塞的事件处理机制,nginx实现由进程循环处理多个准备好的事件,实现高并发和轻量级

5)Master/Worker结构:一个master进程,生成一个或多个worker(工作进程)。

当一个工作进程挂掉,主进程会创建一个工作进程,不会影响所有的请求,降低了风险

6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)

7)内置健康检查功能:当某台web服务器宕机了, 不会影响客户端访问,代理就不会给宕机的web服务器发送请求

8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存

9)稳定性高:用于反向代理,宕机的概率微乎其微

2.Nginx的upstream负载的5中策略

nginx 一般用来做反向代理和负载均衡,将客户端请求发送到后端的tomcat,并将tomcat的响应发送给客户端,用于upstream定义web池里的服务器,实现负载均衡

1.轮询(默认)

 轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如某台服务器宕机,故障系统被自动剔除也称(RR算法),使用户访问不受影响。

Weight指定轮询权值 ,Weight值越大,分配到的访问机率越高。也称(WRR)加权轮询,当每个web服务器性能不均的情况下使用,不设置加权轮询默认轮询都是1

2.IP_hash

 ip_hash :每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,解决了动态网页存在的session共享问题,如果这个节点不可用了,会发到下个节点,而此时没有session同步的话就注销掉了

3.least_conn

 least_conn :请求被发送到当前活跃连接最少的real server上。会考虑weight的值

4.url_hash

 url_hash :此方法按访问url的hash结果来分配请求,把一个用户相同访问的请求,分配给一个服务器,可以进一步提高后端缓存服务器的效率

5. fair(第三方)

fair :更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡

根据后端服务器的响应时间来分配请求,响应时间快的优先分配

fair算法是第三方负载均衡策略,nginx本身不支持,须下载Nginx的upstream_fair模块。

3.Nginx部署

当已经有了一台安装nginx服务器,但是缺少某些模块怎么解决:

1.重新安装

2.把要安装的模块编译到nginx中,但不需要执行mkake install,把编译生成的nginx程序替换之前的nginx程序

1)添加模块

nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载

如果你想在已安装好的nginx上添加第三方模块,依然需要重新编译,但为了不覆盖你原有的配置,请不要make install,而是直接拷贝可执行文件‘

注:

结合proxy和upstream模块实现后端web负载均衡

使用proxy模块实现静态文件缓存

结合nginx默认自带的ngx_http_proxy_module模块 ngx_http_upstream_module模块实现后端服务器的健康检查,也可以使用第三方模块nginx_upstream_check_module

nginx-sticky-module扩展模块实现会话黏贴(保持会话)

ngx_cache_purge 实现更强大的缓存清除功能

后两个都属于是第三方模块,需提前下好源码,编译时通过--add-moudle=src_path一起安装。

2) 上传 模块并解压 

tar zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/src/

tar zxvf master.tar.gz -C /usr/local/src/

 cd /usr/local/src/nginx-1.10.3/

3)编译安装nginx

即使在安装好的nginx编译模块,只是无需make install操作,其他都需操作

删除解压过的nginx源码包,重新解压

rm -rf nginx-1.10.3

tar zxf nginx-1.10.3.tar.gz -C /usr/local/src

cd /usr/local/src/

cd nginx-1.10.3/

查看nginx模块

nginx -V

 在此基础上添加新的模块 :

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_realip_module --with-http_ssl_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  --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_flv_module --add-module=../ngx_cache_purge-2.3 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42

make编译

[root@web nginx-1.10.3]# make

 在objs下编译生成的nginx程序

 覆盖原来的nginx程序

注意:停掉nginx服务区

cp objs/nginx /usr/local/nginx/sbin/nginx

启动nginx

没有代理代理缓存的路径,我们创建一个

 mkdir -p /var/tmp/nginx/client

 在启动nginx查看模块:

 部署tomcat

安装jdk

卸载openjdk,安装之前需要查看下系统是否安装了openjdk,如果安装了openjdk,请先卸载,否则安装不了oracle官方的jdk

 yum remove java-* -y

上传软件包

解压jdk

 tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

配置jdk环境变量

vim /etc/profile

JAVA_HOME=/usr/local/jdk1.8.0_171 
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
export PATH JAVA_HOME CLASSPATH

source /etc/profile  #使环境变量生效

查看java环境 

java -version

安装tomcat 

解压软件包

tar  zxvf apache-tomcat-8.5.42.tar.gz -C /usr/local/

重命名目录

cd /usr/local/

mv apache-tomcat-8.5.42/ tomcat

tomcat启动脚本

vim /etc/init.d/tomcat

#!/bin/bash
# Tomcat init script for Linux
# chkconfig: 2345 96 14
# discription: The Apache Tomcat Server/JSP container
JAVA_HOME=/usr/local/jdk1.8.0_171/
CATALINA_HOME=/usr/local/tomcat
start_tomcat=$CATALINA_HOME/bin/startup.sh       #tomcat启动文件
stop_tomcat=$CATALINA_HOME/bin/shutdown.sh     #tomcat关闭文件

start() {
        echo -n "Starting tomcat: "
        ${start_tomcat}
        echo "tomcat start ok."
}
stop() {
        echo -n "Shutting down tomcat: "
        ${stop_tomcat}
        echo "tomcat stop ok."
}

# See how we were called

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        sleep 10
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
esac

exit 0

启动脚本添加执行权限

chmod +x /etc/init.d/tomcat 

建立系统服务文件 

vim /lib/systemd/system/tomcat.service

[Unit]
Description=tomcat
After=network.target

[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/jdk1.8.0_171/
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/etc/init.d/tomcat start
ExecStop=/etc/init.d/tomcat stop
ExecRestart=/etc/init.d/tomcat restart
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启动tomcat

systemctl start tomcat

添加开机自启 

systemctl enable tomcat

查看端口和进程

ps -ef | grep tomcat

 netstat -anptl | grep 8080

安装mysql-connector 

tar -zxvf mysql-connector-java-5.1.47.tar.gz -C /usr/local/src/

cd /usr/local/src/mysql-connector-java-5.1.47/

cp mysql-connector-java-5.1.47-bin.jar /usr/local/tomcat/lib/

systemctl restart tomcat

创建测试页面

echo "tomcat sever2" > /usr/local/tomcat/webapps/ROOT/index.jsp

测试;

配置tomcat第二个参考上面配置

 配置ngix负载均衡

配置nginx反向代理:反向代理+负载均衡+健康检测

查看nginx加载模块

nginx -V

nginx version: nginx/1.10.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_realip_module --with-http_ssl_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 --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_flv_module --add-module=../ngx_cache_purge-2.3 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42

nginx -sticky-module模块

把来自同一个客户端(浏览器)的请求发送到同一个web服务器上处理请求。不能与ip_hash同时使用

格式;

upstream backend {    #定义后端web服务器的名字

server 192.168.1.12:8080 weight=1;    #指向 tomcat的IP地址和端口,weight 权重不写默认是1
    server 192.168.1.13:8080 weight=1;
    sticky;  #sticky算法
    }

负载均衡与健康检查

nginx自带是没有针对负载均衡后端节点的健康检查,可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到下一个节点来提供访问

weight:轮询权重,可以用在ip_hash,默认值为1

max_fails=1, 健康检查失败的最大次数

 fail_timeout=10s ,设置超时时间,在单位周期为fail_timeout设置的时间,中达到max_fails次数判断节点不可用

proxy_pass http://backend  把代理服务器收到的请求转发给backend 后端池

不加sticky 默认用轮询算法

upstream backend {
server 192.168.30.60:8080 weight=2 max_fails=1 fail_timeout=10s;
server 192.168.30.10:8080 weight=2 max_fails=1 fail_timeout=10s;
}

    server {
    listen       80;
    server_name  www.abc.com abc.com;
    location / {
           proxy_pass http://backend;
        }

测试:

第一个访问请求:

第二个访问请求:

 

 为了实验效果两天tomcat显示内容不同

加入sticky同一个客户端的请求只发送到同一个web服务器上

健康检测

模拟服务器当掉

访问代理服务器 

 在刷新就变成server2了,因为健康检测,检测到server1宕机了, max_fails=1 fail_timeout=10s

在10秒内检测到server1不可用1次,把server1从web池下线了,重启 tomcat 则恢复轮询

nginx的proxy缓存使用

缓存也就是将js、css、image等静态文件从后端服务器缓存到nginx指定的缓存目录下,减轻后端和服务端负担,加快访问速度,需要ngx_cache_purge这个模块来在过期时间未到之前,手动清理缓存。

proxy模块中常用指令时 proxy_pass 和 proxy_cache

nginx的web缓存功能的主要是由proxy_cache、fastcgi_cache指令集和相关指令集完成

proxy_cache 开启反向代理缓存后端服务器的静态内容

fastcgi_cache 开启nginx php动态页面的缓存

$upstream_cache_status 在nginx配置文件访问日志里 记录缓存命中率,出于性能角度讲不开启,高并发会影响 I/O性能

$upstream_cache_status包含以下几种状态:

MISS 未命中,请求被传送到后端

HIT 缓存命中

EXPIRED 缓存已经过期请求被传送到后端

UPDATING 正在更新缓存,将使用旧的应答

STALE 后端将得到过期的应答


    access_log  logs/access.log  main;  指定的一个临时路径
    proxy_buffering on;  #代理的时候,开启或关闭缓冲后端服务器的响应
    proxy_temp_path  /usr/local/nginx/proxy_temp; 存放缓存的路径
    proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m inactive=600m max_size=2g;    存放缓存的路径,levels=1:2 缓存目录下1级子目录和2级子目录 缓存的key名,100m内存大小,在600分钟没有被访问过删除该缓存
    #ngx_cache_purge  手动清理缓存,实现缓存清除
    location  ~  /purge(/.*) {
    allow 127.0.0.1;
    allow 192.168.30.0/24;  匹配30网段的主机,可以执行清理缓存,可以指定IP
    deny all;  除指定的 IP 外拒绝所有网段的主机执行

 proxy_cache_purge my-cache $host$1$is_args$args;   清理缓存区的数据,引用前面定义的缓存区my-cache
    proxy_pass  http://backend;  


    proxy_redirect off;  指定是否替换被代理服务器返回的响应头中的location头跟refresh头的信息

例如:

假设后端服务器返回的响应头是 “Location: http://localhost:8000/two/some/uri/”,那么指令proxy_redirect  http://localhost:8000/two/  http://frontend/one/;将把字符串改写为 “Location: http://frontend/one/some/uri/”

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
让后端获取到客户端真实IP
    proxy_ignore_headers Set-Cookie;  让代理服务器的缓存功能缓存带有set-cookie头的信息 
    proxy_hide_header Set-Cookie; 
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_cache my-cache;
    add_header Nginx-Cache $upstream_cache_status;
    proxy_cache_valid 200 304 301 302 8h;  为不同的响应状态码设置不同的缓存时间
    proxy_cache_valid 404 1m;
    proxy_cache_valid any 1d;
    proxy_cache_key $host$uri$is_args$args;
    expires 30d;   缓存过期时间

    proxy_cache_key:定义如何生成缓存的键,设置web缓存的key值,nginx根据key值md5哈希存储缓

修改nginx配置文件:

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

user www www;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log  logs/error.log;
worker_rlimit_nofile 10240;
pid logs/nginx.pid;
events {
   use epoll;
   worker_connections  65535;
}
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"'
                     '"$upstream_cache_status"';
   access_log  logs/access.log  main;
   server_tokens off;
   sendfile       on;
   tcp_nopush     on;
   keepalive_timeout  65;

   gzip on;
   gzip_comp_level 6;
   gzip_http_version 1.1;
   gzip_proxied any;
   gzip_min_length 1k;
   gzip_buffers 16 8k;
   gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
   gzip_vary on;

   client_max_body_size   10m;
   client_body_buffer_size   128k;
   proxy_connect_timeout   75;
   proxy_send_timeout   75;
   proxy_read_timeout   75;
   proxy_buffer_size   4k;
   proxy_buffers   4 32k;
   proxy_busy_buffers_size   64k;
   proxy_temp_file_write_size  64k;
   proxy_buffering on;
   proxy_temp_path /usr/local/nginx/proxy_temp;
   proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m max_size=1000m inactive=600m max_size=2g;

   upstream backend {
      sticky;
      server 192.168.30.60:8080 weight=1 max_fails=2 fail_timeout=10s;
      server 192.168.30.10:8080 weight=1 max_fails=2 fail_timeout=10s;
   }

   server {
      listen       80;
      server_name localhost;
      charset utf-8;
      location ~ /purge(/.*) {
         allow 127.0.0.1;
         allow 192.168.30.0/24;
         deny all;
         proxy_cache_purge my-cache $host$1$is_args$args;
      }
      location / {
         index index.jsp index.php index.html index.htm;
         proxy_pass        http://backend;
         proxy_redirect off;
         proxy_set_header  Host  $host;
         proxy_set_header  X-Forwarded-For  $remote_addr;
         proxy_set_header   X-Forwarded-Proto $scheme;
         proxy_ignore_headers Set-Cookie;
         proxy_hide_header Set-Cookie;
         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      }
      location  ~  .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf)(.*) {
         proxy_pass  http://backend;
         proxy_redirect off;
         proxy_set_header Host $host;
         proxy_set_header  X-Forwarded-For  $remote_addr;
         proxy_set_header   X-Forwarded-Proto $scheme;
         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
         proxy_cache my-cache;
         add_header Nginx-Cache $upstream_cache_status;
         proxy_cache_valid 200 304 301 302 8h;
         proxy_cache_valid 404 1m;
         proxy_cache_valid any 1d;
         proxy_cache_key $host$uri$is_args$args;
         expires 30d;
      }
   }
}
   

重载nginx服务

nginx -s reload

测试:

测试缓存功能

在后端tomcat服务器上创建可以缓存的类型文件(如html或jpg类型文件)
[root@tomcat ~]# echo "server1 html" > /usr/local/tomcat/webapps/ROOT/index.html

[root@tomcat2 ~]# echo "server2 html" > /usr/local/tomcat/webapps/ROOT/index.html

缓存已命中 

查看代理服务器的启动日志:

cat /usr/local/nginx/logs/access.log  

 删除缓存:

proxy_cache_purge指令用于方便的清除缓存,但必须安装第三方的ngx_cache_purge模块才能使用

浏览器访问代理服务器清除缓存:

缓存清除成功

 purge是ngx_cache_pure模块指令

后端服务器获取客户真实IP

让后端web服务器(tomcat/nginx)日志获取客户端真实的IP,而不是nginx代理服务器的IP

nginx代理服务器的配置

修改nginx的配置文件,在server或location中添加

proxy_set_header  X-Forwarded-For  $remote_addr;

tomcat作为后端服务器的配置 

如果tomcat作为后端web,在tomcat日志中记录客户端的真实ip,修改以下如下:

修改server.xml文件把 pattern 里的参数修改为:

pattern="%{X-FORWARDED-FOR}i %a %l %u %t %r %s %b %D %q %{User-Agent}i" resolveHosts="false"

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

重启tomcat查看访问日志

显示客户端的真实IP

pattern配置段,用于指定日志的输出格式。日志参数如下:
    %a - 远程IP地址
    %A - 本地IP地址
    %b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
    %B - 发送的字节数,不包括HTTP头
    %h - 远程主机名
    %H - 请求协议
    %l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
    %m - 请求方法
    %p - 本地端口
    %q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
    %r - 第一行的要求
    %s - 响应的HTTP状态代码
    %S - 用户会话ID
    %t - 日期和时间,在通用日志格式
    %u - 远程用户身份验证
    %U - 请求的URL路径
    %v - 本地服务器名
    %D - 处理请求的时间(以毫秒为单位)
    %T - 处理请求的时间(以秒为单位)
    %I (大写的i) - 当前请求的线程名称

补充说明

负载配置说明

定义负载均衡设备 的IP及状态

upstream tomcat {

server 192.168.1.11:9090 down;

server 192.168.1.12:8080 weight=2;

server 192.168.1.14:7070 backup;

}

ngiinx怎么把请求把转发给后端服务器

proxy_pass http://tomcat;

upstream每个设备状态

down: 表示当前的 server 暂时不参与负载

weight:默认为 1,weight 越大,负载的权重就越大

max_fails:允许请求失败的次数默认为 1,当超过最大次数proxy_next_upstream 模块定义的错误

fail_timeout:max_fails:请求失败。暂停的时间

使用nginx实现静动分离

Nginx的静态处理能力很强,但是动态处理能力不足,tomcat动态处理能力强,但静态处理不足,因此使用静动分离,动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对php、jsp的动静分离。

   我们使用三台服务器,tomcat,nginx ,nginx代理服务器

可使用rpm包和源码包安装

修改配置文件

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

user www www;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log  logs/error.log;
worker_rlimit_nofile 10240;
pid logs/nginx.pid;
events {
   use epoll;
   worker_connections  65535;
}

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"'
                     '"$upstream_cache_status"';
  access_log  logs/access.log  main;
  server_tokens off;
  sendfile       on;
  tcp_nopush     on;
  keepalive_timeout  65;

  gzip on;
  gzip_comp_level 6;
  gzip_http_version 1.1;
  gzip_proxied any;
  gzip_min_length 1k;
  gzip_buffers 16 8k;
  gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
  gzip_vary on;

  client_max_body_size   10m;
  client_body_buffer_size   128k;
  proxy_connect_timeout   75;
  proxy_send_timeout   75;
proxy_buffer_size   4k;
  proxy_buffers   4 32k;
  proxy_busy_buffers_size   64k;
  proxy_temp_file_write_size  64k;
  proxy_buffering off;
  proxy_temp_path /usr/local/nginx/proxy_temp;
  proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m max_size=1000m inactive=600m max_size=2g;
  #配置负载均衡
  upstream tomcat_dynamic_pools {              # tomcat动态服务器集群
     server 192.168.30.60:8080 weight=1 max_fails=2 fail_timeout=10s;
  }
  upstream static_pools {                        #静态服务器集群
     server 192.168.30.11 weight=1 max_fails=2 fail_timeout=10s;
  }

#配置nginx动静分离
  server {
      listen       80;
      server_name  www.abc.com;   #访问域名需设置host映射
      charset utf-8;

      location ~ .*\.jsp$ {
         proxy_pass        http://tomcat_dynamic_pools;
         proxy_redirect off;
         proxy_set_header  Host  $host;
         proxy_set_header  X-Forwarded-For  $remote_addr;
         proxy_set_header   X-Forwarded-Proto $scheme;
         proxy_ignore_headers Set-Cookie;
         proxy_hide_header Set-Cookie;
         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      }

      location  / {
         proxy_pass  http://static_pools;
         proxy_redirect off;
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
         proxy_cache my-cache;
         add_header Nginx-Cache $upstream_cache_status;
         proxy_cache_valid 200 304 301 302 8h;
         proxy_cache_valid 404 1m;
         proxy_cache_valid any 1d;
         #proxy_cache_key $host$uri$is_args$args;
         expires 30d;
      }
   }
}

重载nginx:

nginx -s reload

测试:

监控访问日志:

tail -0f /usr/local/tomcat/logs/localhost_access_log.2022-06-07.txt 

访问 jsp

 

tail -0f /var/log/nginx/access.log 

访问静态资源 html

  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹黄堡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值