前言
- 两台机器192.168.1.121,192.168.1.122
- keepalived (vip 192.168.12.19)
- 目标:
- 两台主机上都安装gateway nginx keepalived
- 192.168.12.19:8280 作为nginx到gateway的反向代理路径
- 192.168.12.19:8290 作为nginx对外正向代理
涉及
- dnsmasq
- keepalived
- nginx
基本概念
正向代理:局域网中的客户端不能直接访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。Nginx本身只支持http的正向代理,并通过ngx_http_proxy_connect_module模块支持http、https的正向代理;
反向代理:如果局域网向Internet提供资源服务,让Internet上的其他客户端来访问局域网内不的资源,使它们必须通过一个代理服务器来进行访问内部资源,这种服务就称为反向代理;Nginx通过proxy模块实现反向代理功能。
正向代理配置
作为 web_server Nginx 当然是可以处理 ssl 的,但作为proxy则是不行的。因为nginx不支持CONNECT,收到“CONNECT /:443 HTTP/1.1”后会报一个包含“client sent invalid request while reading client request line,” 的错误。因为 CONNECT 是正向代理的特性。
如何让nginx的正向代理,既支持http又支持https的代理访问呢?
需要安装模块:ngx_http_proxy_connect_module
# 1.nginx 安装源文件路径(/usr/soft/nginx)
> cd nginx
# 2.配置模块路径
> ./configure --add-module=/path/to/ngx_http_proxy_connect_module
# 3.指定对应版本的补丁
> patch -p1 < /模块的路径/ngx_http_proxy_connect_module/patch/proxy_connect.patch
> make && make install
配置正向代理
server {
listen 3128;
# dns resolver used by forward proxying
# 域名解析服务器,必须有,因为证书都是通过域名颁发
resolver 8.8.8.8;
# forward proxy for CONNECT request
proxy_connect;
# 允许端口,all所有
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
# forward proxy for non-CONNECT request
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
}
}
由于在局域网环境无法访问外部的域名解析,所以必须搭建我们内部的域名解析服务器,上面配置的解析器可以指向我们的端口。
当配置了以上信息后还是报504 则有可能是还需要走ipv6的解析,此处可以关闭,如: resolver 本地dns服务ip ipv6=off;