赞
踩
文章概要:在建站的时候我们通常要让网站通过https进行访问,不然使用http过程中,所有信息都是未加密的,并且用户访问的时候浏览器会屏蔽我们的网站。本文介绍如何通过nginx配置ssl以支持通过https协议访问网站。
本文内容来自:谷流仓AI - ai.guliucang.com
http { server { listen 443 ssl; # https默认为443端口,当然也可以用任何端口。后面ssl用于告诉Nginx在指定的端口上启用SSL/TLS加密 server_name example.com; # 你网站的域名 # 下面输入证书和私钥的地址(详细解释看下文的注释1) ssl_certificate certs/my_cert.crt; # 证书(查看注释2) ssl_certificate_key certs/my_cert.key; # 证书对应的私钥文件(查看注释3) ssl_session_cache shared:SSL:1m; # 可选配置,设置了 SSL 会话缓存的类型和大小。(具体查看注释5) ssl_session_timeout 5m; # 可选配置,设置了 SSL 会话缓存的超时时间为 5 分钟。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 可选配置, 指定了 SSL/TLS 握手过程中允许使用的加密算法的优先级顺序。(具体查看注释7) ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 可选配置,指定了允许使用的 SSL/TLS 协议版本。(具体查看注释8) ssl_prefer_server_ciphers on; # 可选配置(具体查看注释9) } }
nginx -t
验证一下配置文件是否正确配置。nginx -s reload
重载配置,使配置立即生效。通过https访问上面配置好的网站,可以在浏览器地址栏左侧的锁图标点开看看是否显示证书是安全的了。
如果希望将所有HTTP请求重定向到HTTPS,可以添加以下配置:
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
保存修改之后,nginx -s reload
重载配置文件即可。
ssl证书:
数字证书
页面获取,可以申请20个免费的DigitCert证书centos中通过yum安装certbot:yum install certbot -y
签发下载泛域名证书*.example.com
(这样所有子域名也可以用): certbot certonly -d "*.example.com" -d example.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
, 其中--preferred-challenges dns-01
表示通过dns的方式验证自己对网站的所有权。比如我的域名解析服务是阿里云提供的,按照certbot的要求,去阿里云的云解析界面添加一个指定的TXT类域名解析就行了。
签发成功后给出如下提示
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your certificate will expire on 2024-06-16. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
之后快要过期之前通过certbot renew
即可签发新的证书。
nginx -s reload
重载配置就行了。关于ssl_certificate
.pem
格式的文件,也可以是.crt
格式的文件(详情查看注释4)关于ssl_certificate_key
.pem
格式的文件,也可以是.key
格式的文件pem文件和crt文件有啥区别,都能用吗?
-----BEGIN CERTIFICATE-----
开头,以 -----END CERTIFICATE-----
结尾。PEM文件可以包含证书、私钥或者公钥。PEM格式的文件可以用于存储SSL/TLS证书、私钥和公钥。/path/to/fullchain.pem
和ssl_certificate_key填对应私钥地址/path/to/privkey.pem
ssl_session_cache
shared
表示在所有工作进程之间共享缓存。SSL
是缓存的名称。1m
表示缓存的最大大小为 1 兆字节。ssl_session_timeout
ssl_ciphers
ssl_protocols
ssl_prefer_server_ciphers
同一个域名不同端口,可以用同一个SSL证书吗?
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; ... } server { listen 8443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; ... }
在上面的示例中,两个服务器块都使用相同的SSL证书(certificate.crt)和私钥(private.key),尽管它们监听不同的端口(443和8443)。
当客户端通过不同的端口访问你的网站时,例如https://example.com或https://example.com:8443,Nginx将使用相同的SSL证书来建立安全连接,因为证书是基于域名example.com颁发的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。