我已经使用 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 配置文件的新手。任何人都可以就我的实施安全提供建议吗?我错过了什么吗?我特别想知道我附加的行// *
。提前致谢。
确保您使用的是最新版本的
nginx
.查看您启用的 SSL 密码
nginx
- 为了避免降级攻击,您希望禁用一些过时的密码。您真的需要在明文端口 80 和 443 上都可以访问它吗?如果您对非加密 HTTP 没有特定需求,我会完全删除第一个块并将第二个块设为您的
default server
.众所周知的公共 HTTP/HTTPS 端口上的任何内容都将获得来自许多国家的定期机器人扫描,以寻找最近的 CVE 漏洞。
您应该考虑不要将您的应用程序托管在 URL 的根目录,而是将您的应用程序反向代理到一个路径,并且在类似
https://yourdomain.example.com/codeword
“codeword
”是唯一的地方,并且不连接到任何与通用或特定计算机/Internet 应用程序或管理概念远程相关的东西。例如,https://yourdomain.example.com/admin
或者https://yourdomain.example.com/app
可能会受到扫描的影响,但https://yourdomain.example.com/kittens
可能不会。您可以考虑了解
ngx_http_geoip_module
和只允许预期的国家/地区。HTTP Basic Auth还可用于阻止任何人导致任何 Web 应用程序代码在您的服务器上运行,而无法告诉 nginx 基本身份验证用户名/密码。