转发配置
常见的接口调用配置:
location /com_api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://后端服务IP:后端服务端口号/;
}
若转发调不通时(常出现在调用第三方系统时),考虑去掉头消息的配置。
location /weather_api/ {
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header Host $http_host;
proxy_pass http://wthrcdn.etouch.cn/;
}
若是本地开发的代理配置,则需要加上changeOrigin: true。
'/weather_api/': {
target: 'http://wthrcdn.etouch.cn',
changeOrigin: true,
pathRewrite: {
'^/weather_api/': ''
}
},
这里有个遗留的问题:
如果weather_api在nginx没有配置,代码中调用了接口,但是不报错404。
然而如果本地开发的时候没配置代理,代码中调用接口时就会报错404。
为啥只要通过nginx转发就不报错呢?但是其他的接口nginx不配置也会404呀?
漏洞扫描安全评估整改
1、nginx版本升级版本大于1.23.2
因为我们使用docker部署的,只需修改docker-compose.yml文件:
version: "3.7"
services:
base-nginx:
restart: always
image: nginx:1.24.0
container_name: base-nginx
……
修改镜像的版本号image: nginx:1.24.0,重启服务即可。
若出现docker报错:ERROR: missing signature key
,可能是Docker version 17.12.1-ce版本太低了不支持,考虑升级到image: nginx:1.22.1。
2、修改nginx配置
在http下添加:
server_tokens off;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
需要注意的是,如果项目用到了iframe,不能配置add_header X-Frame-Options DENY
;
- add_header X-Frame-Options ALLOWALL; #允许所有域名iframe
- add_header X-Frame-Options DENY; #不允许任何域名iframe,包括相同的域名
- add_header X-Frame-Options SANEORIGIN; #允许相同域名iframe,如a.test.com允许b.test.com
- add_header X-Frame-Options ALLOW-FROM uri; #允许指定域名iframe,
所以看着来配置吧,我们是直接去掉了。
3、参考文档
https://blog.csdn.net/weiweiyixiaohhl/article/details/132795873
https://blog.csdn.net/qq_23934063/article/details/121076732
https://blog.csdn.net/jane_xing/article/details/119564046
另外pdf.js存在CVE-2024-4367漏洞
pdfjs存在CVE-2024-4367漏洞,可被执行任意js代码。
需要进行安全性升级:修复建议,将PDF.js 更新到版本 4.2.67 或更高版本。
1、在npm官网找到对应包
https://www.npmjs.com/package/pdfjs-dist
使用npm install 命令下载以后使用方式不对呀,找不到html文件。
2、pdfjs官网找包
看到右侧的Homepage:mozilla.github.io/pdf.js/
于是去官网下载了稳定版本,好像就可以了,使用方法保持和原来的一致。
如果还是不行并且报错如下图所示:
因为浏览器版本太低了!!!
找了半天原因,直到看到这个:
https://github.com/mozilla/pdf.js?tab=readme-ov-file#online-demo
我的浏览器属于Older browsers,才能打开;然而Modern browsers的示例,我打开报错。
晕死,还以为是接口请求的问题,先请求到接口再window.open各种都尝试了都不行。
3、部署后报错
本地正常了,然后部署到现场发现报错:
Failed to load module script: Expected a JavaScript module script but the server responded
百度后发现,在nginx配置的server下加上如下语句就好了:
include mime.types;
types
{
application/javascript mjs;
}
参考文章:https://blog.csdn.net/ken_coding/article/details/136761141
但是,后面发现文件能打开了,控制台继续报错:
api.js:2149 Refused to create a worker from '***/static/pdfjs/build/pdf.worker.mjs' because it violates the following Content Security Policy directive: "worker-src blob:".
说明,nginx配置了安全策略,查看nginx配置文件,确实有如下语句:
add_header Content-Security-Policy "style-src 'self' 'unsafe-inline' http://at.alicdn.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://pv.sohu.com https://*.amap.com; worker-src blob:";
但是一个环境报错,一个环境不报错,对比了nginx的配置差异。
不报错的环境,在location / {和location ~*\.(js|css|png|jpg|jpeg|gif|ico)$ {
下配置了允许跨域的语句,如下语句:
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
加上之后果然就不报错了。