nginx死循环解决办法

问题描述

前后端分别部署在不同的服务器中,它们的访问域名不一致,前端访问域名是front.my.com,后端访问域名是server.my.com。为了解决跨域问题,前端调用后端接口通过nginx反向代理实现。

nginx配置

server{
	listen 80;
    server front.my.com;
    
    proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
	location ^~ /api/ {
		rewrite '^/api/(.*)'  /$1 break;
		proxy_pass http://server.my.com;
	}
}

接口调用
通过反向代理调用接口:http://front.my.com/api/getUserData

报错信息
nginx报错:502 Bad Gateway

通过日志查看详细报错信息:
epoll_wait() reported that client prematurely closed connection, so upstream connection is closed too while sending request to upstream …

而且发现仅发出一次请求,日志中却无故出现了多条请求记录,因此猜测是nginx死循环造成。

问题分析

调用后端接口时(http://front.my.com/api/getUserData),front.my.com反向代理到server.my.com的url。server.my.com带请求头"front.my.com",又去请求front.my.com这个域名,造成了死循环。

解决办法

方式一:注释掉标记1处proxy_set_header Host $host;的代码
方式二:添加标记2处的代码

server{
	listen 80;
    server front.my.com;
    #标记1-方式1
    # proxy_set_header Host $host; 
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
	location ^~ /api/ {
		rewrite '^/api/(.*)'  /$1 break;
        proxy_pass http://server.my.com;
        
        #标记2-方式2
        proxy_set_header Host "server.my.com";  #host配置成后端服务器访问域名 
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx 301重定向死循环是指在使用nginx进行301永久重定向时,由于配置错误或者逻辑问题导致请求在重定向过程中陷入无限循环的情况。 通常情况下,nginx的301重定向是通过配置server块中的location指令来实现的。当客户端发送请求时,nginx会根据配置的location规则进行匹配,并将匹配到的请求重定向到指定的URL。 如果配置的重定向规则存在问题,比如将请求重定向到了自身或者循环重定向到其他URL,就会导致死循环的情况发生。例如,以下是一个可能导致死循环nginx配置示例: ``` server { listen 80; server_name example.com; return 301 http://example.com; } ``` 在这个示例中,无论客户端请求任何URL,nginx都会将其重定向到http://example.com。这样就会导致请求不断地被重定向,从而形成死循环。 为了避免nginx 301重定向死循环,需要确保重定向规则正确配置。可以通过以下几种方式来解决问题: 1. 检查重定向规则:仔细检查nginx配置文件中的重定向规则,确保没有将请求重定向到自身或者形成循环重定向的情况。 2. 使用301重定向的目标URL:在配置重定向规则时,确保将请求重定向到一个有效的URL,而不是一个无效的URL或者自身。 3. 使用302临时重定向:如果无法确定正确的重定向规则,可以暂时使用302临时重定向代替301永久重定向,以避免死循环的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值