我已经使用 LetsEncrypt 为证书设置了一个 Node/Express HTTPS / SSL 服务器,在端口 3000 上运行。它可以正常工作,我可以通过 访问它www.example.com:3000
。但我真的希望能够直接从 访问它www.example.com
。
我通过创建自己的 nginx 配置并运行设法使其工作(参见下面的代码)sudo systemctl restart nginx
。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; // *
location / {
allow all; // *
}
}
server {
server_name www.example.com;
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass https://127.0.0.1:3000;
allow all; // *
}
}
当我设置证书时,我从 Certbot 自动生成的服务器调整了第二台服务器。
我对 nginx 配置文件完全陌生。有人能就我的实现的安全性提出建议吗?我遗漏了什么吗?我特别想知道我附加的几行// *
。提前致谢。
答案1
确保您使用的是最新版本的
nginx
。检查您已启用的 SSL 密码
nginx
- 为了避免降级攻击,您需要禁用一些过时的攻击。您真的需要它在纯文本端口 80 和 443 上均可访问吗?如果您对非加密 HTTP 没有特定需求,我会完全删除第一个块,并将第二个块作为您的
default server
。许多国家都会对知名公共 HTTP/HTTPS 端口上的任何内容进行定期机器人扫描,以寻找最近的 CVE 漏洞。
您应该考虑不要将您的应用程序托管在 URL 的根目录下,而是将其反向代理到某个路径,例如
https://yourdomain.example.com/codeword
“codeword
”是独一无二的,与任何与通用或特定计算机/互联网应用程序或管理概念无关的东西。例如,https://yourdomain.example.com/admin
或https://yourdomain.example.com/app
可能会受到扫描,但https://yourdomain.example.com/kittens
可能不会。您可能考虑了解
ngx_http_geoip_module
和仅允许预期的国家。HTTP 基本认证还可以用来阻止任何人导致任何 Web 应用程序代码在你的服务器上运行,而无需告诉 nginx 基本的身份验证用户名/密码。