NGINX配置SSL支持

nginx,配置,ssl,支持 · 浏览次数 : 620

小编点评

## SSL 配置步骤详解 文章介绍了配置NGINX服务器的SSL证书过程,主要涉及以下步骤: **1. 创建证书文件目录** ```bash sudo mkdir -p /etc/pki/nginx/ ``` **2. 准备证书文件** * 创建两个文件:`1_www.ewhisper.cn_bundle.crt` 和 `2_www.ewhisper.cn.key`。 * 将证书文件内容分别保存为`1_www.ewhisper.cn_bundle.crt` 和 `2_www.ewhisper.cn.key`。 **3. 创建NGINX配置文件** ```bash sudo nano /etc/nginx/nginx.conf ``` **4. 配置server块** ```nginx server { listen 80; server_name www.ewhisper.cn; return 301 https://$host$request_uri; } ``` **5. 配置SSL证书** * 添加以下内容到`nginx.conf`的`server`块中: ```nginx ssl_certificate \"/etc/pki/nginx/1_www.ewhisper.cn_bundle.crt\"; ssl_certificate_key \"/etc/pki/nginx/2_www.ewhisper.cn.key\"; ``` **6. 配置ssl_session_timeout** ```nginx ssl_session_timeout 1d; ``` **7. 配置ssl_prefer_server_ciphers** ```nginx ssl_prefer_server_ciphers on; ``` **8. 启用ssl_stapling** ```nginx ssl_stapling on; ``` **9. 测试配置** ```bash sudo nginx -t # 测试配置, 没问题再重启 sudo systemctl reload nginx.service重启后,测试发现 css js都没有生效。 ``` **10. 验证SSL证书** * 测试访问`www.ewhisper.cn`,应该被强制跳转到`https://www.ewhisper.cn`。 **11. 更新网站配置** * 确保所有静态页面和第三方工具的链接都使用`https`协议。 **附录** * 本文仅供参考,实际配置可能需要根据具体情况进行调整。 * 建议参考文章中提供的ssl-config-generator工具,自动生成SSL配置。 * 最后,建议对网站进行SSL安全评级,提升网站安全性。

正文

前言

文章-腾讯云申请免费SSL证书中, 我们已经申请好了SSL证书. 那么现在, 我们就要配置全站SSL了! 💪💪💪

这次的工作主要是NGINX的配置, 同时会有一些我的博客本身的配置.

博客本身配置更改包括: (这篇文章就先不细说了)

  • 网页内链接全部从http改为https(其实配置下SITEURL, 工具会自动生成好) 并重新发布. (特别要注意, 如果有的站内css, js等没有用https就尴尬了, 会被各类浏览器拦截掉, 并提示"不安全的脚本")
  • 网站有用到的第三方工具(如拨测), 把网站的地址改为 https开头的.

NGINX配置

首先, 创建并上传准备好的证书文件到指定目录: (crt和key文件)

$ sudo mkdir -p /etc/pki/nginx/
# 通过sftp上传到该目录

进行nginx.conf 的ssl配置, 本次主要涉及到server块的配置更改, 如下: (具体的指令作用见注释)

    server {
        listen       80;
        server_name  www.ewhisper.cn;
        return 301 https://$host$request_uri;
    }
	server {
        listen       443 ssl http2;
        server_name  www.ewhisper.cn;
        root         /usr/share/nginx/html;  # 静态博客的存放位置

        ssl_certificate "/etc/pki/nginx/1_www.ewhisper.cn_bundle.crt";  # 证书路径
        ssl_certificate_key "/etc/pki/nginx/2_www.ewhisper.cn.key";  # 证书密钥路径
        ssl_session_cache shared:SSL:50m;  # ssl session cache分配50m空间, 缓存ssl session
        ssl_session_timeout  1d;  # ssl session 超时时间为1天
        ssl_session_tickets off;  # ssl session ticket 机制, 部分版本有bug, 视情况开启.

        ssl_protocols TLSv1.2;  # ssl 协议版本
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';  # ssl ciphers
        ssl_prefer_server_ciphers on;  # 倾向于使用server端的ciphers

        # HSTS 6 months
        add_header Strict-Transport-Security max-age=15768000;  
        # 添加个http header, 告诉浏览器直接转到https, 此功能有风险, 慎重选择. 
        # (比如你的证书过期忘记续了, 那么用户想转到http都没办法)

        ssl_stapling on;  # 启用ssl OCSP stapling功能, 服务端主动查询OCSP结果, 提高TLS效率
        ssl_stapling_verify on;  # 开启OCSP stapling 验证

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;  # 我的博客的location在这里配置

        #location / {
        #}

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50X.html;
            location = /50X.html {
        }
    }

📓 说明:

