Apache-2.2
讓我們為指向其他主機的子域加密設置
我正在嘗試設置一個兩台伺服器系統,其中一個正在做虛擬主機,另一個正在為虛擬主機伺服器提供內容(CDN)。
我目前擁有兩台伺服器,它們都有 Let’s Encrypt SSL。
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 SSLfoo.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。
這是您需要做的所有事情:
- 為 cdn.example.com 生成 SSL
- 在您的 cdn.example.com 上設置**反向 http 代理。**這樣所有 HTTPS 請求都將使用來自 cdn.example.com 的有效 ssl 提供,但內容將使用http://foo.com的 HTTP 內容提供
這是我如何使用 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/; } }