当前位置: 代码网 > 服务器>网络>网络协议 > Nginx 配置 SSL(HTTPS)详解

Nginx 配置 SSL(HTTPS)详解

2024年08月01日 网络协议 我要评论
Nginx作为一款高性能的HTTP和反向代理,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。随着互联网安全性的日益重要,HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。使用Nginx进行反向代理的时候,对于正常的http;流量使用location块并且配置proxy_pass。

nginx作为一款高性能的http和反向代理服务器,自然支持ssl/tls加密通信。本文将详细介绍如何在nginx中配置ssl,实现https的访问。

随着互联网安全性的日益重要,https协议逐渐成为网站加密通信的标配。nginx作为一款高性能的http和反向代理服务器,自然支持ssl/tls加密通信。本文将详细介绍如何在nginx中配置ssl,实现https的访问。

使用nginx进行反向代理的时候,对于正常的http;流量使用 location 块并且配置 proxy_pass 转发即可,但是如果是https的流量,使用nginx进行反向代理的时候,直接使用 proxy_pass 会出现各种报错的情况,包括不限于:

  • 502 bad getway
  • err_ssl_protocol_error
  • err_connection_reset
  • proxy_pass后边的要写ip地址,不能写域名,否则还要解决域名解析的问题,有据称如果写localhost的,访问速度会变慢,是因为需要访问host文件解析localhost
  • 响应8080端口的server块,也要注意,也要写成侦听ssl,配置好证书位置
upstream  plan-uat {
        server 10.202.159.74:8080 max_fails=3 fail_timeout=10 weight=1;
}

server {
        server_name   plan-uat.ztoky.cn;
        listen 443 ssl ;
        ssl_certificate ssl/ztoky.cn.crt;
        ssl_certificate_key ssl/ztoky.cn.key;
        access_log logs/plan-uat.ztoky.cn.access.log json;

        location /plan/ {
           proxy_pass      http://plan-uat/;
           include         proxy.conf;
        }
}

检查 linux 服务器上的 nginx 是否安装 ssl 模块
nginx 安装目录,下面有个 sbin 文件夹,来到 sbin 目录下执行 ./nginx -v命令,注意是大写的 v,小写的 v 只会展示 nginx 的版本号信息。执行完出现下图圈红的这些信息说明 ssl 模块已经安装过了。可以忽略下文的 ssl 模块安装的相关内容,直接看 nginx 配置的内容。

cd /usr/local/nginx/sbin
./nginx -v

为 nginx 安装 ssl 模块
如果没有安装 ssl 模块,即使你成功的配置好 https 的相关配置,网站也依旧不能使用 https,会提示诸如:无法提供安全连接、tls协议不支持等问题。ssl 模块的安装是为了能让后端接口得以使用 https 的方式调用。找到我们的 nginx 安装解压包,我这里是放在 /usr/local/software 目录下,然后执行如下命令进入到 nginx-1.18.0 目录下。

cd /usr/local/nginx-1.18.0

来到 ngixn-1.18.0 目录 然后依次执行如下这命令,配置了 ssl 模块,使用 make 命令重新编译

./configure --with-http_ssl_module
make

进入 objs 目录,会看到 nginx 的可执行文件

注意,不能使用 make install 命令,这样会导致重新安装 nginx,此时当前目录就会出现 objs 目录

替换 nginx 可执行文件,我们使用这个新的 nginx 可执行文件 替换 sbin 目录下的 nginx 可执行文件

cp ./nginx /usr/local/nginx/sbin/

系统会询问你是否覆盖,输入 y 即可,如果覆盖失败,多半是因为你的 nginx 还在启动中,先将 nginx 关闭即可,再次检验是否安装 ssl 模块,进入 nginx 目录

cd /usr/local/nginx/sbin/

执行命令

./nginx -v

此时就能看到 ssl 模块已经安装成功了

 准备ssl证书


