首页 > 系统相关 >nginx proxy webservie 问题&实践

nginx proxy webservie 问题&实践

时间:2022-10-07 12:00:42浏览次数:78  
标签:webservie sub filter nginx proxy https gzip

webservice 具有特殊性,因为wsdl 文件是服务器端生成的(大部分,而且是动态的),所以我们直接使用nginx 进行proxy 会有问题
实际上此问题比较常见,而且网上也有人碰到,可能因为时间比较长了,技术变动,不见得就能解决问题,以下是自己在实践中一些整理

主要的问题

  • 对于soap 的地址是不对
  • 如果基于动态代码生成调用,会有问题(比如基于cfx 动态执行webservice),造成代码无法生成(还是上边soap地址不对引起的)

解决方法

原则是替换,只要保障wsdl 的schema 文件符合要求,而且关联地址可以访问就行了,最简单的方法就是基于nginx 的sub_filter 模块

  • 参考配置
location / {
sub_filter http://xxxx 'https://yxxxxxx';
sub_filter_types text/xml;
sub_filter_once off;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
client_body_buffer_size 10M;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10G;
proxy_buffers 1024 4k;
proxy_read_timeout 300;
proxy_pass http://xxxxx;
}
  • 几个核心参数说明
    sub_filter_types 指定替换的类型,可以指定为*
    sub_filter_once 表示我们要进行多次替换
    sub_filter 进行替换的指定,比较简单

一些坑

默认sub_filter 对于gzip 似乎是不处理的,会造成大家发现没有生效,此时大家可能会怀疑是指令没生效,实际是没问题的,只是gzip 的问题

解决方法:我们在proxy 的时候不进行gzip 的处理(通过Accept-Encoding 请求头),比如上边的我使用了'' 也可以使用identity,但是大家需要

注意的是对于有些服务尽管我们配置了不使用gzip 处理,但是服务开发者或者服务器管理员,强制使用了gzip(节省带宽),可能就不生效了

解决方法是有的,比如如下图

nginx proxy webservie 问题&实践_解决方法

 

 

合理处理机制是先通过nginx proxy 一次(不实用gzip 了),然后在proxy 处理,这样就可以规避gzip 问题了,当然也有社区开发了gunzip_filter 模块可以使用
也是不错的,但是很多时候我们生产环境是没有打包的,而且有时比较难打包,所以基于多次proxy 是一个不错的选择

参考资料

​https://forum.nginx.org/read.php?11,271185​​​
​​​https://httpwg.org/specs/rfc7231.html#header.accept-encoding​​​
​​​https://nginx.org/en/docs/http/ngx_http_proxy_module.html​​​
​​​https://cxf.apache.org/docs/dynamic-clients.html​​​
​​​https://github.com/catap/ngx_http_gunzip_filter_module​

标签:webservie,sub,filter,nginx,proxy,https,gzip
From: https://blog.51cto.com/rongfengliang/5734387

相关文章

  • 一次nginx 请求真实ip 问题处理
    nginxngx_http_realip模块是比较重要的,我以前也大概说过,同时网上关于此模块的资料也不少,今天就碰到了一个获取真实ip的问题记录下参考业务模型  问题以前的配置,waf......
  • nginx ngx_http_addition_module 模块openresty content_by_lua 不能生效的原因
    nginx的ngx_http_addition_module模块也是一个修改content的好东西,对于openresty我们经常使用content_by_lua阶段处理但是经过分析ngx_http_addition_module源码的......
  • nginx 的 ngx_http_addition_module 模块
    nginx的ngx_http_addition_module提供了before以及after的能力,可以方便进行请求的处理参考使用环境docker-compose文件version:'3'services:app:image:openr......
  • CentOS下nginx的安装流程
     1基础配置系统:CentOSLinuxrelease7.9.2009(Core)NginX版本:nginx-1.20.1查看操作系统名称:cat/etc/centos-release查看相关系统信息:uname-auname--help可以查看具......
  • nginx 配置go服务反向代理
    nginx配置详细请看Nginx极简教程server{listen80;server_namelocalhost;#charsetkoi8-r;#nginx访问活动日志access_log......
  • nginx自定义时间格式
    在每个server中加入:if($time_iso8601~"^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})"){set$year$1;......
  • Nginx autoindex模块解析
    HttpAutoindex模块官方文档:HttpAutoindex模块ngx_http_autoindex_module此模块用于自动生成目录列表模块处理以斜杠字符(’/’)结尾的请求,并生成目录列表。当ngx_http_......
  • nginx fastcgi模块ngx_http_fastcgi_module详细解析、使用手册、完整翻译
    ​​ngx_http_fastcgi_module​​ 模块允许将请求传递给FastCGI服务器。 示例配置location/{fastcgi_passlocalhost:9000;fastcgi_indexindex.php;fas......
  • Nginx try_files 和 rewrite 的区别
    try_files 是试图按指定文件的顺序依次尝试是否能获取响应内容,如果能获取响应内容,则向客户端返回响应内容。否则继续尝试从下一个指定文件获取响应内容。rewrite是按指......
  • 重识Nginx - 01 Nginx 主要应用场景及版本概述
    文章目录​​Nginx的三个主要应用场景​​​​静态资源服务​​​​反向代理服务​​​​API服务​​​​WhyNginx​​​​Nginx的优点​​​​Nginx本发布情况(mainline......