发布时间:
location #
location
配置以斜杠结尾和不以斜杠结尾的区别
斜杠结尾 #
- 访问:
http://127.0.0.1:80/law
- 状态:
301 Moved Permanently
- 重定向:
http://127.0.0.1:80/law/
location /law/ {
proxy_pass http://127.0.0.1:8080;
}
没有斜杠 #
- 访问:
http://127.0.0.1:80/law
- 状态:
404 Not Found
- 未重定向
location /law {
proxy_pass http://127.0.0.1:8080;
}
官方解释 #
如果一个 location
由以斜线字符结尾的前缀字符串定义,并且请求由 proxy_pass
、fastcgi_pass
、uwsgi_pass
、scgi_pass
、memcached_pass
或 grpc_pass
之一处理,则执行特殊处理。对于 URI 等于此字符串但没有尾随斜线的请求,将返回一个带有代码 301 的永久重定向到所请求的 URI,并附加斜线。如果不希望这样,可以这样定义 URI 和位置的精确匹配:
location /user/ {
proxy_pass http://user.example.com;
}
location = /user {
proxy_pass http://login.example.com;
}
总结 #
配置文件结尾加了斜杠,访问时就应该加上斜杠访问,否则 URL
地址会被重定向一次。
proxy_pass 代理 #
不加斜杠 #
- 访问:
http://127.0.0.1:80/law/
将会代理到:http://127.0.0.1:8080/law/
- 访问:
http://127.0.0.1:80/law/aaa
将会代理到:http://127.0.0.1:8080/law/aaa
location /law/ {
proxy_pass http://127.0.0.1:8080;
}
添加斜杠 #
- 访问:
http://127.0.0.1:80/law/
将会代理到:http://127.0.0.1:8080/
- 访问:
http://127.0.0.1:80/law/aaa
将会代理到:http://127.0.0.1:8080/aaa
location /law/ {
proxy_pass http://127.0.0.1:8080/;
}
总结 #
proxy_pass
代理 URL
地址后面加斜杠,当请求发送到服务器时会删除或替换 location
配置的路径(/law/)。不加斜杠,请求 URI 会以客户端发送的相同形式传递给服务器。
代理 SSE 接口 #
nignx
代理接口响应结果是 event-stream
流时配置
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";
}