繁体   English   中英

使用Nginx作为节点反向代理来服务根静态文件

[英]Serve root static file with nginx as node reverse proxy

我有一个与nginx一起用作反向代理的nodejs服务器。 那部分没问题,并且静态文件位置已正确设置。 但是我希望根地址提供一个静态的html文件,而且我不知道如何配置nginx,以便将根URL重定向到节点应用程序。 这是我的服务器块:

upstream promotionEngine {
 server 127.0.0.1:3001;
}

server {
    listen       3000;
    server_name  localhost;
    root C:/swaven/dev/b2b.pe/promotionEngine/templates/;
    index index.html;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://promotionEngine;
        proxy_redirect off;
    }

    location /public/ {
      alias C:/swaven/dev/b2b.pe/promotionEngine/public/;
    }

    location /assets/ {
      alias C:/swaven/dev/b2b.pe/promotionEngine/assets/;
    }
}

正确提供了htttp:// localhost:3000 / ping和http:// localhost:3000 / public / js / riot.js。
但是http:// localhost:3000一直发送到节点服务器,在此我希望它返回静态index.html。 如果我删除了/ location bloc,则将正确提供html文件。 我如何配置该位置以用作除根URL以外的所有URL的反向代理?

您可以使用= /这种类型的位置由于查找而具有更高的优先级:

location =/ {
  root ...
}

该请求甚至不会尝试到达其他位置。

更新 :(基于评论和讨论)

您将需要2个确切的位置块。 一个拦截/位置,另一个拦截/index.html

nginx docs上描述了确切的位置块:

同样,使用“ =”修饰符可以定义URI和位置的精确匹配。 如果找到完全匹配的内容,搜索将终止。

简单地使用index指令不起作用。 因为nginx 创建了内部重定向,以允许其他块匹配index.html 哪个被您的代理块拾取。

upstream promotionEngine {
 server 127.0.0.1:3001;
}

server {
    listen       3000;
    server_name  localhost;

    # Do an exact match on / and rewrite to /index.html
    location = / {
      rewrite ^$ index.html;
    }

    # Do an exact match on index.html to serve just that file
    location = /index.html {
      root C:/swaven/dev/b2b.pe/promotionEngine/templates/;
    }

    # Everything else will be served here
    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://promotionEngine;
      proxy_redirect off;
    }

    location /public/ {
      alias C:/swaven/dev/b2b.pe/promotionEngine/public/;
    }

    location /assets/ {
      alias C:/swaven/dev/b2b.pe/promotionEngine/assets/;
    }
}
Something like this, adjust for your own use case.

http {
    map $request_uri $requri {
        default          1;
        /                0;
    }
...........
    server {
        listen       80;
        server_name  www.mydomain.eu;
        root   '/webroot/www.mydomain.eu’;
        if ($requri) { return 301 https://www.mydomain.eu$request_uri; }
        location / {
            ..........
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM