nginx - Nginx 错误或功能?
问题描述
配置 1 与主机头替换:
location /phpinfo {
proxy_set_header Host $host;
proxy_pass http://localhost:8000;
}
curl -s -o /dev/null -D - http://192.168.56.102/phpinfo
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sun, 21 Jun 2020 13:12:05 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 323
Connection: keep-alive
Location: http://192.168.56.102:8000/phpinfo/
配置 2 只是 proxy_pass:
location /phpinfo {
proxy_pass http://localhost:8000;
}
curl -s -o /dev/null -D - http://192.168.56.102/phpinfo
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sun, 21 Jun 2020 13:25:15 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 313
Location: http://192.168.56.102/phpinfo/
Connection: keep-alive
摘要:Linux localhost 5.4.47-0-virt #1-Alpine SMP Thu, 18 Jun 2020 14:54:31 UTC x86_64 Linux nginx 版本:nginx/1.18.0
当没有尾随斜杠定义重定向到:
http://192.168.56.102:8000/phpinfo/
预期的:
Location: http://192.168.56.102/phpinfo/
这是一个功能吗?如何解决这个问题?
解决方案
此行为是由后端服务器 (apache2) 引起的。当 uri 结尾没有斜杠时,它返回重定向 301。所以有2个解决方案:
更改后端服务器行为。
使用 nginx proxy_redirect 指令:
位置 / { proxy_set_header 主机 $host; proxy_redirect http://$host:8000/ /; proxy_pass http://localhost:8000;
}
推荐阅读
- json - 带有 JSON 数据的 vb.net HttpWebRequest 失败但在 URL 中编码时有效
- html - 我可以在 HTML/CSS 中另一个元素的规则中更改另一个元素的规则吗?
- javascript - 如何在视频标签中监听 keydown 事件?
- iis - dotMemory 资源加载器找不到 MUI 文件。尝试分析本地 IIS 时
- julia - 没有办法在 REPL 模式下传递参数吗?
- python - Python - Folium Choropleth Map - 颜色不正确
- google-chrome-devtools - 性能主要部分调用堆栈显示一个函数调用自身,但函数不是递归的
- f# - f# 编程插入函数?
- android - 我需要android布局配置
- python - 尝试在起点和终点之间复制/粘贴文本、转置和交换数据点