Nginx容器代理HTTPS

x33g5p2x  于2022-01-13 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(445)

前言

😘本文讲解如何在Linux系统上安装Docker容器Nginx,并且使用Nginx代理HTTPS加密请求,如果你不想这么复杂的配置,完全可以使用宝塔来一键部署,自动获取SSL证书等,本文是纯手动配置SSL证书。

提醒

  • 😊配置HTTPS加密访问需要先获取网站SSL证书,本教程在已获取SSL证书情况下----->“方可食用
  • But 你没有证书可以在你的运营商那里申请免费的SSL证书,或者去宝塔上面申请SSL证书。

💕今日份图片~

演示环境

系统:CentOS 7
Docker:Docker 20.10.10

安装Nginx容器

👍Docker安装和配置Nginx服务

安装教程在这篇☝文章已经详细讲解~

👀如果你是小白,请在完成上面的文章以后再进行以下操作,如果你已经安装部署好了Nginx容器,容器与本机的映射文件目录和我的可能不一样,请自行将命令中的配置路径改为你的Nginx配置目录

创建配置文件

配置文件名称随意,这里以test为例

touch /mydata/nginx/conf/conf.d/test.conf

编辑配置文件

vim /mydata/nginx/conf/conf.d/test.conf

粘贴以下配置信息

✔这里的配置以test.com为例,将配置信息改成你的网站信息后再进行复制粘贴

注意:证书文件和私钥文件要放在Nginx的conf目录下,配置文件中的证书名称和秘钥名称都要和文件名一一对应

# 监听443端口
server {
        #SSL 访问端口号为 443
        listen 443 ssl; 
        #填写绑定证书的域名
        server_name test.com; 
        #证书文件名称
        ssl_certificate test.crt; 
        #私钥文件名称
        ssl_certificate_key test.key; 
        ssl_session_timeout 5m;
        #请按照以下协议配置
        ssl_protocols TLSv1.2 TLSv1.3; 
        #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        location / {
           proxy_pass http://test.com;
        }
    }

测试配置文件是否有问题

进入Nginx命令交互

docker exec -it nginx /bin/bash

验证配置文件问题

cd /sbin & nginx -t

如果没有问题,则会显示以下提示

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果存在,请您重新配置或者根据提示修改存在问题。

配置完毕且验证没有问题记得重启Nginx容器进行测试

docker restart nginx

HTTP自动跳转 HTTPS的安全配置(可选,建议配置)

如果您需要将 HTTP 请求自动重定向到 HTTPS。您可以通过以下操作设置:

  • 在页面中添加 JS 脚本
  • 在后端程序中添加重定向
  • 通过 Web 服务器实现跳转

Nginx 支持 rewrite(重定向) 功能。若您在编译时没有去掉 pcre,您可在 HTTPserver 中增加 return 301 https://$host$request_uri;,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:

说明:

  • 未添加注释的配置语句,您按照下述配置即可。
  • 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为 nginx/1.15.0 以上请使用 listen 443 ssl 代替 listen 443ssl on
# 监听443端口
server {
   listen 443 ssl;
    #填写绑定证书的域名
    server_name test.com; 
    #证书文件名称
    ssl_certificate  test.crt; 
    #私钥文件名称
    ssl_certificate_key test.key; 
    ssl_session_timeout 5m;
    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 / {
            proxy_pass http://test.com;
    }
}
# 监听80端口----->将http请求转为https请求
server {
    listen 80;
    #填写绑定证书的域名
    server_name test.com; 
    #把http的域名请求转成https
    return 301 https://$host$request_uri; 
}

说白了就是你在使用http://xx.xx.xx访问网站会被自动转为https://xx.xx.xx

提示:监听80端口的server只用更改server_name即可。

教程结束~

相关文章