Docker 中对 nginx 的请求在特定请求中丢失端口号

Docker 中对 nginx 的请求在特定请求中丢失端口号

我在 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 文件:

  1. http://本地主机:8080-> 首先运行 index.html,浏览器显示http://本地主机:8080
  2. http://本地主机:8080/-> 首先运行 index.html,浏览器显示http://本地主机:8080(为什么这里末尾的斜线被去掉了?)
  3. http://localhost:8080/index.html-> 首先运行 index.html,浏览器显示http://localhost:8080/index.html
  4. http://localhost:8080/test/index.html-> 运行 test/index.html,浏览器显示http://localhost:8080/test/index.html
  5. http://localhost:8080/测试/-> 运行 test/index.html,浏览器显示http://localhost:8080/测试/
  6. http://localhost:8080/测试-> 失败。浏览器显示http://localhost/测试/,由于丢失正确的端口而出错。

对我来说有两个谜团:

1) 为什么测试用例 #2 中的尾部斜线被删除,谁对此负责?例如:是 Chrome 还是 Nginx?

2) 与我的问题更相关的是测试用例 6。为什么我只在这种请求中丢失端口号?当测试与本地文件夹不匹配的其他单词时,请求会按预期处理。

我搜索了如何跟踪 nginx 的执行情况,但似乎很难做到。下面的 headers 想法没有帮助,日志中也没有任何有用的东西。

我如何才能找出重写我的 URL 的罪魁祸首?

相关内容