问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Nginx配置SSL(HTTPS)详解

创作时间:
作者:
@小白创作中心

Nginx配置SSL(HTTPS)详解

引用
CSDN
1.
https://blog.csdn.net/m0_74824054/article/details/145271437

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

使用Nginx进行反向代理时的注意事项

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

  • 502 Bad Getway
  • ERR_SSL_PROTOCOL_ERROR
  • ERR_CONNECTION_RESET

我本身遇到的ERR_SSL_PROTOCOL_ERROR错误比较多,这是因为在配置Nginx的时候,对于443端口本身的侦听没有带上ssl关键字,所以会报SSL协议错误,但是如果加上ssl,没有给证书位置,也是不行

对于转发到8080端口,如果配置不对(比如后端服务是http,结果配置了https),会出现502 Bad Getway

  • 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;
    }
}

检查Nginx是否安装SSL模块

要检查Nginx是否安装了SSL模块,可以执行以下命令:

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

如果输出中包含--with-http_ssl_module,则说明SSL模块已经安装。

为Nginx安装SSL模块

如果没有安装SSL模块,可以按照以下步骤进行安装:

  1. 进入Nginx源码目录:
cd /usr/local/nginx-1.18.0
  1. 配置SSL模块并重新编译:
./configure --with-http_ssl_module
make
  1. 替换Nginx可执行文件:
cp ./nginx /usr/local/nginx/sbin/
  1. 重启Nginx并再次检查SSL模块是否安装成功:
cd /usr/local/nginx/sbin/
./nginx -V

准备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服务器:

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)。请记住将路径和参数适当地配置为您的特定场景。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号