Nginx+tomcat配置https后出现400 Bad Request问题
2017-11-29 17:48
721 查看
因为任职公司的软件产品都是基于二维码的,必须使用微信扫码获取OPENID的形式展开业务,然后坑爹的TX发布通知12月底之前所有http协议的页面将无法访问,所以一狠心购买了一个通配符的SSL证书,在此简述下nginx+tomcat配置https的流程和我遇到的问题:
系统环境:Centos6.8
软件版本:nginx(1.12.1) tomcat(7.0.78)
nginx和tomcat的安装这里就不再赘述了,直接进入主题!
由于本人算个三流的运维,也是第一次配置https,遇到很多坑,自己查资料弄了好几天才弄生产环境的项目
不说废话了,公司项目一般由后台和wap端组成,一般情况下我会使用两个tomcat分开部署,但是一些用户量不大的项目会放在一个tomcat 里面进行部署;
nginx的SSL配置如下:
##项目主配置
server {
listen 443;
ssl on;
server_name test-2.***.com;
root /www/html;
index index.html index.htm;
ssl_certificate /etc/nginx/cert/214334620590810.pem;
ssl_certificate_key /etc/nginx/cert/214334620590810.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;
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:8083;
proxy_redirect off;
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 https;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}
}
##http强制跳转https
server {
listen 80;
server_name test-2.***.com;
return 301 https://$server_name$request_uri;
}
这部分配置基本就这样了,ssl部分直接参照阿里云的配置文档(因为证书直接在阿里云购买,服务器什么的都是阿里云的),后面做了强制跳转;
tomcat的配置就很坑爹了!!
我们有很多老项目使用的tomcat6部署的,以前的开发人员大多都离职了,换成tomcat7或者更高的版本部署会报错!!
当然https配置也没有成功,所以这里主要说下tomcat7的配置:
(注意!次配置方式不适用于tomcat6版本!!)
在网上查了下资料,说是要修改tomcat配置文件server.conf,然后听了开发人员的建议进行修改,修改后内容如下:
……
<Connector port="8095" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
proxyPort="443"
URIEncoding="UTF-8" />
……
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />
……
修改后重启tomcat和nginx并没有什么问题,单独部署项目的tomcat访问原来的域名也会正常跳转到https,问题是当tomcat部署了两个项目的时候访问就会报错400 Bad Request !
比如原来访问test.***.com/manage可以正常访问,配置https后浏览器直接输入test.***.com/manage 域名会自动变成http://test.haha.com:443/manage/ 然后页面提示400 Bad Request,更神奇的是如果浏览器输入test.***.com/manage/ (结尾带斜杠!)却可以正常跳转到https,这我就蒙逼了~
由于本人新手,一直怀疑是nginx配置的问题,所以绕了很多弯路,研究了一天的nginx配置后无意中看到别的项目的tomcat里面的server.conf原配置并没有 proxyPort="443"这一行,抱着尝试下的心理去掉了这一行后重启了tomcat,问题解决~
具体原因我也不知道是为什么,tomcat的配置我也是参考别人的,并且找开发人员确认过没有问题,但是还是被现实给了一耳光,原因以后慢慢摸索吧~ 先记录下问题。
系统环境:Centos6.8
软件版本:nginx(1.12.1) tomcat(7.0.78)
nginx和tomcat的安装这里就不再赘述了,直接进入主题!
由于本人算个三流的运维,也是第一次配置https,遇到很多坑,自己查资料弄了好几天才弄生产环境的项目
不说废话了,公司项目一般由后台和wap端组成,一般情况下我会使用两个tomcat分开部署,但是一些用户量不大的项目会放在一个tomcat 里面进行部署;
nginx的SSL配置如下:
##项目主配置
server {
listen 443;
ssl on;
server_name test-2.***.com;
root /www/html;
index index.html index.htm;
ssl_certificate /etc/nginx/cert/214334620590810.pem;
ssl_certificate_key /etc/nginx/cert/214334620590810.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;
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:8083;
proxy_redirect off;
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 https;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}
}
##http强制跳转https
server {
listen 80;
server_name test-2.***.com;
return 301 https://$server_name$request_uri;
}
这部分配置基本就这样了,ssl部分直接参照阿里云的配置文档(因为证书直接在阿里云购买,服务器什么的都是阿里云的),后面做了强制跳转;
tomcat的配置就很坑爹了!!
我们有很多老项目使用的tomcat6部署的,以前的开发人员大多都离职了,换成tomcat7或者更高的版本部署会报错!!
当然https配置也没有成功,所以这里主要说下tomcat7的配置:
(注意!次配置方式不适用于tomcat6版本!!)
在网上查了下资料,说是要修改tomcat配置文件server.conf,然后听了开发人员的建议进行修改,修改后内容如下:
……
<Connector port="8095" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
proxyPort="443"
URIEncoding="UTF-8" />
……
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />
……
修改后重启tomcat和nginx并没有什么问题,单独部署项目的tomcat访问原来的域名也会正常跳转到https,问题是当tomcat部署了两个项目的时候访问就会报错400 Bad Request !
比如原来访问test.***.com/manage可以正常访问,配置https后浏览器直接输入test.***.com/manage 域名会自动变成http://test.haha.com:443/manage/ 然后页面提示400 Bad Request,更神奇的是如果浏览器输入test.***.com/manage/ (结尾带斜杠!)却可以正常跳转到https,这我就蒙逼了~
由于本人新手,一直怀疑是nginx配置的问题,所以绕了很多弯路,研究了一天的nginx配置后无意中看到别的项目的tomcat里面的server.conf原配置并没有 proxyPort="443"这一行,抱着尝试下的心理去掉了这一行后重启了tomcat,问题解决~
具体原因我也不知道是为什么,tomcat的配置我也是参考别人的,并且找开发人员确认过没有问题,但是还是被现实给了一耳光,原因以后慢慢摸索吧~ 先记录下问题。
相关文章推荐
- nginx: 400 Bad Request | The plain HTTP request was sent to HTTPS port
- nginx过一段时间出现400 Bad Request 错误的解决方法
- 关于nginx配置ssl https请求访问出现EM_do_header:bad password read error:140B0009:SSL 错误
- 关于spring-mvc中使用ajax调用后台接口出现400 bad request的问题解决方案
- linux上wget命令出现HTTP request sent, awaiting response... 400 Bad Request问题
- Nginx出现The plain HTTP request was sent to HTTPS port问题解决方法
- Nginx php https 400 Bad Request
- Nginx配置Https访问,tomcat无法正确获取schema的问题
- 一次 https 证书引起的 nginx 400 bad request 分析
- scrapy 出现400 Bad Request 问题
- 新手使用 Nexus 出现的问题 (400-bad request missing request entity)
- Django 部署 Python3+Django+uWSGI+Nginx(含处理Nginx返回400 Bad Request问题、防火墙管理)
- nginx配置反向代理或跳转出现400问题处理记录
- 解决Nginx 400 Bad Request问题的一些思路
- nginx: 400 Bad Request | The plain HTTP request was sent to HTTPS port
- nginx配置tomcat https websockets等问题汇总解决方式
- boa 服务器进行 cgi 测试时出现 400 Bad Request 【已解决】
- 在Mac OS X 环境下配置Intellij IDEA+Tomcat及Tomcat出现权限问题
- 解决“在eclipse中配置Tomcat时,出现Cannot create a server using the selected type的错误”的问题