[英]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.