以上的某些指令, 我先大概介绍下, 后续会有文章做详细介绍.

  1. return 301 https://$host$request_uri; HTTP的全部永久重定向到https对应的URL
  2. /usr/share/nginx/html 静态博客的存放位置
  3. ssl_session_timeout 1d; ssl session 超时时间为1天
  4. ssl_session_tickets off; # ssl session ticket 机制, 部分版本有bug, 视情况开启.
  5. ssl_prefer_server_ciphers on; 倾向于使用server端的ciphers
  6. HSTS功能: 添加个HTTP header, 告诉浏览器直接转到https, ❗此功能有风险, 慎重选择. (比如你的证书过期忘记续了, 那么用户想转到HTTP都没办法)
  7. ssl_stapling on; 启用ssl OCSP stapling功能, 服务端主动查询OCSP结果, 提高TLS握手效率
  8. /etc/nginx/default.d/*.conf; 我的博客location配置

📓 小技巧:

火狐浏览器背后的基金会, 开源了一个非常好用的工具: ssl-config-generator

在这上边, 点一点就可以自动生成推荐的SSL配置了.

ssl-config-generator

提一点, 如上图所示, 第二列一定要根据你的客户浏览器或客户端的版本使用情况慎重选择.

比如, 用户还在用Windows XP, IE6, Java 6, 那么只能选择Old.

接下来, 就是要重启nginx来生效了.

$ sudo nginx -t  # 测试配置, 没问题再重启
$ sudo systemctl reload nginx.service

重启后, 测试发现 css js都没有生效. 😱😱😱

因为之前nginx刚配置过缓存. 当时脑子没转过来, 没有第一时间意识到可能是浏览器缓存的问题. 就直接nginx stop 再start了下. 结果悲催的我的网站可用性就从100%跌到99.81%了.

网站可用性

后来终于意识到可能是浏览器缓存的问题了, 清理了缓存后, 再启动, 终于页面显示正常, 图标也从"不安全"变成了小锁.

测试访问http://www.ewhisper.cn, 也会被强制转到 https://www.ewhisper.cn. 完美!

我的SSL评级

再来介绍个好东西 - SSL Labs. 可以对你的网站进行SSL 安全评级.

点击链接, 输入网站地址, 喝杯茶, 结果就出来了 - A+ 哈哈哈哈哈!!!!

我的网站SSL评分

最后附上我的完整报告

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

与NGINX配置SSL支持相似的内容:

NGINX配置SSL支持

前言 在文章-腾讯云申请免费SSL证书中, 我们已经申请好了SSL证书. 那么现在, 我们就要配置全站SSL了! :muscle::muscle::muscle: 这次的工作主要是NGINX的配置, 同时会有一些我的博客本身的配置. 博客本身配置更改包括: (这篇文章就先不细说了) 网页内链接全部从

自用小技巧

实时查看日志tail -f cdx-api-1.0.log 随机查询三条数据ORDER BY rand() LIMIT 3 查询创建字段时间大于30分钟的数据TIMESTAMPDIFF( MINUTE, create_time, NOW( ) ) > 30 nginx配置ssl证书http://t.

Linux下Nginx安装证书

Linux下Nginx安装证书 1.服务器自带nginx修改配置 1.查看Nginx进程: ps -aux | grep nginx 2.修改对应config文件 vim /www/server/nginx/conf/nginx.conf 修改内容: server { #SSL 默认访问端口号为 4

HTTPS基础原理和配置-3

书接上文:HTTPS 基础原理和配置 - 2,接下来介绍: 配置 NGINX 后端 HTTPS 检查配置 配置 HSTS OCSP Stapling 重要部分来了。如何使用这些选项并配置NGINX? 一、NGINX 的 HTTPS 配置 这里有一些基本的原语(或叫做指令),你可以使用:ssl_cer

Nginx配置以及热升级

目录Nginx详解1. Nginx关键特性2. Nginx配置2.1 event2.2 http2.2.1 log_format2.2.2 sendfile2.2.3 tcp_nopush2.2.4 tcp_nodelay2.2.5 keepalive_timeout2.2.6 include2.2

[转帖]nginx配置默认首页(index.html index.htm)全流程(包含遇到问题的解决)

https://www.cnblogs.com/tujietg/p/10753041.html#:~:text=%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%9A%20google%E6%89%BE%E5%88%B0%E4%BA%86%E5%85%B6%E4%

nginx配置kibana访问用户名和密码认证、及无认证访问配置

转载请注明出处: 在nginx上配置kibana页面访问时,默认是采用kibana的认证,一般直接安装kibana后,是没有用户名和密码认证的。 如果要在负载均衡上配置反向代理和用户认证,可按以下步骤进行配置: 1.安装Nginx: 首先,确保已经安装了Nginx,并且可以正常访问Kibana页面。

[转帖]Nginx中的Rewrite的重定向配置与实践

https://www.cnblogs.com/tugenhua0707/p/10798762.html 阅读目录 一:理解地址重写 与 地址转发的含义。 二:理解 Rewrite指令 使用 三:理解if指令 四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能

[转帖]浅析Nginx配置获取客户端真实IP的proxy_set_header、X-Real-IP、$remote_addr、X-Forwarded-For、$proxy_add_x_forwarded_for分别是什么意思

https://www.cnblogs.com/goloving/p/15588668.html 一、问题背景 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip,但是

记一次nginx配置不当引发的499与failover 机制失效

背景 nginx 499在服务端推送流量高峰期长期以来都是存在的,间或还能达到告警阈值触发一小波告警,但主观上一直认为499是客户端主动断开,可能和推送高峰期的用户打开推送后很快杀死app有关,没有进一步探究问题根源。 然而近期在非高峰期也存在499超过告警阈值的偶发情况,多的时候一天几次,少的时候