我在我的服务器中运行这个环回应用并尝试通过nginx反向代理访问它,但似乎无法正确配置nginx,我是nobx的总菜鸟。这是我的配置文件 /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文件,因此角度处理前端的路径
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/
并且需要花费很多时间来加载并且网址会多次闪烁,就像它重定向很多次一样,我会在前端重定向到角度到/home
,我有角度路由使用html5从路径中删除/#!/
,但如果我尝试访问任何其他路径,我总是会收到错误网关错误,比如http://www.example.com/admin/login
和它是一个nginx错误,它没有到达环回所以它可以提供索引文件。我已经尝试了try_files $uri $uri/ /index.html;
但是如果我尝试访问任何其他自定义路径,请说/auth/facebook
它强制它通过index.html
加载它并且这是自定义路径我已设置环回以执行特殊行为。我不知道如何解决这个问题,我只是使用了该模板配置文件,我只需要将example.com
中的所有请求重定向到localhost:3000
中的应用程序,并在相反的方向上执行相同操作
答案 0 :(得分:0)
所以我一直在尝试,并再次尝试使用带有@path的try_files
(我猜这是一种标签或其他东西)以及我之前尝试过时所缺少的是附加$uri
末尾的proxy_pass
结果是这样的:
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。