NginX 又出现 502 错误

NginX 又出现 502 错误

我正在尝试安装一个带有一些基本服务的 server@home。所有服务都在专用虚拟机中运行。每个虚拟机都托管在 vSphere 5.5 上。到目前为止,我已经:

  • Debian wheezy 使用 nginx 作为反向代理:192.168.1.12
  • Debian wheezy 与 nodeJS 用作 webapp 服务器:192.168.1.43
    • 192.168.1.43:3000 => 在 192.168.1.43:3001 上进行重定向的 http Web 服务器
    • 192.168.1.43:3001 => 提供服务的 https Web 服务器
  • 安装了 madsonic 的 Debian wheezy:192.168.1.35
    • 正如文档中所述,我在配置中输入了 --https-port=443 以启用 https 访问

我使用 nginx 来实现如下功能:

  • myapp.mydomaine.com => 转到 nodejs @ 192.168.1.43
  • music.mydomain.com => 转到 madsonic @ 192.168.1.35

我按照教程编辑了 /etc/nginx/sites-enabled 中的“默认”文件。它如下所示:

server {
 listen 80;
 server_name myapp.domaine.com;
 location / {
   proxy_pass http://192.168.1.43:3000;
 }
}
server {
 listen 443;
 server_name myapp.domain.com;
 ssl on;
 ssl_certificate [...];
 ssl_certificate_key [...];
 location / {
   proxy_pass https://192.168.1.43:3001;
 }
}
server {
 listen 80;
 server_name music.domain.com;
 location / {
   proxy_pass http://192.168.1.35:4040;
 }
}
server {
 listen 443;
 server_name music.domain.com;
 ssl on;
 ssl_certificate [...];
 ssl_certificate_key [...];
 location / {
    proxy_pass https://192.168.1.35;
 }
}

myapp 上的第一次重定向有效。当我在 madsonic 服务器上只有 http 时,音乐上的重定向有效。当我在 madsonic 服务器上激活 https 时,我收到 502 Bad gateway 错误(但 Firefox 中的 URL 是https://music.domain.com)。

我也尝试过:

server {
 listen 80;
 server_name music.domain.com;
 return 301 https//:192.168.1.35;
}

也没有用。我不知道它可能来自哪里。有人有建议吗?非常感谢。

附言:如果我的英语不够完美,请见谅。我已经尽力了 :-s

答案1

首先,Nginx 是您的 SSL 终结者。这意味着您不需要同时在 HTTP 和 HTTPS 模式下运行您的应用程序。HTTP 就足够了。

因此,对于您的应用程序,配置可能看起来像这样:

server {
 listen 192.168.1.12:80;
 server_name myapp.domain.com;
 location / {
  rewrite ^ https://$server_name$request_uri? permanent;
 }
}

上述指令将会把所有 HTTP 请求重定向到 HTTPS。

server {
 listen 192.168.1.12:443;
 server_name myapp.domain.com;
 ssl on;
 ssl_certificate [...];
 ssl_certificate_key [...];
 location / {
  proxy_pass https://192.168.1.43:3000;
 }
}

我在这里的 proxy_pass 中选择了端口 3000 来指向您应用的 HTTP 版本。您需要关闭将应用重定向到端口 3001 的功能。

关于您的 music.domain.com 重定向 - 对于 HTTP,您在 proxy_pass 参数中使用端口 4040,对于 HTTPS 则不用。我假设 madsonic 服务器只监听端口 4040,因此配置可能如下所示:

server {
 listen 192.168.1.12:80;
 server_name music.domain.com;
 location / {
  rewrite ^ https://$server_name$request_uri? permanent;
 }
}

server {
 listen 192.168.1.12:443;
 server_name music.domain.com;
 ssl on;
 ssl_certificate [...];
 ssl_certificate_key [...];
 location / {
  proxy_pass https://192.168.1.35:4040;
 }
}

希望这可以帮助。

相关内容