![Docker 中对 nginx 的请求在特定请求中丢失端口号](https://linux22.com/image/715837/Docker%20%E4%B8%AD%E5%AF%B9%20nginx%20%E7%9A%84%E8%AF%B7%E6%B1%82%E5%9C%A8%E7%89%B9%E5%AE%9A%E8%AF%B7%E6%B1%82%E4%B8%AD%E4%B8%A2%E5%A4%B1%E7%AB%AF%E5%8F%A3%E5%8F%B7.png)
我在 Docker 中运行 Nginx,并使用端口映射8080:80
。我的内容映射到/var/www/content'
。
我在以下路径创建以下两个文件:
/var/www/content/index.html
/var/www/content/test/index.html
我的nginx.conf定义如下:
server {
server_name _;
listen 80 default_server;
root /var/www/content;
index index.html;
access_log /dev/stdout;
error_log /dev/stdout info;
add_header X-debug-base "base $uri $document_root" always;
location / {
add_header X-debug-one "location / $uri $document_root" always;
try_files $uri $uri/ index.html;
}
}
当我通过以下请求访问它时,我能够执行放在那里的 html 文件:
- http://本地主机:8080-> 首先运行 index.html,浏览器显示http://本地主机:8080
- http://本地主机:8080/-> 首先运行 index.html,浏览器显示http://本地主机:8080(为什么这里末尾的斜线被去掉了?)
- http://localhost:8080/index.html-> 首先运行 index.html,浏览器显示http://localhost:8080/index.html
- http://localhost:8080/test/index.html-> 运行 test/index.html,浏览器显示http://localhost:8080/test/index.html
- http://localhost:8080/测试/-> 运行 test/index.html,浏览器显示http://localhost:8080/测试/
- http://localhost:8080/测试-> 失败。浏览器显示http://localhost/测试/,由于丢失正确的端口而出错。
对我来说有两个谜团:
1) 为什么测试用例 #2 中的尾部斜线被删除,谁对此负责?例如:是 Chrome 还是 Nginx?
2) 与我的问题更相关的是测试用例 6。为什么我只在这种请求中丢失端口号?当测试与本地文件夹不匹配的其他单词时,请求会按预期处理。
我搜索了如何跟踪 nginx 的执行情况,但似乎很难做到。下面的 headers 想法没有帮助,日志中也没有任何有用的东西。
我如何才能找出重写我的 URL 的罪魁祸首?