一个供联调服务器使用的nginx代理服务架构

背景: 公司需要和很多外部商户合作连调。目前是每一个项目都会同时修改很多应用系统,有的项目修改的需要被外部商户访问。目前是都会给需要被外部商户访问的系统分配一个公网的IP,并且还需要网络工程师给每一个IP地址配置一堆网络白名单。目前的工作流程是开发/测试申请向我们申请开通某个测试服务器的公网IP地址。然后我们会先向网络安全工程师提出申请,评估同意后再向网工提需求新建公网IP,并配置好商户的IP白名单。整个流程麻烦而且效率低,影响所有人的工作效率。所以想了下不如搞个代理服务器来解决整个问题。只需要使用一台或者几台nginx服务器做代理即可,而且是可以提供HTTPS服务。 基本思路: 代理服务器具有公网IP地址,其实就是上机路由器会把几个使用的端口做NAT到私网的这个代理服务器,外围的网络防火墙是全部开放此服务器的80,8080,443端口(22端口不开),对商户的IP限制由iptables+nginx做。如果某些系统由于特殊原因需要直接向公网开发的话则另外在一个单独的代理服务器上做。由于有的时候让商户绑定host可能比较困难,因此没有使用虚拟主机的方式,而是直接给URL里添加一段。比如对于APP1和APP2,如果它们发布的WS服务是这样: APP1http://APP1.net:8080/services/appser1?wsdlAPP2http://APP2.net:8080/services/appser2?wsdl那么提供给外部商户的URL可以改成是 [http://APP2.net:8080/](http://app2.net:8080/)[services/appser2?wsdl](http://acctransquery.alipay.net:8080/services/acctransSystemQueryFacade?wsdl) APP1http://APP1.net:8080/APP1_net/services/appser1?wsdlAPP2http://APP2.net:8080/APP2_net/services/appser2?wsdlnginx的配置nginx.conf:worker_processes 1; error_log logs/error.log ; pid logs/nginx.pid; events {worker_connections 1024; }http {include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip off; log_format main ‘$remote_addr -> $upstream_addr $host $remote_user [$time_local] “$request”‘‘ $status $body_bytes_sent “$http_referer” ‘‘$http_user_agent “$http_x_forwarded_for” $request_time $upstream_response_time’; server {listen 8080; proxy_set_header Host “$host:$server_port”; proxy_set_header ORIG_CLIENT_IP $remote_addr; proxy_set_header X-Forwarded-By $server_addr:$server_port; proxy_set_header X-Forwarded-For $remote_addr; client_max_body_size 10m; client_body_buffer_size 128k; proxy_buffer_size 128k; proxy_buffers 8 256k; proxy_busy_buffers_size 256k; proxy_http_version 1.1; proxy_set_header Connection “keep-alive”; access_log logs/access.log main; location / {root html; index index.html index.htm; if ( $uri ~* ^/([a-z_0-9]+)/(.*) ) {set $appenv $1_$server_port; set $myurl $2; rewrite ^ /$myurl break; proxy_passhttp://$appenv; } [http://APP2.net:8080/](http://app2.net:8080/)[services/appser2?wsdl](http://acctransquery.alipay.net:8080/services/acctransSystemQueryFacade?wsdl) http://$appenv allow 10.3.3.2;deny all; ...

May 26, 2012 · 2 min · pm