我想相互建立两个反向代理。这是我的网络的示意图:
所以我想在我的Ubuntu服务器上运行一个Nginx反向代理,在我的Raspberry Pi上运行一个。 Raspberry Pi没有24/7全天候运行的服务,因为它仅用于测试目的或仅用于临时服务。
下图显示了我想如何使用SSL证书以及在哪里颁发证书。我想为我的Ubuntu服务器中的Ubuntu服务器上运行的服务颁发证书,我想为Raspberry Pi中的Rasperry Pi中运行的服务颁发SSL证书。
我的问题是,成功发行了SSL证书(在Raspberry Pi上具有Certbot),但是当我现在想要访问在Raspberry Pi上运行的HTTPS服务时,在我的Ubuntu Server上运行的Nginx反向代理却没有。将所有流量转发到我的Raspberry Pi上的Nginx反向代理,它使用在我的Ubuntu服务器上安装的证书。
这是Ubuntu Server的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连接。
在服务器部分的Ubuntu服务器上的配置中添加HTTPS侦听器和证书设置。
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 Server上配置和颁发SSL证书,然后代理仅将http流量传递给Raspberry Pi,以消除不必要的开销。