两个 Nginx 反向代理使用 SSL 彼此落后
Two Nginx Reverse Proxies Behind each other with SSL
我想设置两个反向代理。这是我的网络的一个小草图:
Home Network
所以我想 运行 在我的 Ubuntu 服务器上安装一个 nginx 反向代理,在我的 Raspberry Pi 上安装一个。 Raspberry Pi 没有 24/7 全天候 运行 服务,因为它仅用于测试目的或临时服务。
Reverse Proxies
下图显示了我想如何使用 SSL 证书以及我想在哪里颁发证书。我想在我的 Ubuntu 服务器上为我的 Ubuntu 服务器上的服务 运行ning 颁发证书,我想在我的 Ubuntu 服务器上为服务 运行ning 颁发 SSL 证书我的树莓派 Raspberry Pi.
SSL-Certificates
我的问题是,颁发 SSL 证书(在我的 Raspberry Pi 上使用 Certbot)是成功的,但是当我想在我的 [=40= 上访问 HTTPS 服务 运行ning 时] 现在,我的 Ubuntu 服务器上的 Nginx 反向代理 运行ning 不会将所有流量转发到我的 Raspberry Pi 上的 Nginx 反向代理,它使用安装在我的 [=47] 上的证书=] 服务器.
这里是 Ubuntu 服务器的 Nginx 配置:
server {
server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;
ssl off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://192.168.0.45:443;
}
}
这里是 Raspberry Pi:
的 Nginx 配置
server {
server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/raspberry.mydomain.tld/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/raspberry.mydomain.tld/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location / {
proxy_pass http://localhost:3000;
}
}
server {
if ($host = www.raspberry.mydomain.tld) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = raspberry.mydomain.tld) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;
return 404; # managed by Certbot
}
我认为出现此行为是因为我的 Ubuntu 服务器上的 Nginx 配置,但我不知道。请帮助我!
谢谢!
Bananenkönig
问题是您没有在 Ubuntu 服务器上设置 HTTPS 侦听器和有效证书,因为您试图终止其上的 HTTPS,然后代理将请求传递给 Raspberry Pi。
因此您需要在 nginx 设置中指定证书才能代理通过 HTTPS 流量。
另请注意,如果您想代理传递 HTTPS 流量,则还应将上游配置为接受 HTTPS 连接。
将 HTTPS 侦听器和证书设置添加到服务器部分 Ubuntu 服务器的配置中。
listen 80;
listen 443 ssl;
ssl_certificate /path_to_cert/server.crt;
ssl_certificate_key /path_to_key/server.key;
删除ssl off;
将 proxy_set_header X-Forwarded-Proto $scheme;
行添加到位置:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://192.168.0.45:443;
}
我建议您仅在 Ubuntu 服务器上配置和颁发 SSL 证书,然后代理仅将 http 流量传递给 Raspberry Pi 以消除不必要的开销。
我想设置两个反向代理。这是我的网络的一个小草图:
Home Network
所以我想 运行 在我的 Ubuntu 服务器上安装一个 nginx 反向代理,在我的 Raspberry Pi 上安装一个。 Raspberry Pi 没有 24/7 全天候 运行 服务,因为它仅用于测试目的或临时服务。
Reverse Proxies
下图显示了我想如何使用 SSL 证书以及我想在哪里颁发证书。我想在我的 Ubuntu 服务器上为我的 Ubuntu 服务器上的服务 运行ning 颁发证书,我想在我的 Ubuntu 服务器上为服务 运行ning 颁发 SSL 证书我的树莓派 Raspberry Pi.
SSL-Certificates
我的问题是,颁发 SSL 证书(在我的 Raspberry Pi 上使用 Certbot)是成功的,但是当我想在我的 [=40= 上访问 HTTPS 服务 运行ning 时] 现在,我的 Ubuntu 服务器上的 Nginx 反向代理 运行ning 不会将所有流量转发到我的 Raspberry Pi 上的 Nginx 反向代理,它使用安装在我的 [=47] 上的证书=] 服务器.
这里是 Ubuntu 服务器的 Nginx 配置:
server {
server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;
ssl off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://192.168.0.45:443;
}
}
这里是 Raspberry Pi:
的 Nginx 配置server {
server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/raspberry.mydomain.tld/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/raspberry.mydomain.tld/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location / {
proxy_pass http://localhost:3000;
}
}
server {
if ($host = www.raspberry.mydomain.tld) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = raspberry.mydomain.tld) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
server_name raspberry.mydomain.tld www.raspberry.mydomain.tld;
return 404; # managed by Certbot
}
我认为出现此行为是因为我的 Ubuntu 服务器上的 Nginx 配置,但我不知道。请帮助我!
谢谢!
Bananenkönig
问题是您没有在 Ubuntu 服务器上设置 HTTPS 侦听器和有效证书,因为您试图终止其上的 HTTPS,然后代理将请求传递给 Raspberry Pi。
因此您需要在 nginx 设置中指定证书才能代理通过 HTTPS 流量。
另请注意,如果您想代理传递 HTTPS 流量,则还应将上游配置为接受 HTTPS 连接。
将 HTTPS 侦听器和证书设置添加到服务器部分 Ubuntu 服务器的配置中。
listen 80;
listen 443 ssl;
ssl_certificate /path_to_cert/server.crt;
ssl_certificate_key /path_to_key/server.key;
删除ssl off;
将 proxy_set_header X-Forwarded-Proto $scheme;
行添加到位置:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://192.168.0.45:443;
}
我建议您仅在 Ubuntu 服务器上配置和颁发 SSL 证书,然后代理仅将 http 流量传递给 Raspberry Pi 以消除不必要的开销。