两层nginx转发配置简单测试

本文详细介绍了如何配置两层Nginx代理,包括192.168.1.11和192.168.1.12之间的转发,并设置了192.168.1.13和192.168.1.21为目标Web服务器的API和测试路径。同时,涉及了HTTPS加密配置,自建证书与私钥的过程,以及如何通过错误设置优化转发性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两层nginx转发配置简单测试

[root@test ~]# yum -y install gcc make pcre-devel openssl-devel
[root@test ~]# tar xf nginx-1.17.6.tar.gz
[root@test ~]# cd nginx-1.17.6/
[root@test nginx-1.17.6]# ./configure  --prefix=/usr/local/nginx  --user=nginx  --with-http_ssl_module
[root@test nginx-1.17.6]#  make && make install
[root@test nginx-1.17.6]# useradd nginx -s /sbin/nologin
[root@test nginx-1.17.6]# /usr/local/nginx/sbin/nginx

192.168.1.11 第一层nginx

        location / {
        proxy_pass   http://192.168.1.12;
        }

192.168.1.12 第二层nginx

        location ^~ /api {
                proxy_pass   http://192.168.1.13/; #目标端口1
        }
#location 后的^,proxy最后的/不能少,否则会带上一层api过去        
        location ^~ /test {
                proxy_pass   http://192.168.1.21/; #目标端口2
        }

192.168.1.13 目标web-nginx1

echo   "wo shi api"  >html/index.html

192.168.1.21 目标web-nginx2

echo   "wo shi test"  >html/index.html

测试 http://192.168.1.1/api , 拍错查看每个nginx的日志

参考优化信息

          location / {
                        proxy_next_upstream error timeout invalid_header http_500 http_503;
                        proxy_pass  http://192.168.1.12;
                        proxy_set_header X-Forwarded-Proto https;
                        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_redirect     off;
                        proxy_connect_timeout      300;
                        proxy_send_timeout         300;
                        proxy_read_timeout         300;
                        #proxy_send_lowat          12000;
                        proxy_buffer_size          128k;
                        proxy_buffers              8 64k;
                        proxy_busy_buffers_size    128k;
                        proxy_temp_file_write_size 128k;
                }
    }

第一层走加密配置

修改主配置文件 去掉注释 :103,120s/#//
    server {
        listen       443 ssl;
        server_name  www.c.com;   //修改域名

        ssl_certificate      cert.pem;   //证书,包含公钥,/usr/local/nginx/conf下
        ssl_certificate_key  cert.key;   //私钥

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
        proxy_pass   http://192.168.1.12;
        }

    }

自建证书与私钥

[root@test nginx]# cd conf/
[root@test conf]# openssl genrsa > cert.key
Generating RSA private key, 2048 bit long modulus
............................................................+++
...................................................................................................+++
e is 65537 (0x10001)
[root@test conf]# openssl req -new -x509 -key cert.key > cert.pem
[root@test conf]# ../sbin/nginx -s reload

访问测试 https://192.168.1.1/api

