我正计划在一个主机上托管三个网站,我们称其为raspi-dev:
home.redacted.ca,brew.redacted.ca,www.redacted.ca(或redacted.ca)
要启用此功能,我正在使用一个在端口80上接受传入连接的容器。这是反向代理配置的一个片段:
server {
server_name brew.redacted.ca;
listen 80;
location / {
proxy_pass http://brewweb;
}
}
brewweb是一个名为brewweb的容器。到目前为止,通讯正常。导航到http://brew.redacted.ca时,我得到的正是我所期望的:
"GET / HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Firefox/60.0" "-"
重点是将流量重定向到https。这是来自其他Web服务器的代码:
server {
listen 80;
server_name brew.redacted.ca;
return 301 https://brew.redacted.ca$request_uri;
}
server {
server_name brew.redacted.ca;
root /var/www/brew;
listen 443 ssl;
location / {
try_files $uri $uri/ /index.html =404;
}
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
}
因此它可以按预期工作。您转到http://brew.redacted.ca,它告诉您返回端口443。但是,在浏览器中,我看到一个无效的链接:“无法连接”。我现在的假设是,这是因为我的反向代理(它是在主机网络上侦听的唯一容器)无法接收然后在将来的443请求中转发。我对如何处理这个有点不知所措..我是否获得反向代理证书???我什至会怎么做,因为它本身甚至都没有提供任何内容。
我愿意接受所有建议。
答案 0 :(得分:0)
需要与客户端(而不是托管应用程序)进行安全对话的是您的代理。我在内部网络上执行此操作。我有一个docker主机,在单个Nginx反向代理后面运行着几个不同的开发人员工具。
所有SSL / TLS由代理服务器处理。实际为应用程序提供服务的Web服务器位于docker容器中,仅对Nginx代理容器可见。他们通过http而不是https与代理进行通信。
我正在使用为我的主服务器* .app.co颁发的通配符证书,其中具有www.app.co,utility.app.co和another.app.co的SA条目
Nginx代理服务器配置实际上最终看起来像这样:
ssl_certificate redacted.pem
ssl_certificate_key redacted.key
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name www.app.co;
proxy_pass http://www-container
...
}
server {
listen 443 default_server;
server_name www.app.co;
proxy_pass http://www-container
...
}
server {
listen 443;
server_name another.app.co;
proxy_pass http://another-container
...
}