通过nginx反向代理接收应用宝回调
年前的时候,正好公司把用来接收应用宝回调的服务从Windows服务器上迁移带Linux服务器上,没想到最后折腾了两个工作日,腾讯的文档真的无力吐槽,不知道以后会不会有人碰到我相同的问题,我先记录一下。
因为Java项目,当时刚开始准备配置Tomcat的HTTPS双向认证,配置完全是按照腾讯的文档来,但是就是无法接收到回调,然后腾讯那边回复也很慢,回复就是让我们看文档,但是文档也比较老,就像我看别人写的文档,吐槽腾讯说,难的不是接应用宝,是没有一个详细的文档。
因为我是通过Nginx做的反向代理,先给大家看一下我的Nginx的配置文件
server { listen 443; server_name localhost; ssl on; ssl_certificate /usr/local/nginx/crt/server.crt; ssl_certificate_key /usr/local/nginx/crt/server.key; ssl_verify_client off; ssl_protocols TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; ssl_client_certificate /usr/local/nginx/crt/ca.crt; ssl_verify_depth 1; client_header_buffer_size 16k; large_client_header_buffers 4 16k; proxy_buffer_size 8k; location / { proxy_pass http://127.0.0.1:8899; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_ignore_client_abort on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
基本这样的配置就可以了,
当时不成功的时候抓包(tcpdump port 443 -X)结果如下:
成功的抓包如下:
可以看到,腾讯会先去认证他发给你的CA证书,通过之后才会去认证你的crt和key,都成功之后就会进行通信。也就是可以收到回调。
PS:后端的java程序,依然是通过Tomcat跑的,配置没有更改,只是将8080改成了8899.
至于代码层面的话,因为我只是一个运维,就不是很了解了,欢迎有遇到问题的朋友讨论留言指正。