<think>好的,我现在要回答用户关于如何配置Nginx转发请求到Redis的问题。首先,我需要回顾一下用户提供的引用资料,看看有没有相关的配置示例或者步骤。 根据引用[5],用户提到了使用lua-resty-redis库来连接Redis,并提供了示例代码。这说明可能需要通过OpenResty(基于Nginx的扩展)来实现Redis的转发,因为lua-resty-redis是OpenResty的一部分。所以,可能需要指导用户安装OpenResty而不是普通的Nginx。 然后,引用[4]中提到了Nginx配置缓存的部分,虽然主要关于代理缓存,但其中的proxy_pass指令可能相关。不过Redis转发可能需要更底层的处理,比如直接处理TCP或HTTP请求,然后转发到Redis的6379端口。但Redis使用的是TCP协议,而Nginx默认处理HTTP,所以可能需要使用Nginx的stream模块来转发TCP流量。 用户的问题是关于转发请求到Redis的最佳实践和示例,所以需要分步骤说明。可能需要先确保Nginx安装了stream模块,或者使用OpenResty。然后配置stream块来监听Redis的端口,并代理到后端Redis服务器。 另外,引用[5]中的Lua脚本示例显示如何连接Redis,这可能是在处理HTTP请求时,通过Lua脚本与Redis交互。但如果是直接转发Redis协议(如RESP),可能需要不同的配置。 需要确认用户是想将Redis的TCP连接通过Nginx代理,还是将HTTP请求转换为Redis命令。前者更常见,比如使用Nginx作为TCP负载均衡器,后者可能需要自定义处理逻辑,比如用Lua解析HTTP请求并转换为Redis命令。 根据常见实践,转发Redis通常指TCP层的代理,所以应该配置Nginx的stream模块。步骤可能包括: 1. 安装Nginx并启用stream模块,或者使用OpenResty。 2. 在nginx.conf中添加stream块,配置监听端口和代理到Redis服务器。 3. 测试配置是否生效。 同时,需要考虑安全性,比如限制访问、使用SSL/TLS加密等。可能还需要提到连接池、超时设置等优化参数,如引用[5]中的超时设置。 现在需要检查用户提供的引用是否有其他相关信息。引用[1]到[4]主要关于Nginx与Redis的转发、反向代理和缓存集成,但具体到Redis转发的例子可能在引用[5]中的Lua连接方式,但该例子是在处理HTTP请求时连接Redis,而不是直接转发TCP请求。 因此,可能需要区分两种场景:TCP层的转发和HTTP到Redis的转换。用户的问题更可能是指前者,即作为中间代理将客户端发往Nginx的Redis请求转发到后端Redis服务器。 综上,回答应该包括: - 使用Nginx的stream模块配置TCP转发。 - 示例配置。 - 注意事项如SSL、认证、负载均衡等。 - 可能的优化和错误处理,如引用[5]中的超时和错误日志。 同时,要确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及较少数学公式,可能不需要。不过如果有变量或端口号,可能需要用行内格式,比如端口$6379$。 最后,生成相关问题,比如关于负载均衡配置、加密传输、性能优化等。</think>### 如何配置Nginx转发请求到Redis #### 1. 理解转发场景 Redis默认使用TCP协议(端口$6379$),Nginx默认处理HTTP流量。若需转发Redis请求,需通过**Nginx的stream模块**实现TCP/UDP代理[^4]。 **适用场景**: - 隐藏真实Redis服务器IP - 实现Redis负载均衡 - 统一管理加密通道 --- #### 2. 安装与配置步骤 ##### (1) 启用Nginx Stream模块 若使用标准Nginx,需确认编译时包含`--with-stream`参数: ```bash # 查看Nginx已安装模块 nginx -V ``` 若无此模块,需重新编译安装: ```bash ./configure --with-stream make && make install ``` --- ##### (2) 配置TCP转发规则 在`nginx.conf`中添加`stream`块,配置Redis代理: ```nginx # 全局层配置 worker_processes auto; events {} stream { # 定义Redis服务器组 upstream redis_backend { server 192.168.1.100:6379; # Redis实例1 server 192.168.1.101:6379; # Redis实例2(负载均衡) } # 监听6380端口并转发到Redis集群 server { listen 6380; proxy_pass redis_backend; proxy_connect_timeout 1s; # 连接超时设置[^5] proxy_timeout 3s; } } ``` --- ##### (3) 高级配置选项 - **SSL加密传输**: ```nginx server { listen 6380 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; proxy_pass redis_backend; } ``` - **访问控制**: ```nginx allow 192.168.1.0/24; deny all; ``` --- #### 3. 验证配置 ```bash # 重载Nginx配置 nginx -s reload # 测试连接 redis-cli -h Nginx服务器IP -p 6380 ``` --- #### 4. OpenResty替代方案(Lua脚本转发) 若需在HTTP请求中操作Redis,可使用OpenResty的`lua-resty-redis`库[^5]: ```nginx location /redis { content_by_lua_block { local redis = require "resty.redis" local red = redis:new() red:set_timeout(1000) -- 超时1秒 local ok, err = red:connect("127.0.0.1", 6379) if not ok then ngx.say("Redis连接失败: ", err) return end -- 执行GET命令 local res, err = red:get(ngx.var.arg_key) ngx.say("结果: ", res) } } ``` --- #### 注意事项 1. **性能**:TCP代理会增加延迟,建议在Nginx与Redis间使用内网通信 2. **安全性**:通过防火墙限制访问源,或启用SSL加密 3. **高可用**:结合`upstream`模块的`max_fails`和`fail_timeout`参数实现健康检查[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值