nginx还有一个502错误

nginx还有一个502错误,nginx,reverse-proxy,Nginx,Reverse Proxy,我正试着把一个server@home提供一些基本服务。所有服务都运行在专用VM中。每个虚拟机都托管在vSphere 5.5上。到目前为止,我已经: 使用nginx作为反向代理的Debian哮喘病: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服务器

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

  • 使用nginx作为反向代理的Debian哮喘病: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哮喘病: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错误网关(但Firefox中的URL是错误的)

我还尝试了其他一些方法,如这里提到的:

也不管用

在/var/logs/nginx/error.log中,我还看到502错误是由于SSL\u do\u握手错误(SSl23\u GET\u SERVER\u HELLO:tlsv1)引起的。不知道是否与502错误有关


我有点困惑,因为其他https服务工作正常。有人有建议吗?非常感谢。

以下是用户“desasteralex”的答案,该用户在serverfault.com上发布了相同问题的答案。它起作用了,所以我在这里分享他的答案(顺便说一句:D)


首先,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中不使用端口4040。我假设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;  } }
希望这有帮助