gpt4 book ai didi

angularjs - nginx环回反向代理无法访问自定义路径

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:54 25 4
gpt4 key购买 nike

我正在我的服务器中运行这个环回应用程序,并尝试通过 nginx 反向代理访问它,但似乎无法正确配置 nginx,我对 nginx 完全是菜鸟。这是我的配置文件 /etc/nginx/sites-available/example.com

server {
listen 80;
server_name www.example.com;
server_name example.com;
server_name _;
root /apps/example/client;

location ~ ^/.well-known {
allow all;
}
location / {
return 301 https://example.com;
}
}
server {
server_name example.com;
server_name www.example.com;
#listen 80;
# SSL configuration
listen 443 ssl ;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

root /apps/example/client;

# Check Alive
location ~ ^/.well-known {
allow all;
}

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_bind 127.0.0.1;
proxy_pass http://127.0.0.1:3000/;
}

location /api {
proxy_pass http://127.0.0.1:3000/api;
}
location /explorer {
proxy_pass http://127.0.0.1:3000/explorer;
}

}

我的环回服务器提供如下静态文件:app.use(loopback.static(path.resolve(__dirname, '../client')));

在我的 server.js 文件的末尾,我为任何未处理的路径提供 index.html 文件,因此 Angular 会在前端处理该路径

function startsWith(string, array) {
for(let i = 0; i < array.length; i++)
if(string.startsWith(array[i]))
return true;
return false;
}
let ignoredPaths = ['/css', '/fonts', '/img', '/js', '/lib', '/sfx', '/views', '/api'];

app.all('/*', function(req, res, next) {
//Redirecting to index only the requests that do not start with ignored paths
console.log("Requested url: ",req.url);
if(!startsWith(req.url, ignoredPaths)) {
res.sendFile('index.html', {root: path.resolve(__dirname, '../', 'client')});
} else {
next();
}
});

问题是我只能访问 http://www.example.com/ 并且需要很多时间来加载,并且 url 会闪烁很多次,就像重定向很多次一样,我在前端以 Angular 重定向到 /home,我有 Angular 路由使用 html5 从路径中删除 /#!/ ,但如果我尝试访问任何其他路径,例如 http://www ,我总是会收到错误网关错误.example.com/admin/login 这是一个 nginx 错误,它没有达到环回,因此它可以提供索引文件。我已经尝试过 try_files $uri $uri//index.html; 但如果我尝试访问任何其他自定义路径,例如 /auth/facebook 它会强制它通过 index.html 加载它,这是我在环回上设置的自定义路径以执行特殊行为。我不知道如何解决这个问题,我只是使用了该模板配置文件,我所需要的只是将来自 example.com 的所有请求重定向到 localhost:3000 中的我的应用程序,并在相反的方向执行相同的操作。

最佳答案

所以我不断尝试,并再次尝试使用带有@path的try_files(我猜这是一种标签或其他东西),而我之前尝试时缺少的是在proxy_pass末尾附加$uri结果是这样的:

location / {
try_files $uri $uri/ @proxy;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_bind 127.0.0.1;
proxy_pass http://127.0.0.1:3000/;
}
location @proxy {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_bind 127.0.0.1;
proxy_pass http://127.0.0.1:3000$uri;
}

现在一切正常了:P。

关于angularjs - nginx环回反向代理无法访问自定义路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com