忽略代理端点中的 root 角色

忽略代理端点中的 root 角色

我的子域名sbd.example.org是一个 web 服务,当请求对根目录 ( ) 执行 GET 操作时,需要返回 HTML 静态页面/,对于其他情况(例如/t),需要代理重写。所以我需要

  • 恢复http://sbd.example.org正常指数和try_files
  • GEThttp://sbd.example.org/t重写至代理

但我的/etc/nginx/sites-available/sbd工作并不如预期。这是有问题的来源:

server {

       server_name sbd.example.org;

       root /var/www/sbd/html;

       index index.html index.htm;

       location / {
               try_files $uri $uri/ =404;
       }

       location ~ ^/[a-z].+$ {
          rewrite ^/(.*)$ /$1 break;
          proxy_pass  http://127.0.0.1:3000;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          default_type  application/json;
          proxy_hide_header Content-Location;
          proxy_set_header  Connection "";
          proxy_http_version 1.1;
       }

}

错误:GEThttp://sbd.example.org/不是 HTML 页面,而是由代理作为请求生成的带有错误消息的 JSON http://sbd.example.org/index.htm

如何修正我的 Nginx 脚本?

附言:一切http://sbd.example.org/etc运行良好。

答案1

相比确定需要发送到代理的内容,确定哪些文件是静态的可能更容易。

location / {
    try_files $uri $uri/ @proxy;
}
location @proxy {
    proxy_pass  http://127.0.0.1:3000;
    ...
}

这个文件了解更多信息。

相关内容