在公司的vpc网络中需要一个统一的对外提供服务的服务器叫proxy 其作用是统一入口,外界无法直接和业务服务器直接通信,而是通过proxy服务器进行服务转发。

目标是达到如下目的:
客户端=>(服务器反向代理=>)Web服务器

规划图

线上proxy配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 443 ssl;
server_name abc.ethercap.com;
ssl on;
ssl_certificate /etc/pki/CA/certs/ethercap.com.chained.crt;
ssl_certificate_key /etc/pki/CA/certs/ethercap.com.key;
keepalive_timeout 60;

location / {
proxy_pass http://base_server;

proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;

proxy_redirect off;
}
}

关键点是 proxy_pass

proxy_pass 可以做的几件事是这样的:

本地不处理,交给后面处理
这样后面就可以用php, fastcgi, tomcat等处理
可以切换协议,比如从http切换至https
实际上在linux上还可以将底层切换至unix domain socket

// 这些设置主要是给业务服务器做认证的
proxy_http_version 1.1;

//这个proxy_set_header Host $host; $host就是nginx代理服务器,也就是客户端请求的host
proxy_set_header Host $host;

//任何逐段传输头都需要在 Connection 头中列出,这样才能让第一个代理知道必须处理它们且不转发这些头
proxy_set_header Connection “”;

//X-Forwarded-For 表示 Nginx 接收到的头,原样的转发过来(假如不转发,Web 服务器就不能获取这个头)
proxy_set_header X-Forwarded-For $remote_addr;

//转发的协议
proxy_set_header X-Forwarded-Proto https;