解决http的web服务中与https服务交互的问题

问题背景:

需要在一个http的web服务中直接跟另一个https服务交互,不经过自身后端。

又来到了熟悉的跨域访问问题。

解决逻辑就是使用nginx转发,涉及到的文件也就是nginx.conf文件,前面解决minio链接时已经有经验了,但没想到这次的跨域问题还是折腾了我好几个小时,记录一下。

解决方式

配置nginx转发服务, 增加https服务的转发。

这次我没有像解决minio链接里那样改写请求路径,直接使用了https原本的uri。

c 复制代码
# nginx.conf
upstream httpsService {
      server https-service.com:443;
}

server {
    listen       80;
    server_name  _;
    access_log  /xx/xx/access.log full_proxy_log;
    
    location /api/openApi {
        proxy_pass https://httpsService ;
        proxy_set_header Host https-service.com;
    }
	....

}

如果转发还是报错,修改nginx的日志打印格式,看看是host问题还是uri问题。

c 复制代码
access_log  /xx/xx/access.log full_proxy_log;  

其中的full_proxy_log是我新增的日志格式。完整内容如下:

c 复制代码
# nginx配置入口文件,跟上面的不是同一个哈
http {
	...
	log_format full_proxy_log '$remote_addr - $remote_user [$time_local] '
                          '"$request" $status $body_bytes_sent '
                          '"$http_referer" "$http_user_agent" '
                          '-> $upstream_addr$request_uri';
    ....
}

日志输出示例:

c 复制代码
10.30.115.58 - - [18/Jul/2025:22:16:22 +0800] "POST /api/openApi/token HTTP/1.1" 200 460 "-" "PostmanRuntime/7.44.1" -> xx.xx.xx.xx:443/api/openApi/token

踩坑点

1.server https-service.com:443;这里的端口一定要带上,否则nginx默认会转发到80端口。即使你在proxy_pass中使用了https。

2.proxy_set_header Host https-service.com;要加,不然会有时候成功,有时候失败。

总结

遇到错误要冷静分析日志,日志不详细就要想办法加,而不是像无头苍蝇一样乱试。

相关推荐
定栓7 分钟前
Webpack迁到Vite第一节:模块系统迁移:require → import
运维·前端·webpack
小熊在忙fpga17 分钟前
N32G430芯片的flash表示
前端·javascript·html
Data analyse45622 分钟前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析
todoitbo28 分钟前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
会灭火的程序员34 分钟前
SuperMap AgentX Server智能体接入WEB应用技术文档
前端·supermap·agentx·agentx server
CRMEB38 分钟前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
Chloe.Zz40 分钟前
一篇入门Agent
开发语言·前端·javascript
java1234_小锋1 小时前
【技术专题】HTML5 网页技术 - HTML5 表格标签
前端·html·html5
雪芽蓝域zzs1 小时前
JS 项目转 TS 项目(Vue3 + 若依这类后台项目)完整改造清单
前端·vue.js