众所周知,http与https的“转化”需要配置SSL,今天总结一下Ubuntu下Nginx配置SSL踩过的坑。
Nginx配置SSL证书
提要
系统版本
- 查看系统版本
lsb_release -a

注:LSB是Linux Standard Base(Linux标准库)的缩写, lsb_release命令 用来与具体Linux发行版相关的Linux标准库信息。CentOS最小化安装时默认没有这个命令,需要安装lsb_release使用命令
- 不太熟悉操作的朋友们可以用快照稍微备份一下~~以免后期数据丢失。
前期准备
- 当前服务器中安装配置含有 http_ssl_module 模块的 Nginx 服务。
- 将SSL证书上传至服务器。
SSL有免费的个人使用证书,可以去阿里云或腾讯云等地方申请免费的个人使用SSL证书。
阿里云免费SSL证书现在更名为“个人测试证书(免费版)”,一般选取DV证书。“个人测试证书(免费版)”跟“个人测试证书(pro)”的区别在于证书服务周期跟运维成本,pro版本支持托管服务,但需要收取一定费用(怕麻烦不太会操作的朋友们可以考虑)
具体过程
将SSL证书上传至服务器
- 创建文件夹,在文件夹中放入你所下载的pem与key文件
找到自己的Nginx服务器配置文件
- 寻找nginx配置文件
find -name nginx.conf
根据具体路径修改配置文件,注意在文件中修改时,应将server块配置放在http块配置内
80端口重定向
- Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,可在 HTTP 的 server 中增加return 301 https://$host$request_uri;,即可将默认80端口的请求重定向为 HTTPS。
1 2 3 4 5 6 7
| server { listen 80; #请填写绑定证书的域名 server_name www.xxx.com xxx.com; (your_server_name) #把http的域名请求转成https return 301 https://$host$request_uri; }
|
443端口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| server { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name www.xxx.com xxx.com; (your_server_name) #请填写证书文件的相对路径或绝对路径 ssl_certificate /your_file_path/xxx.pem; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key /your_file_path/xxx.key; ssl_session_timeout 5m; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 yourpath(目录) 为 /etc/www。 root xxx.com(your_path); index index.html index.htm; } }
|
重启nginx服务
- 通过执行
nginx -t
命令验证配置文件问题。若配置文件没有问题则执行nginx -s reload
重启nginx服务
整体配置文件中的Server块配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| server { listen 80; #请填写绑定证书的域名 server_name www.xxx.com xxx.com;(your_server_name) #把http的域名请求转成https return 301 https://$host$request_uri; } server { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name www.xxx.com xxx.com; (your_server_name) #请填写证书文件的相对路径或绝对路径 ssl_certificate /your_file_path/xxx.pem; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key /your_file_path/xxx.key; ssl_session_timeout 5m; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 yourpath(目录) 为 /etc/www。 root xxx.com(your_path); index index.html index.htm; } }
|
注:此代码仅实现配置SSL基础代码,想要安全级别更高如禁止在证书验证目录放入敏感文件,可以自行加入,另外,网站已上CDN的需要在阿里CDN界面https设置中添加SSL证书
槽点
- 小小吐槽一下,为了方便,用了下宝塔,配置了防火墙,结果在平台上打开端口放行了,忘记在宝塔上放行。。。过了好久才找到访问不到的原因
