Nginx 没有根据有效的正则表达式匹配 URL(对我和在线正则表达式测试者来说,它看起来是有效的)

Nginx 没有根据有效的正则表达式匹配 URL(对我和在线正则表达式测试者来说,它看起来是有效的)

我正在使用 npm(Nginx 代理管理器)来管理我的 nginx 配置。

npm 已生成此位置块:

location  ~*  ^/docker-compose-ui/?(.*)$ {
    set              $upstream http://docker_compose_ui:5000/$1$request_uri;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Scheme $scheme;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-For    $remote_addr;
    proxy_set_header X-Real-IP      $remote_addr;
    proxy_pass       $upstream;



    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;



    add_header X-testing "matching: $1,  r_uri: $request_uri";
  }

它与以下 URL 匹配:http://192.168.1.148/docker-compose-ui/

但它与任何页面资产都不匹配,因此页面加载时没有任何工作样式或 javascript。

我可以看到我添加的标题:X-testing: matching: , r_uri: /docker-compose-ui/

但如果我http://192.168.1.148/docker-compose-ui/scripts/directives/actions.js直接尝试,我得到的只是502 网关错误

我尝试了很多方法,甚至添加了一个位置来匹配资产:

~* ^/docker-compose-ui/(images/|img/|scripts/|script/|javascript/|js/|bower_components/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico)

但什么都不起作用,nginx 拒绝代理除 之外的任何东西/docker-compose-ui/

为什么 Nginx 似乎忽略了我定义的位置并拒绝代理资产?

答案1

除了您提供的配置之外,还需要resolver定义为正常工作(这很可能是错误的原因HTTP 502 Bad Gateway),将其添加$request_uri到上游 URL 的末尾是完全无稽之谈。让我们看看您提供的 URL 的示例:

http://192.168.1.148/docker-compose-ui/scripts/directives/actions.js

用于组成的变量$upstream将具有以下值:

$1             scripts/directives/actions.js
$request_uri   /docker-compose-ui/scripts/directives/actions.js

这意味着整个$upstream变量(设置为http://docker_compose_ui:5000/$1$request_uri)将等于

http://docker_compose_ui:5000/scripts/directives/actions.js/docker-compose-ui/scripts/directives/actions.js

你觉得这样可以吗?我认为不行。

让我们尝试一下这个:

location ^~ /docker-compose-ui {
    rewrite ^/docker-compose-ui/?(.*) /$1 break;

    proxy_set_header Host               $host;
    proxy_set_header X-Forwarded-Scheme $scheme;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-For    $remote_addr;
    proxy_set_header X-Real-IP          $remote_addr;
    proxy_pass       http://docker_compose_ui:5000;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;
}

相关内容