前言
网站安全 开始审查了。之前我们的项目 是通过 ip + port 直接访问tomcat的,内部使用嘛。然而,现在需要使用 https 协议访问,以增强网站的安全性。
本来没有这么麻烦的,但是写代码的人, 竟然这样写的资源请求
现在访问模式 是 客户端 --> nginx 反向代理 --> tomcat
重新部署项目后,出现 问题,我采取的处理方式不是修改代码而是 搞下 nginx 转发。当然有时间还是修改代码把。
设置 nginx 请求头转发
在反向代理中添加如下配置即可。
proxy_set_header Host $host:$server_port;
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_pass http://127.0.0.1:10000;
server {
# listen 80 ;
listen 443 ssl;
# listen [::]:80 default_server;
server_name demo.com;
root /usr/share/nginx/html;
if ($request_method !~* GET|POST) {
return 403;
}
ssl on;
ssl_certificate 984288__zpmc.com.pem;
ssl_certificate_key 984288__zpmc.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
location / {
proxy_set_header Host $host:$server_port;
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_pass http://127.0.0.1:10000;
index index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
设置 tomcat
可能是因为请求头中 scheme 不能被 tomcat 识别 所以需要 响应的配置
在 tomcat 没有配置的时候, 后台就是获取不到请求头中的 scheme
server.xml 的 engine 标签中添加 value 标签
<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>
</Engine>