Apache-2.2

讓我們為指向其他主機的子域加密設置

  • November 15, 2018

我正在嘗試設置一個兩台伺服器系統,其中一個正在做虛擬主機,另一個正在為虛擬主機伺服器提供內容(CDN)。

我目前擁有兩台伺服器,它們都有 Let’s Encrypt SSL。

網路主機https://example.com

example.com 123.123.123.123

CDN https://foo.com

foo.com 111.111.111.111

我已經為我的虛擬主機伺服器設置了一個子域: cdn.example.com,它指向 CDN 伺服器foo.com 111.111.111.111

問題是cdn.example.com沒有 Let’s Encrypt SSL。

我怎樣才能獲得cdn.example.com指向的 Let’s Encrypt SSL foo.com 111.111.111.111

當我執行時:

certbot --apache --cert-name example.com -d cdn.example.com

它給出了一個錯誤:

Failed authorization procedure. cdn.example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://cdn.example.com/.well-known/acme-challenge/PaKenmvAqHoOdOBUhThxxxxx: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

IMPORTANT NOTES:
- The following errors were reported by the server:

  Domain: cdn.example.com    Type:   unauthorized    Detail: Invalid response from    http://cdn.example.com/.well-known/acme-challenge/PaKenmvAqHoOdOBUhThxxxxx: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
  2.0//EN\">\n<html><head>\n<title>404 Not    Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

  To fix these errors, please make sure that your domain name was    entered correctly and the DNS A/AAAA record(s) for that domain    contain(s) the right IP address.

執行預設的 Debian 和 Apache2 安裝。

我想我必須在我的 CDN 伺服器中手動設置 acme-challenge 文件?我應該執行什麼命令?

簡短的回答是“你沒有”。您的輔助主機 (foo.com) 上不需要 SSL。

這是您需要做的所有事情:

  1. 為 cdn.example.com 生成 SSL
  2. 在您的 cdn.example.com 上設置**反向 http 代理。**這樣所有 HTTPS 請求都將使用來自 cdn.example.com 的有效 ssl 提供,但內容將使用http://foo.com的 HTTP 內容提供

Apache 配置:https ://www.digitalocean.com/community/questions/apache-proxypass-and-reverseproxy-to-a-ssl-https-configured-domain

這是我如何使用 NGINX 進行操作的範例:

server  {
   listen  443 ssl;
   server_name  cdn.example.com;
   ssl  on;
#BEGIN OPTIONAL--in case you want to have more stats on foo.com
   proxy_set_header Host            $host;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_set_header ClientIP $remote_addr;
#END OPTIONAL--
   ssl_certificate /etc/ssl/cdn.example.com.pem;
   ssl_certificate_key /etc/ssl/cdn.example.com.key;
   location  / {
           proxy_pass  http://foo.com:80/;
   }
}

引用自:https://serverfault.com/questions/940178