我想在对方后面设置两个反向代理。这是我的网络的一个小草图:
所以我想在我的Ubuntu服务器上运行一个nginx反向代理,在我的Raspberry Pi上运行一个。Raspberry Pi没有在它上24/7运行服务,因为它只用于测试或临时服务。
下图显示了我希望如何使用SSL证书,以及我想在哪里颁发它们。我想在我的Ubuntu服务器中为运行在我的Ubuntu服务器上的服务颁发证书,我想为我的Raspberry Pi中运行在Rasperry Pi上的服务颁发SSL证书。
我的问题是,颁发SSL证书(在我的Raspberry Pi上使用Certbot )是成功的,但是当我想现在访问运行在我的Raspberry Pi上的HTTPS-Service时,运行在我的Ubuntu Server上的Nginx反向代理并不会将所有流量转发到我的Raspberry Pi上的Nginx反向代理,并且它使用安装在我的Ubuntu服务器上的证书。
下面是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
发布于 2020-06-07 20:24:06
问题是,您没有在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,以消除不必要的开销。
https://stackoverflow.com/questions/62250815
复制相似问题