
www.example.com:3000
我已經使用 LetsEncrypt 作為憑證設定了一個 Node/Express HTTPS / SSL 伺服器,在連接埠 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
」是唯一的內容,並且不連接到與通用或特定電腦/Internet應用程式或管理概念遠端相關的任何內容。例如,https://yourdomain.example.com/admin
或者https://yourdomain.example.com/app
可能會被掃描擊中,但https://yourdomain.example.com/kittens
也可能不會。您可以考慮了解
ngx_http_geoip_module
和只允許預期國家。HTTP 基本驗證也可以用於阻止任何人導致任何 Web 應用程式程式碼在您的伺服器上運行,而無法告訴 nginx 基本驗證使用者名稱/密碼。