文档章节

nginx 代理https后,应用redirect https变成http

陈俊凯
 陈俊凯
发布于 06/14 20:35
字数 492
阅读 17
收藏 0
点赞 0
评论 0

情况说明
nginx配置https,tomcat正常http接受nginx转发。
nginx 代理https后,(java代码redirect地址)应用redirect https变成http

情况类似

http://2hei.net/mt/2010/02/request-getscheme-cannt-get-https.html

http://yywudi.info/nginx-https-400-bad-request-solution/

原因分析:

经过nginx代理后用的spring mvc的redirect,

其中: request.getScheme() return http but not https.

浏览器调整的地址变成http

解决办法:http://han.guokai.blog.163.com/blog/static/136718271201211631456811/
在代理模式下,Tomcat 如何识别用户的直接请求(URL、IP、https还是http )?
在透明代理下,如果不做任何配置Tomcat 认为所有的请求都是 Nginx 发出来的,这样会导致如下的错误结果:

    request.getScheme()  //总是 http,而不是实际的http或https
    request.isSecure()  //总是false(因为总是http)
    request.getRemoteAddr()  //总是 nginx 请求的 IP,而不是用户的IP
    request.getRequestURL()  //总是 nginx 请求的URL 而不是用户实际请求的 URL
    response.sendRedirect( 相对url )  //总是重定向到 http 上 (因为认为当前是 http 请求)

如果程序中把这些当实际用户请求做处理就有问题了。解决方法很简单,只需要分别配置一下 Nginx 和 Tomcat 就好了,而不用改程序。
配置 Nginx 的转发选项:

proxy_set_header       Host $host;
proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto  $scheme;

配置Tomcat server.xml 的 Engine 模块下配置一个 Value:
Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/

配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。X-Forwarded-For 是为了获得实际用户的 IP。
这样以上5项测试就都变为正确的结果了,就像用户在直接访问 Tomcat 一样。

后记:
上面https到http解决办法对context引导还是会出问题,
比如输入https://xxxx/signet 会转向到http://xxx/signet/ ,
http情况下:输入http://xxxx/signet会返回一个302到http://xxxx/signet/然后正常访问。

解决办法:
# re-write redirects to http as to https, example: /home
proxy_redirect http:// https://;

本文转载自:http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.html

共有 人打赏支持
陈俊凯
粉丝 5
博文 52
码字总数 31358
作品 0
厦门
nginx 代理https后,spring mvc web应用redirect https变成http

前几天用nginx 代理https后,应用redirect https变成http,导致网站无法访问的问题,在网上找了半天,终于找到了解决方法了。 虽然自己解决了,我相信还有其他朋友遇到过这个问题,所以转载分...

北京看看
2017/04/12
0
0
利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控

【编者按】本文主要介绍 [NGINX][1] 的主要功能以及如何通过 [Nginx][2] 优化 [Python][3] 应用性能。本文系国内 [ITOM][4] 管理平台 [OneAPM][5] 编译呈现。 本文上一篇系: [利用 NGINX 最大...

OneAPM蓝海讯通
2016/05/17
37
0
nginx启动http server,监听http请求,代理proxy_pass至https请求,有时返回时nginx报错,链接后端timeout

nginx启动http server,监听http请求,代理proxy_pass至https请求(如https:api.weixin.qq.com)。 从web应用A发起http访问nginx服务器,转发至https:api.weixin.qq.com,在微弱并发下,有时...

kingblade
2017/10/13
70
4
使用Nginx自带的Realip模块获取用户真实IP

(一)简要说明 如果你的Web服务器前端有代理服务器或CDN时日志中的$remote_addr可能就不是客户端的真实IP了。比较常用的解决方法有以下三几种,本文将主要介绍如何使用Nginx自带realip模块来...

科技小能手
2017/11/12
0
0
使用Nginx反向代理Flask站点

Nginx实际上只能处理静态资源请求,那么对于动态请求怎么做呢。这就需要用到Nginx的模块对这些请求进行转发,即反向代理。这些接收转发的服务器可以是Apache、Tomcat、IIS等。示意图如下: ...

兔之
2015/06/04
0
0
Nginx安装配置详解-修订版

版本更新历史: v1.2更新内容: 添加了proxy_connect正向代理模块的说明 添加了stream配置tcp代理 更新了gzip的配置 修复了大部分安装配置错误 改善了lua安装过程 v1.1更新内容: 集成ngxlu...

Leon_zhang50773
2016/11/17
0
0
windows配置nginx作为网络代理

参考了网上这位大哥的博客http://www.cnblogs.com/zhengrui/p/6377186.html谢谢大哥!侵删~ 一.下载和安装 1.下载地址: windows版的nginx1.8.0 下载后解压即可使用,我是放在了G:/nginx,是的...

恰东
2017/10/25
0
0
Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl

Nginx负载均衡 Nginx负载均衡即为当代理服务器将自定义的域名解析到多个指定IP时,通过upstream来保证用户可以通过代理服务器正常访问各个IP。 代理一台机器叫做代理,代理两台及两台服务器就...

豆渣锅
06/26
0
0
5个提高Node.js应用性能的技巧

“如果你的 node 服务器前面没有 nginx, 那么你可能做错了。”— Bryan Hughes Node.js 是使用 最流行的语言— JavaScript 构建服务器端应用的领先工具 。由于可以同时提供 web 服务器和应用...

力谱宿云
2016/04/14
324
0
nginx从入门到实践

花了一周时间了解nginx相关的知识,主要内容有: 基础知识: Nginx的快速部署安装、模块、基础配置语法,Nginx的日志输出、Nginx默认配置模块、Nginx做为http代理服务,介绍代理服务的类型,正...

898009427
2017/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

自定义OkHttp的UA

背景 上次的问题很明显 由于我们的ua清一色OkHttp导致快速定位到内部应用。 既然如此我们是否考虑可以在UA上做点手脚。 自定义我们的UA呢??? 分析 首先UA在 均为okhttp/3.2.0 大概率是由于...

Mr_Qi
17分钟前
0
0
【scikit-learn】01:使用案例对sklearn库进行简单介绍

sklearn学习笔记:Quick Start 源地址:http://scikit-learn.org/stable/tutorial/basic/tutorial.html # -*-coding:utf-8-*-''' Author:kevinelstri Datetime:2017.2.16'''......

wangxuwei
21分钟前
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
22分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
43分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
48分钟前
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
2
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部