我有一个基于NodeJS + Express / AngularJS构建的webapp。
AngularJS $routeProvider
处于html5
模式,这意味着网址中没有index.html和#。
我想使用nginx:
/api
到我的NodeJS应用/
中的所有请求重定向到/index.html
/app
中的所有请求重定向到/app/index.html
实施例
/support
:/
应重新归结为index.html
,然后角度$ routeProvider处理support
路线并渲染SupportController
/app/login
:/app/
应重新归结为/app/index.html
,然后角度$ routeProvider处理login
路线并渲染LoginController
/api/auth/login
:/api/*
应该始终被代理重定向到http://localhost:3000/
,因为/api
下无法提供静态文件约束
问题是,使用这样的东西重定向到API:
location / {
try_files $uri @backend;
}
与AngularJS index.html重写不兼容:
location / {
try_files $uri $uri/ /index.html =404;
}
location /app/ {
try_files $uri $uri/ /app/index.html =404;
}
如果我指定/api
位置,Nginx会使用/
位置覆盖它...
我可以在这做什么?
答案 0 :(得分:1)
我认为这应该是一个简单的配置
location / {
try_files /index.html =555;
}
location /app/ {
try_files /app/index.html =666;
}
location /api/ {
proxy_pass http://nodeip:3000/;
}
如果您解释的是正确的,那么上面的配置应该
答案 1 :(得分:0)
我找到了正确的配置,我想我在发布之前测试了它,但是由于nginx在https://example.com/api/login/auth
而不是http://locahost:3000/api/login/auth
重定向http://locahost:3000/login/auth
,我从Express获得了404,所以我以为他们来自Nginx ......我只是“像傻一样愚蠢”......
感谢你的帮助Tarun!
这是一个很好的配置(这是非常基本的):
location /api {
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
# Fix the “It appears that your reverse proxy set up is broken" error.
proxy_pass http://localhost:3000;
proxy_read_timeout 90;
proxy_redirect http://localhost:3000 https://example.com/api/;
}
location / {
try_files \$uri \$uri/ /index.html =404;
}
location /app/ {
try_files \$uri \$uri/ /app/index.html =404;
}