Ali*_*lin 4 ssl nginx docker devops
我有一个类似 Shopify 的应用程序。因此,我的客户在创建商店(即customer1.myShopify.com
)时会获得子域。
使用 nginx 处理动态子域的这种情况:
server {
listen 443 ssl;
server_name admin.myapp.com;
ssl_certificate /etc/letsencrypt/live/myapp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myapp/privkey.pem;
location / {
proxy_pass http://admin-front-end:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name *.myapp.com;
ssl_certificate /etc/letsencrypt/live/myapp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myapp/privkey.pem;
location / {
proxy_pass http://app-front-end:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,因此如果您访问,admin.myapp.com
您将看到管理应用程序,如果您访问任何应用程序,xxx.myapp.com
您将看到商店前端应用程序。
我想允许我的客户连接他们自己的域。所以我告诉他们连接CNAME
和A Record
。
A Record
=> @
=>12.12.12.3(my root nginx ip)
CNAME
=> WWW
=>thier.myapp.com
不是每个请求customer.com
都会由我的 nginx 解决。
所以我将此配置添加到我的 nginx 中,以捕获所有其他 server_name 请求:
server {
listen 80;
server_name server_name ~^.*$;
location / {
proxy_pass http://app-front-end:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常。
但我SSL
该如何处理这种情况?因为它可以是任何域名。我不知道客户的域名是什么。
我如何让他们能够自动添加 SSL 证书而不需要手动创建?
这个服务器块应该可以工作,因为ssl_certificate
和ssl_certificate_key
指令支持变量名。
server {
listen 443;
server_name server_name ~^.*$;
map "$host" $domain_name { ~(.*)\.(.*)\.(.*)$ $2.$3; }
ssl_certificate /path/to/cert/files/$domain_name.crt;
ssl_certificate_key /path/to/cert/keys/$domain_name.key;
location / {
proxy_pass http://app-front-end:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
Run Code Online (Sandbox Code Playgroud)
PS使用变量名会影响性能,因为现在 nginx 会在每次 ssl 握手时加载文件。
参考: https : //nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate
归档时间: |
|
查看次数: |
417 次 |
最近记录: |