如何使用SSL为多个自定义域正确设置NGINX
我正在制作一个多租户平台。我的主url是如何使用SSL为多个自定义域正确设置NGINX,ssl,nginx,lets-encrypt,Ssl,Nginx,Lets Encrypt,我正在制作一个多租户平台。我的主url是example.com,每个新用户都会得到一个子域名username.example.com,这很有效。它运行在数字海洋上的Ubuntu微滴上。 我想更进一步,允许他们通过在DNS上创建名称记录来添加指向我的应用程序的自定义域。通过手动设置并为自定义域编写额外的服务器块,我也实现了这一点。我从certbot开始生成证书,但后来手动修改了很多代码 以下是我的nginx文件在/nginx/sites available/example.com上的外观: ser
example.com
,每个新用户都会得到一个子域名username.example.com
,这很有效。它运行在数字海洋上的Ubuntu微滴上。
我想更进一步,允许他们通过在DNS上创建名称记录来添加指向我的应用程序的自定义域。通过手动设置并为自定义域编写额外的服务器块,我也实现了这一点。我从certbot开始生成证书,但后来手动修改了很多代码
以下是我的nginx文件在/nginx/sites available/example.com
上的外观:
server {
server_name example.com *.example.com;
# pass to NODEJS app running at :3000
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com-0001/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
server_name customdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/customdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/customdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
listen 80;
listen [::]:80;
server_name ~^(?<subdomain>.+)\.example.com$;
return 301 https://$subdomain.example.com$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name customdomain.com$;
return 301 https://customdomain$request_uri;
}
服务器{
server_name example.com*.example.com;
#传递到运行速度为:3000的NODEJS应用程序
地点/{
代理通行证http://localhost:3000;
proxy_http_版本1.1;
代理设置头升级$http\U升级;
代理集头连接“升级”;
代理设置头主机$Host;
代理缓存绕过$http\u升级;
}
侦听[:]:443 ssl ipv6only=on;
听443ssl;
ssl_证书/etc/letsencrypt/live/example.com-0001/fullchain.pem;
ssl_certificate_key/etc/letsencrypt/live/example.com-0001/privkey.pem;
包括/etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam/etc/letsencrypt/ssl-dhparams.pem;
}
服务器{
服务器名称customdomain.com;
地点/{
代理通行证http://localhost:3000;
proxy_http_版本1.1;
代理设置头升级$http\U升级;
代理集头连接“升级”;
代理设置头主机$Host;
代理缓存绕过$http\u升级;
}
侦听443 ssl;#由Certbot管理
ssl_certificate/etc/letsencrypt/live/customdomain.com/fullchain.pem;
ssl_certificate_key/etc/letsencrypt/live/customdomain.com/privkey.pem;
包括/etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam/etc/letsencrypt/ssl-dhparams.pem;
}
服务器{
听80;
听[:]:80;
服务器名称~^(?.+)\.example.com$;
返回301 https://$subdomain.example.com$request\u uri;
}
服务器{
听80;
听[:]:80;
服务器名称customdomain.com$;
返回301https://customdomain$request_uri;
}
因此,我的问题是:
可用域下创建多个文件,而不是在同一文件中创建多个服务器块吗
我是否应该改为默认设置
谢谢。您能解决这个问题吗?我也希望这样做thing@CrhistianRamirez这是一个测试设置,我只使用certbot自动完成的,安装自定义证书仍然是手动的,我永远无法回答我在这里提出的所有4个问题。对于prod设置,我和证书管理员一起转到了Kubernetes。