Nginx容器代理HTTPS

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

前言

😘本文讲解如何在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为例

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

编辑配置文件

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

粘贴以下配置信息

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

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

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

测试配置文件是否有问题

进入Nginx命令交互

  1. docker exec -it nginx /bin/bash

验证配置文件问题

  1. cd /sbin & nginx -t

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

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

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

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

  1. 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
  1. # 监听443端口
  2. server {
  3. listen 443 ssl;
  4. #填写绑定证书的域名
  5. server_name test.com;
  6. #证书文件名称
  7. ssl_certificate test.crt;
  8. #私钥文件名称
  9. ssl_certificate_key test.key;
  10. ssl_session_timeout 5m;
  11. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  12. ssl_protocols TLSv1.2 TLSv1.3;
  13. ssl_prefer_server_ciphers on;
  14. location / {
  15. proxy_pass http://test.com;
  16. }
  17. }
  18. # 监听80端口----->将http请求转为https请求
  19. server {
  20. listen 80;
  21. #填写绑定证书的域名
  22. server_name test.com;
  23. #把http的域名请求转成https
  24. return 301 https://$host$request_uri;
  25. }

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

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

教程结束~

相关文章