Nginx的正反向代理

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Nginx的正反向代理

Nginx正反向代理

引言:

        本文主要分享了Nginx的正反向代理,包括:Nginx简介、环境的搭建、正向代理的实现、反向代理的实现、Web集群、经典的Session共享问题;

@[toc]

1.Nginx简介

         Nginx是由俄罗斯人研发,是一款轻量级的Web 服务器在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好;

特点:

  • 稳定性强;
  • 提供了丰富的配置实例;
  • 内存占用小,并发能力强;

2. Nginx安装

2.1 下载Nginx

官方网站下载地址:https://nginx.org/en/download.html

  • 选择相应的版本下载后,解压即可;

在这里插入图片描述

2.2 启动Nginx

  • 双击nginx.exe

2.3 访问Nginx

在浏览器中输入地址:http://localhost,出现如下页面表示访问成功

默认

2.4 停止Nginx

最暴力的就是直接在任务管理器中结束进程(个数与电脑的核数有关)

3. Nginx正向代理

Nginx正向代理偏向客户端

3.1 修改config下的nginx.config

#正向代理
location ^~ \.api$ {
    proxy_pass   http://127.0.0.1:8088;
}

3.2 打包vue项目

输入以下命令,出现下图即可------将项目打包;

npm run bulid

在这里插入图片描述

3.3 将项目目录下dist文件中的文件覆盖到nginx中的html文件夹下

在这里插入图片描述

3.4 输入localhost进入项目首页

这是我项目的首页

在这里插入图片描述

4.Nginx反向代理配置

Nginx反向代理偏向服务端,web集群部署

4.1 解压tomcat7

在一个文件夹下解压两份tomcat分别命不同的名字以示区别;

在这里插入图片描述

4.2 分别修改两个tomcat的server.xml

conf/server.xml

4.2.1 修改第一份的server.xml配置文件

22行左右:<Server port="8005" shutdown="SHUTDOWN">
<!--改为-->
<Server port="18005" shutdown="SHUTDOWN">

70行<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<!--改为-->  
<Connector port="18080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

 92行<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />   
<!--改为-->  
 <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />

4.2.2 修改第二份tomcat的server.xml配置文件

<Server port="8005" shutdown="SHUTDOWN">
<!--改为-->
<Server port="28005" shutdown="SHUTDOWN">

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<!--改为-->  
<Connector port="28080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />   
<!--改为-->  
 <Connector port="28009" protocol="AJP/1.3" redirectPort="8443" />

4.3 分别启动两份tomcat服务器

bin/startup.bat启动

  • 分别在tomcat/webapps/ROOT/index.jsp中做标记

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.4 将nginx.zip文件减压到tomcat同级目录中

修改nginx/conf/nginx.conf配置文件,如下;

保存,并启动nginx服务

#gzip  on;
    #启用gzip压缩
    #服务器集群配置
    upstream kak.com{#服务器集群名称
        #服务器配置,weight是权重,权重越大,分配的概率越大。
        server    127.0.0.1:18080 weight=1;
        server    127.0.0.1:28080 weight=1;
    }
    #当前的nginx配置
    server {
        #监听端口号
        listen       8888;
        server_name  localhost;
        #如是8080,交给kak集群
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
         #   index  index.html index.htm;
      #  }
        location / {
            proxy_pass   http://kak.com ; #与服务器集群的名称一致
            proxy_redirect  default;
          }

4.5 测试运行web集群

浏览器输入localhost:8888,会有两个服务器轮流交替工作;

  • 一个崩溃不影响另一个;

在这里插入图片描述

在这里插入图片描述

5. Session共享问题

          当web集群搭建好之后,session属于本地缓存并不能在服务间共享,因此原有的session存储会话的策略将失效;另一个访问时将会取不到这个Session中的值,这也就是Session共享问题;通过Redis技术来解决该问题;

5.1 构建场景

分别在两个Tomcat中的webapps\ROOT下创建write.jsp和read.jsp

5.1.1 write.jsp

<html>
<h2>tomcat_01_write</h2>
<%
session.setAttribute("myName","kak");
%>
</html>

5.1.2 read.jsp

<html>
<h2>tomcat_01_read</h2>
<%
    out.println("server one<br>");
    out.println("username:");
    out.println(session.getAttribute("myName")+"<br>");
    out.print("sessionID:"+session.getId());
%>
</html>

5.2 加Redis压缩包在tomcat的同级目录下

在这里插入图片描述

5.3 启动Redis

在cmd中启动

redis-server.exe  redis.windows.conf

在这里插入图片描述

5.4 给tomcat加入jar包

在两个tomcat/lib下添加redis管理session的jar包:

  • commons-pool2-2.2.jar
  • jedis-2.5.2.jar
  • tomcat-redis-session-manager-2.0.0.jar

在这里插入图片描述

5.5 修改context.xml文件

修改两个tomcat中的context.xml文件:conf/context.xml

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
    host="localhost"    
    port="6379"         
    database="0"         
    maxInactiveInterval="60" />

在这里插入图片描述

5.6 启动

启动顺序:

  1. redis
  2. tomcat
  3. nginx

图片.png

图片.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
138 61
|
8天前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
81 11
|
3月前
|
监控 应用服务中间件 测试技术
确保正则表达式在 Nginx 代理中的准确性和稳定性
【10月更文挑战第19天】总之,正则表达式在 Nginx 代理中具有重要作用,但要确保其准确性和稳定性需要付出一定的努力和关注。通过以上方法的综合运用,我们可以提高正则表达式配置的可靠性,为用户提供更好的服务体验。
|
17天前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
55 5
|
2月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
2月前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
2月前
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
339 5
Nginx 如何代理转发传递真实 ip 地址?
|
2月前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
359 1
nginx配置反向代理404问题
|
2月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
79 3
|
2月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
139 3