我正在尝试安装一个带有一些基本服务的 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;
}
}
希望这可以帮助。