Docker部署Nginx服务器并实现HTTPS自动重定向

devtools/2024/11/14 17:00:29/

背景:近期有个互联网项目,因是面向C端用户,从安全考虑,请求应该是https,从用户体验角度,应让用户输入域名,而不是ip:port,但一般浏览器都是发起HTTP请求,例如,在浏览器输入:www.XXX.cn 完整请求是http://www.XXX.cn , 但这不是我们的最终请求,最终请求是https://www.XXX.cn 。大部分用户能记住域名,让他们记住协议是比较困难的(非IT专业的人几乎不懂协议概念),所以我们需要实现HTTP请求自动重定向到HTTPS请求。

一、Docker部署nginx

Docker部署nginx并配置好ssl证书,可参考:Nginx(Docker 安装的nginx)配置域名SSL证书_nginx配置域名及ssl证书-CSDN博客

二、实现浏览器HTTP请求自动重定向到HTTPS

2.1修改nginx.conf配置

监听两个端口80(HTTP)443(HTTPS),然后在80 server块里重定向到443,配置如下:

server {

        listen 80;

        server_name 域名;

        # 方式一:重定向地址
        #return 301 https://$server_name$request_uri;

        #方式二:(我使用的是这个)

        #rewrite ^(.*)$ https://$host$1 permanent;

        rewrite ^(.*)$ https://域名$1 permanent;

        #方式三:9001是宿主机开放的端口

        #error_page 497 https://$host:9001$request_uri;

}

server {

        listen        443 ssl;

        server_name 域名;

        

       #https证书
       ssl_certificate   "xxx.pem";#证书全路径
       ssl_certificate_key  "xxx.key";#证书全路径
       ssl_session_timeout 5m;
       ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_prefer_server_ciphers on;
       ssl_session_cache shared:SSL:1m;

         ....

}

 2.2 修改nginx启动脚本

#这里宿主机开放的端口为:9001(HTTPS),9002(HTTP)


port=9001

port2=9002
docker rm -f 容器名称
 
docker run -d \
--name 容器名称 \
--ulimit nofile=65535:65535 \
--ulimit nproc=65535:65535 \
-v /home/data/xxx/web/:/home/data/web/ \
-v /home/data/xxx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/data/xxx/nginx_cert/:/etc/nginx/cert/ \
-p $port: 443 \

-p $port2: 80 \
-e TZ=Asiz/Shanghai \
--restart=always \

nginx

PS:注意宿主机防火墙需要开放 9001、9002端口

三、验证

在浏览器输入www.XXX.cn(最好用手机浏览器试下,电脑有缓存,会出现误判),看是否能重定向到https请求。出现下图则表示成功


http://www.ppmy.cn/devtools/133662.html

相关文章

数学基础 -- 线性代数之线性无关

线性无关 在线性代数中,线性无关列指的是矩阵中的列向量之间不满足线性组合关系,即无法通过其他列向量的线性组合来表示某一个列向量。简单地说,一组向量是线性无关的,意味着其中任何一个向量不能由其他向量生成。 1. 线性无关的…

判断命令是否存在

#判断命令是否存在 function cmd_exists() { local ret0 command -v $1 >/dev/null 2>&1 || { local ret1; } # fail on non-zero return value if [ "$ret" -ne 0 ]; then return 1 fi return 0 } #检查是否安装telnet if $(cmd_exists telnet);then ech…

Kafka - 启用安全通信和认证机制_SSL + SASL

文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass…

windows下git和TortoiseGit(小乌龟)和putty安装配置对github进行操作

本次安装版本如下: 1,先下载安装tortoiseGit一路下载安装即可一直到在桌面上右键可以看到有git的选项出现为止,注意在第一步的时候选择使用putty还是ssh建立网络连接决定后面的步骤,本次以选择putty为例。 2,安装git&a…

【 AI写作鹅-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

练习LabVIEW第四十四题

学习目标: 计算学生三门课(语文,数学,英语)的平均分,并根据平均分划分成绩等级。要求输出等级A,B,C,D,E。90分以上为A,80~89为B,70~79为C,60~69为D&#xff…

营业执照OCR识别API接口如何用C#调用

服务器和计算设备的性能不断提升,为 OCR 识别提供了更强大的计算能力支持。更快的 CPU、GPU 以及分布式计算技术的应用,使得营业执照图片的处理速度大幅加快,能够在更短的时间内完成大量营业执照的识别工作。 研发人员不断对 OCR 识别算法进…

Linux服务器定时执行jar重启命令

1. sh脚本编写 appNamecvcp-weather PIDps -ef |grep java | grep $appName | grep -v grep | awk {print $2} if [ "$PID" "" ]; thensleep 1;echo "no process";elseecho "process exsits";kill -9 $PID fi sleep 2s nohup /usr/l…