专栏首页后端开发随笔nginx从http跳转到https

nginx从http跳转到https

场景

项目前期使用http,后期为了安全方面的考虑,启用了https。 项目架构:前端使用nginx作为多个tomcat实例的反向代理和负载均衡。 实际上只需要在nginx上启用https即可,使客户端与nginx之后使用https方式通信,而nginx与tomcat之间依然以http方式通信。

现在需要将之前客户端所有的http请求全部都自动重定向为https,只需要在nginx上添加相应配置即可。 如下配置实现来源于Nginx HTTP 跳转至 HTTPS,但是我都实践验证过。 另外,也加入了一些自己的理解整理而成。

方式1:使用rewrite指令

server {
    listen 80;
    server_name domain.com;
    rewrite ^(.*) https://$server_name$1 permanent;
}
server {
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    ssl_certificate     /etc/nginx/ssl/domain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
    # other
}

如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。

方式2:使用return指令

server {
    listen 80;
    server_name domain.com;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    ssl_certificate     /etc/nginx/ssl/domain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
    # other
}

如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。

方式三:使用error_page指令

只允许HTTP来访问时,用HTTP访问会让Nginx报497错误,然后利用error_page将链接重定向至HTTPS上。

server {
    listen 80;
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    ssl_certificate     /etc/nginx/ssl/domain.com.crt; 
    ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
    # other
    error_page 497 https://$server_name$request_uri;
}

使用error_page指令时,将http和https的监听配置写在同一个server块中,对应的其他配置也需要在该server配置块中完成。 需要注意的是,此时需要将error_page指令语句写在最后,否则不能生效。

【参考】 http://www.netingcn.com/nginx-rewrite-flag.html 关于nginx rewrtie的四种flag https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite rewrite指令 https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return return指令 https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page error_page指定 https://en.wikipedia.org/wiki/List_of_HTTP_status_codes 关于497状态码在nginx中的扩展应用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx 配置 HTTPS 强制跳转到 HTTP

    一份执着✘
  • apache http跳转https

    用户2657851
  • 从 HTTP 到 HTTPS 再到 HSTS 转

    HSTS(HTTP Strict Transport Security)国际互联网工程组织IETE正在推行一种新的Web安全协议

    wuweixiang
  • Nginx如何将HTTP通过301重定向跳转到HTTPS

    网站部署HTTPS加密连接协议后通常在刚开始我们会允许用户通过 HTTP或者HTTPS 两个版本进行自由访问。 在测试 HTTPS 版已经没有问题的情况下,

    风吹屁屁凉
  • Apache 强制 HTTP 全部跳转到 HTTPS

    阳光岛主
  • 从HTTP到HTTPS

    HTTP 是基于文本传输的协议,它位于 OSI 七层模型的应用层(Application) ,HTTP 是通过客户端向服务器发送请求,服务器响应请求来进行通讯,...

    喵叔
  • Nginx的https配置记录以及http强制跳转到https的方法梳理

    一、Nginx安装(略) 安装的时候需要注意加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块。 ...

    洗尽了浮华
  • apache如何设置http自动跳转到https

    apache环境下,配置好https后,需要设置url重定向规则,使网站页面的http访问都自动转到https访问。

    WindWant
  • Tomcat的设置HTTP页面自动跳转到HTTPS

    HTTP转换到HTTPS常见的解决方案是部署SSL证书来升级。只有正确部署了SSL证书才能使用安全的HTTPS。但有时候,客户端使用HTTP进行访问时,HTTP...

    企鹅号小编
  • js http 强制跳转到 https 全站重定向

    Savalone
  • 怎么禁止网页HTTP自动跳转到HTTPS

    黄啊码
  • HTTP强制跳转HTTPS的方法

    所有的http请求全部都自动重定向为https,只需要在nginx上添加相应配置即可。 使用rewrite方法

    KEVINGUO_CN
  • Apache由http自动跳转到https的多种方法

    本文主要和大家分享Apache http自动跳转到https的几种方法,当你的站点使用了HTTPS之后,你可能会想把所有的HTTP请求(即端口80的请求),全部...

    砸漏
  • 通过JavaScript实现HTTP到HTTPS的强制跳转 By HKL,

    最近通过一些在线文件云空间测试云存储部署静态网站遇到HTTP到HTTPS的强制跳转的问题,平时通过nginx配置是比较简单实现的, 但是例如七牛云虽然可以设置H...

    hiplon
  • Nginx 实现 Rewrite 跳转

    上一篇文章对Nginx的Location配置进行了讲解,本篇主要对于Nginx中的Rewrite跳转进行讲解。因为目前很多工作前端开发都会选择使用Nginx作为...

    创译科技
  • iis7设置http跳转https实测可用

    现在我们说说iis7设置http跳转https,因为还是有很多人在用iis服务器。首先要先安装url rewrite module,到这里去下载http://w...

    ytkah
  • http自动跳转https的配置方法

    Apache服务器: 如果需要整站跳转,则在网站的配置文件的标签内,键入以下内容:

    await
  • 配置Tomcat使用https协议(配置SSL协议) (http自动跳转到https)

    wuweixiang
  • Nginx配置SSL证书将网站从HTTP升级到HTTPS

    HTTPS全称是:超文本安全传输协议,可以简单理解为使用SSL加密传输的HTTP协议,HTTP的默认端口是80,HTTPS的默认端口是443。SSL是为网络通信...

    KenTalk

扫码关注云+社区

领取腾讯云代金券