思考:nginx作代理端配置redis转发时遇到的问题

前两块猜测内容已被老师否定,若大家遇到该问题建议直接看"三、"!

目录

## 问题展示

## 一、错误猜想--猜想失败

### 猜想1:端口错误

### 猜想2:缺少location块

## 二、尝试解决--尝试已被判定错误

### nginx配置文件修改

## 三、问题剖析--老师提供

## 四、nginx代理redis访问服务

### 1.目的及针对OSI模型解释

### 2.nginx配置使用TCP配置作代理

### 3.设置redis连接密码



## 问题展示

核心流程:生产者推消息到队列,消费者消费消息然后执行任务

问题:nginx作代理时,业务启动后生产者无法发送消息,问题出于?如何配置?

## 一、错误猜想--猜想失败

### 猜想1:端口错误

        Linux中,Nginx多用于监听HTTP和HTTPS请求,它默认监听的端口是80(HTTP)和443(HTTPS)。端口6379是Redis数据库的默认端口,用于处理Redis客户端的连接请求。

虽然技术上可以在Nginx中配置监听任何端口,但配置为监听6379端口并不是Nginx的标准用途。如果将Nginx配置为监听6379端口,它将尝试处理传入的连接,但由于它不是为处理Redis协议设计的,这将不会正常工作。

        若需要让Nginx与Redis进行交互,通常的做法是在Nginx配置中使用ngx_http_redis_module模块(这是一个第三方模块,需要单独安装),这样Nginx可以作为反向代理将某些请求转发给Redis服务器。但Nginx仍监听其标准的HTTP/HTTPS端口,并将特定请求转发到Redis服务器的6379端口

### 猜想2:缺少location块

         Nginx的配置文件中的location块不是必须的,但它是非常常见的,因为它用于定义如何响应特定的请求URI。省略了location块,Nginx将不知道如何处理传入的请求,除非在server块中使用了try_files指令或类似的指令来指定一个默认的文件或URL

## 二、尝试解决--尝试已被判定错误

### nginx配置文件修改

server{
    listen 80;
    server_name localhost;

    location /redis {
        proxy_pass http://<redis IP>:6379;
  }
}

## 三、问题剖析--老师提供

        Redis 本身并不直接支持通过 HTTP 协议发送和接收消息,它通常通过 TCP 连接进行通信。因此,如果生产者试图通过 HTTP 推送消息到 Redis,这本身就不是一个标准的做法。

       若要强制Nginx使用http代理,要在Sentinel 或 Stunnel 情况下。若 Redis 使用了 Sentinel 并暴露了 HTTP 接口,或者通过Stunnel 提供 SSL 加密的 HTTP 接口,此时 Nginx 可以作为 HTTP 代理

## 四、nginx代理redis访问服务

### 1.目的及针对OSI模型解释

目的:

        为了避免直接暴露redis端口到外部网络,将nginx配置为redis的反向代理

举例:

        假设A、B俩台服务器,在同一局域网内,A服务器只能内网访问,安装了redis服务,B服务器可以外网访问,那就可以在B服务器安装nginx服务,通过nginx代理转发内网redis服务,这样可以实现临时的内网服务访问。通过nginx代理redis服务,主要使用的是nginx的stream模块

针对OSI模型的解释:

        Nginx处于网络协议层(应用层),而Redis是在传输层工作的。Nginx作为代理服务器,它接收来自客户端的连接请求,然后与Redis服务器进行通信。这样,Nginx就在不直接暴露Redis端口的情况下,提供了一个安全的访问通道

### 2.nginx配置使用TCP配置作代理

IP负责
192.168.182.140nginx
192.168.182.143redis
  • 安装stream模块--192.168.182.140

# 为nginx主机安装stream模块--源码安装使用

# ①进入nginx编译目录

cd /root/ngxin-1.24.0

# ②配置stream模块到指定目录

./configure  --prefix=/opt/nginx --with-stream

# ③编译安装

make && make install

  • 开启redis服务--192.168.182.143

# ①进入redis主机安装redis位置

cd /root/redis-6.2.3

# ②开启redis服务

[root@bogon redis-6.2.3]# ./src/redis-server redis.conf
[root@bogon redis-6.2.3]# ./src/redis-cli
127.0.0.1:6379> auth 123456
OK

# ③开放redis6379端口或直接关闭防火箱

#开放端口访问
firewall-cmd --permanent --add-port=6379/tcp
#重新加载防火墙策略
firewall-cmd --reload
#关闭防火墙
systemctl stop firewalld
#关闭防火墙开机自启动
systemctl disable firewalld
  •  在nginx.conf配置文件中配置redis代理访问

# ①进入nginx配置文件目录

cd /opt/nginx/conf
vim nginx.conf

# ② 为nginx主机配置添加redis代理,要保证我们的nginx所在的服务器能够访问redis服务器的地址和端口192.168.182.143:6379

在添加配置时请将http模块注释掉:可在vim编辑模式使用类似:"开始行数,终止行数s/^/#/g"为其批量添加注释

stream {
    upstream redis {
        # redis真实访问地址
        server 192.168.182.143:6379 max_fails=3 fail_timeout=30s;
  }
    server {
          #外网监听地址
          listen 2000;
          #代理连接超时时间
          proxy_connect_timeout 5s;
          #代理超时时间
          proxy_timeout 300s;
          #代理名称
          proxy_pass redis;
     }

}

# ③检查nginx配置文件

nginx -t

# ④重启nginx--源码安装的nginx

nginx -s reload
  • 测试nginx代理访问redis

使用RedisDesktop连接工具连接nginx

点击"测试连接"查看nginx是否代理成功,能否查看redis数据库

### 3.设置redis连接密码

# 登录redis
[root@bogon redis-6.2.3]# ./src/redis-server redis.conf
[root@bogon redis-6.2.3]# ./src/redis-cl
# 设置密码
127.0.0.1:6379> config set requirepass 123456
# 重新登录
127.0.0.1:6379> auth 123456
OK

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值