我有一个nodejs服务器,它使用nginx作为反向代理服务器。那部分没问题,静态文件位置设置正确。但我希望根地址能够提供静态html文件,而且我不知道如何配置nginx,以便根网址不会被重定向到节点应用程序。这是我的服务器块:
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的反向代理,除了根目录?
答案 0 :(得分:1)
您可以使用 = / 这种类型的位置因查找而具有更高的优先级:
location =/ {
root ...
}
此请求甚至不会尝试到达其他位置。
答案 1 :(得分:1)
更新 :(基于评论和讨论)
您需要2个确切的位置块。一个截取/
位置,另一个截取仅/index.html
。
nginx docs上描述了一个确切的位置块:
此外,使用“=”修饰符可以定义URI和位置的精确匹配。如果找到完全匹配,搜索将终止。
仅使用index
指令不起作用。因为nginx creates an internal redirect允许其他块匹配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/;
}
}
答案 2 :(得分:-1)
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 / {
..........
}
}