我有两个应用程序,一个是 Rails 应用程序,它使用 Let's encrypt for SSL 和 nginx 作为服务器。它部署在 digital ocean 上。 我还添加了一个使用 Express 构建的简单 Node 应用程序(作为我的 Rails 应用程序的补充功能),该应用程序监听端口 8080。
我希望我的 Node 应用程序使用与我的 Rails 应用程序相同的 SSL 证书。 我如何通过配置nginx来做到这一点?或者有更好的方法来实现这一目标吗?
这是我的 nginx 配置文件。
server {
listen 443 ssl;
server_name mydomain.com www.mydomain.com;
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
passenger_enabled on;
rails_env production;
root /home/deploy/mydomain/current/public;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name mydomain.com;
return 301 https://$host$request_uri;
}
最佳答案
您需要生成 2 个证书,每个应用程序一个,指定不同的端口或子域。那么你需要2个不同的nginx配置
server {
listen 443 ssl;
server_name abc.xyz www.abc.xyz;
ssl_certificate /etc/letsencrypt/live/abc.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/abc.xyz/privkey.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
server {
listen 443 ssl;
server_name api.abc.xyz;
ssl_certificate /etc/letsencrypt/live/api.abc.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.abc.xyz/privkey.pem;
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;
}
}
关于ruby-on-rails - 让我们在同一个 DigitalOcean Droplet 上的 Node 和 Rails 应用程序上加密 SSL。适用于 Rails,但不适用于 Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36117443/