首先,我们需要准备ssl证书。你可以选择从证书颁发机构(ca)购买商业证书,也可以自己生成自签名证书。自签名证书虽然免费,但不会被浏览器信任,仅适用于测试环境。

如果你选择购买商业证书,通常会获得以下文件:

  • 证书文件(例如:example.com.crt)
  • 私钥文件(例如:example.com.key)
  • 中间证书文件(如果有的话)

配置nginx ssl  启用443端口


(1) 打开nginx配置文件,通常位于/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf。

(2) 在http块中,配置ssl相关参数。示例如下:

http {
    ...
    
    server {
        listen 443 ssl;
        server_name example.com;
        
        ssl_certificate /path/to/example.com.crt;  # 证书文件路径
        ssl_certificate_key /path/to/example.com.key;  # 私钥文件路径
        
        # 如果有中间证书,也需要配置
        ssl_trusted_certificate /path/to/intermediate.crt;
        
        # 其他ssl配置参数
        ssl_session_cache    shared:ssl:1m;
        ssl_session_timeout  5m;
        ssl_protocols tlsv1.2 tlsv1.3;  # 支持的协议版本
        ssl_ciphers ecdh:aesgcm:high:!rc4:!dh:!md5:!anull:!enull;  # 使用此加密套件
        ssl_prefer_server_ciphers on;  # 优先使用服务器端的加密套件
        
        # 其他server配置...
    }
    
    ...
}
测试https访问

现在,你的nginx服务器已经配置了ssl,可以通过https协议访问了。在浏览器中输入https://example.com,检查是否能够成功访问并显示安全的连接标识(如绿色锁头)。

此外,你还可以使用命令行工具(如openssl或curl)来测试https连接和证书的有效性。

配置代理


使用proxy_pass指令来配置代理。以下是一个示例配置,将https请求代理到另一个https服务器:(注意这里的后端是https的服务)

server {

  # 监听443端口,处理所有https请求
  listen 443 ssl;

  server_name your.domain.com;

  # ssl配置 
  ssl_certificate /path/to/your/cert.pem;
  ssl_certificate_key /path/to/your/private.key;
  ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
  ssl_ciphers high:!anull:!md5;

  # 代理配置,将https请求代理到另一个https服务器
  location / {
    proxy_pass https://your.backend.server;
  }
}

以上配置假设您的域名是your.domain.com,代理目标是您的后端https服务器(例如https://your.backend.server)。请记住将路径和参数适当地配置为您的特定场景。 

(0)

相关文章:

  • OSI 7层网络模型

    OSI 7层网络模型

    收集了各路知识点,总结而出的两万字OSI七层网络模型详解! [阅读全文]
  • HTTP/UDP/TCP/IP网络协议

    同时呢,4位值的是4个bit位,四个比特位的取值范围0-15.因此,这里的首部长度的单位也是4字节,比如:4个bit位 1111 == 15,实际表示的首部长就是60(4*15)字…

    2024年08月01日 网络
  • 网络协议层

    表示层(Presentation Layer):表示层负责数据的格式化、加密和压缩,以确保数据的可读性和可靠性。表示层的功能包括数据格式的转换、数据的加密解密和数据的压缩解压缩等,…

    2024年08月01日 网络
  • day40—选择题

    day40—选择题

    思路:DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响... [阅读全文]
  • 网络协议:ICMP协议及实用工具介绍

    网络协议:ICMP协议及实用工具介绍

    ICMP(Internet Control Message Protocol)协议是TCP/IP协议簇中的一个子协议,用于在IP主机和路由器之间传递控制消息。控... [阅读全文]
  • 测试人必备技能:如何进行WebSocket接口测试?

    随着Web应用的日益普及,WebSocket作为一种全双工通信协议,在移动端、游戏、视频会议等方面得到广泛应用。而对于需要实时通信的Web应用来说,WebSocket接口测试是非常…

    2024年08月01日 网络

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com