项目为nginx+tomcat 部署的,由于需要https环境,本来直接配置nginx https就可以了,结果在jsp 中获取request.getScheme 怎么都是http .. 可把我这个假运维愁坏了。
一般来说,nginx+tomcat ,只需要配置nginx即可,浏览器与nginx之间通信使用https ,nginx 与 tomcat 之间还是http连接 ,可是..可是 拿不到request.getScheme 的https 数据啊。
尝试了几个,nginx直接加proxy_set_header X-Forwarded-Proto https;
也不管用。
尝试了 tomcat+nginx 都配置ssl ,本来是可行的,可惜我太菜.. 没成功。
这里贴一个简单点的。
首先,需要有ssl证书,然后配置nginx为ssl ,修改下tomcat的server.xml 配置。
这部分基本不变,还是原来的配置。
server {
listen 443;
ssl on;
server_name 此处为域名;
ssl_certificate cert/此处为申请的证书.pem;
ssl_certificate_key cert/此处为申请的证书.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
# 这里可以将http重定向到https
error_page 497 301 https://$http_host$request_uri;
location / {
# 这里还是使用http ,映射本地的tomcat端口
proxy_pass http://localhost:8101;
client_max_body_size 1000m;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
# 这里要注意,增加这一行
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header header_userid $http_header_userid;
proxy_set_header user_type $http_user_type;
#防止网页被Frame
add_header X-Frame-Options SAMEORIGIN;
}
}
<Connector port="8101" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" proxyPort="443" URIEncoding="UTF-8" />
修改redirectPort 为 443 ,增加 proxyPort="443"。如果非443,则变更为其他端口。
然后在 Engine
下增加:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />
这样就可以了,主要是tomcat的配置,需要修改redirectPort proxyPort
以及增加value
的 protocolHeader="x-forwarded-proto"
,再就是nginx
增加一个 proxy_set_header X-Forwarded-Proto https
.
OK 了,做个记录,下次忘了再来查。
转载请注明出处: https://chrunlee.cn/article/nginx-tomcat-ssl.html