【问题标题】:nginx loopback reverse proxy can't access custom pathsnginx环回反向代理无法访问自定义路径
【发布时间】:2018-06-29 08:56:52
【问题描述】:

我在我的服务器上运行这个环回应用程序并尝试通过 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 文件,因此前端处理该路径的角度

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

【问题讨论】:

    标签: angularjs node.js nginx reverse-proxy loopback


    【解决方案1】:

    所以我一直在尝试,并再次尝试使用带有@path 的try_files(我猜那是一种标签或其他东西),而我之前尝试它时缺少的是在末尾附加$uriproxy_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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-16
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多