开发者-导航 猿导航

Nginx location,proxy_pass,sse 等指令常见问题

发布时间:

目录

location #

location 配置以斜杠结尾和不以斜杠结尾的区别

斜杠结尾 #

  1. 访问:http://127.0.0.1:80/law
  2. 状态:301 Moved Permanently
  3. 重定向: http://127.0.0.1:80/law/
location /law/ {
	proxy_pass http://127.0.0.1:8080;
}

没有斜杠 #

  1. 访问:http://127.0.0.1:80/law
  2. 状态:404 Not Found
  3. 未重定向
location /law {
	proxy_pass http://127.0.0.1:8080;
}

官方解释 #

如果一个 location 由以斜线字符结尾的前缀字符串定义,并且请求由 proxy_passfastcgi_passuwsgi_passscgi_passmemcached_passgrpc_pass 之一处理,则执行特殊处理。对于 URI 等于此字符串但没有尾随斜线的请求,将返回一个带有代码 301 的永久重定向到所请求的 URI,并附加斜线。如果不希望这样,可以这样定义 URI 和位置的精确匹配:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

总结 #

配置文件结尾加了斜杠,访问时就应该加上斜杠访问,否则 URL 地址会被重定向一次。

proxy_pass 代理 #

nginx#proxy_pass

不加斜杠 #

location /law/ {
	proxy_pass http://127.0.0.1:8080;
}

添加斜杠 #

location /law/ {
	proxy_pass http://127.0.0.1:8080/;
}

总结 #

proxy_pass 代理 URL 地址后面加斜杠,当请求发送到服务器时会删除或替换 location 配置的路径(/law/)。不加斜杠,请求 URI 会以客户端发送的相同形式传递给服务器。

代理 SSE 接口 #

nignx 代理接口响应结果是 event-stream 流时配置

proxy_buffering

location /law/ {
	
	# 关闭代理服务器缓存,如果开启 nginx 会等待服务器端响应结束一次返回。
	proxy_buffering off;
	# 关闭请求代理缓存
	proxy_request_buffering off;
	
	proxy_pass http://127.0.0.1:8080/; # 后端服务器的SSE接口地址
	proxy_http_version 1.1; # 使用 HTTP/1.1版本
	proxy_set_header Connection ""; # 清除connection header,允许代理保持长连接

	# 传递必要的请求头信息
	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_set_header X-Forwarded-Proto $scheme;

	# 配置超时,确保代理能够处理长连接
	proxy_connect_timeout 3600s; # 根据需要调整连接超时时间
	proxy_send_timeout 3600s; # 根据需要调整发送超时时间
	proxy_read_timeout 3600s; # 根据需要调整读取超时时间

	# 设置正确的Content-Type,确保SSE正常工作
	proxy_set_header Accept "text/event-stream";
}