itning/Student-Homework-Management-System

request.getScheme() 在反向代理并且开启https情况下返回http

Closed this issue · 2 comments

你好,请原谅我提这么多issue,不知有没有其它更好的联系方式。

我注意到很多文件里有,

<% String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    application.setAttribute("basePath", basePath);
%>

我用Nginx做反代,并且开启https,发现所有的css,js等文件的访问还是变成了http,导致问题。

应该是 request.getScheme()这个在反代和https情况下出现的,这里 有个修复方式,请问怎么做比较合适?

Solved , https://spex.top/archives/nginx-tomcat-http-https.html

Nginx:

location / {
        proxy_pass http://dashboard;
        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 $scheme;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

Tomcat

<Engine name="Catalina" defaultHost="localhost">
      <Valve className="org.apache.catalina.valves.RemoteIpValve"  
        remoteIpHeader="X-Forwarded-For"  
        protocolHeader="X-Forwarded-Proto"  
        protocolHeaderHttpsValue="https"/>

我刚刚开始接触jsp,请问这个basePath的东西不会导致路由的时候占用太多后端资源吗?
每个request都要获取basePath? 好像这样的写法是IDE生成的?能不能放在一个文件里方便改?

nginx与tomcat通信要使用https,你可以看看这个