1

我更像是一名程序员而不是服务器管理员,所以这个问题对某些人来说似乎微不足道,但我无法让我的 nginx 反向代理将我的请求转发到正确的服务器......首先,这是我的配置文件(在网站- 可用,在站点启用符号链接)

upstream nodejs1 {
    server 127.0.0.1:3000;
}

upstream nodejs2 {
    server 127.0.0.1:3001;
}

server {
    server_name nodejs_proxy;
    listen 0.0.0.0:80;
    access_log /var/log/nginx/nodejs.log;
    location /otherlocation/ {
            rewrite /otherlocation/(.*) /$1 break;
            proxy_pass      http://nodejs1/;
            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-NginX-Proxy true;
    }

    location / {
            proxy_pass      http://nodejs2/;
            proxy_redirect  off;
            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-NginX-Proxy true;
    }
}

因此,如果我尝试访问http://myserver.com/,一切正常,我被重定向到端口 3001。但是,如果我尝试访问http://myserver.com/otherlocation/,我也被重定向到端口 3001(所以我得到一个 404)。

当我尝试访问时,上面的代码片段中是否有某些内容我没有正确地重定向到正确的服务器http://myserver.com/otherlocation/

谢谢

PS:myserver.com 是一个临时域,很容易多次更改(开发、预生产、生产),所以这就是为什么我试图写一些适用于所有环境的东西

4

1 回答 1

3

首先,您应该检查正确的服务器是否正在处理请求并调试最重要的内容。在http块内的 nginx.conf 文件(未启用站点)中放置此

log_format mcombined '$server_name - $host - $remote_addr - $remote_user [$time_local]  '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';

以上是加了和的nginx默认的日志格式。您可以添加任何您认为可能有用的变量。$server_name$host

然后更改启用站点的 conf 以使用此日志格式:

access_log /var/log/nginx/nodejs.log mcombined;

但真正的问题是:在你的/otherlocation/块中,你有一个重写规则,将所有内容重写为/,所以当请求到达 /otherlocation/ 块时,它们被重定向到/

因此,您最终启用站点的 conf 将如下所示:

upstream nodejs1 {
  server 127.0.0.1:3000;
}

upstream nodejs2 {
  server 127.0.0.1:3001;
}

server {
  server_name nodejs_proxy;
  listen 0.0.0.0:80;
  access_log /var/log/nginx/nodejs.log mcombined;
  location ^~ /otherlocation/ {
        proxy_pass      http://nodejs1/;
        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-NginX-Proxy true;
  }

  location / {
        proxy_pass      http://nodejs2/;
        proxy_redirect  off;
        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-NginX-Proxy true;
  }
}
于 2013-11-12T19:50:46.443 回答