问题描述
我在 ubuntu 16.04 桌面上使用虚拟主机从 GitHub 部署项目。这个项目一旦构建就在 LXD 中部署容器,我可以在我的浏览器中访问它。网址看起来像 https://container-private-ip:4000
,它仅适用于 HTTPS 和端口 4000。在允许不安全的网站连接后,这很有效。
现在我想在 VPS 上部署 GitHub 项目。我让反向代理在指南中工作,但对于我的用例,我似乎无法弄清楚。我可以做些什么不同的事情?
Link to the reverse proxy guide I used.
proxy
容器的代码:
server {
server_name ca.domain.come;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://futura-ca.lxd:4000; # container name
}
real_ip_header proxy_protocol;
set_real_ip_from 127.0.0.1;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/ca.katunka.me/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ca.katunka.me/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
}
server {
if ($host = ca.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 proxy_protocol;
listen [::]:80 proxy_protocol;
server_name ca.domain.com;
return 404; # managed by Certbot
}
谢谢!
解决方法
在容器内,您可以使用域名,如 proxy.lxd
和 futura-ca.lxd
。 futura-ca.lxd
上的网站可以是端口 80 上的普通网站,并且该特定网站上没有 HTTPS。原因是代理容器充当 TLS 终止代理,这意味着 HTTPS 从访问者的浏览器一直处理到(并包括)容器中的代理服务器。
如果端口 4000 是特定 Web 应用程序的默认端口,那么您仍然可以使用该端口。但如果不是,那么坚持80端口更简单。
您使用 TLS 终止代理(certbot
容器)运行 proxy
,它负责为您获取 Let's Encrypt 证书。并安装它。