创建 Nginx docker 容器反向代理 https

本文最后更新于:2022年5月21日 凌晨

Nginx 反向代理可以方便地实现服务器网络配置,本文记录使用 Nginx 容器进行反向代理 https 服务的方法。

预备知识

当前环境

介绍一下我当前的实验环境,有相似需求和环境的同志可以参考我的操作流程

  • 本机有部署在 IP:Port 的某个网页服务器
  • 服务器没有配置 https,仅提供 http 协议服务
  • 安装好了docker
  • 准备安装 nginx docker
  • 目的:以 https 协议对外反向代理本地 http 服务

操作流程

创建 Nginx 容器

  • 先在本地创建共享文件夹 /share/ssl
1
docker run --name=nginx -p 9443:443 -d --restart=always -v /share/ssl:/ssl nginx

创建SSL证书

我是直接在 nginx 容器中创建的证书,也可以在服务器生成导入到容器中

自签名证书会在登陆网站时提示证书不被CA信任,需要手动添加到本地信任证书列表中

想要比较方便地访问需要生成CA证书

事实上我自己没有成功生成出来,最终使用的SSL证书是在百度智能云申请

  • 获取 server_private.key, server.crt 文件
  • 将证书放在 /ssl 文件夹中
1
2
:/ssl# ls
ca.csr ca.key ca_public.crt ca_public.srl server.crt server.csr server_private.key server_public.pem

Nginx 配置

  • /etc/nginx/conf.d 文件夹中创建配置文件 test.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 443 ssl;
listen [::]:443 ssl;
# server_name localhost;

ssl_certificate /ssl/key1/server.crt;
ssl_certificate_key /ssl/key1/server.key;

location / {
proxy_set_header X-FORWARDED-FOR $remote_addr;
proxy_set_header X-FORWARDED-PROTO $scheme;
proxy_set_header Host $http_host;
proxy_pass http://192.168.xxx.xxx:xxxx;
}
}

  • 配置完成后重启 nginx 服务
1
service nginx reload
  • 配置好后可以查看是否配置成功
1
nginx

如果有错误会在命令输入后提示

  • 新版内核的 Linux 发行版要求密钥长度最少2048位,1024位的可能报错
1
SSL: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small

测试

  • 访问 本机 IP:9443 端口

  • 地址仅能以 https 协议访问

  • https 后可以看到被代理的网页内容:

  • 而且域名如果不是注册证书时使用的 Common Name 会给出不安全的提示

  • 正确配置证书后可以正常访问:

参考资料


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!