如何运用Nginx搭建代理服务器?
如何实现Nginx的反向代理?
这句话什么意思?
意思是说当客户机来访问服务器的时候,服务器本身并不出面接待,而是将客户的请求转高给手下的子服务器(小弟)负责接待。
比如:你访问wwwbaiducom,其实并不时百度总服务器接待的你,而是百度的代理服务器接待的你,不过他们的服务是一样的,提供同样的页面;
如是搭建Nginx服务才能实现这样的效果呢?
搭建一个最简单,最基础nginx代理服务器,需要一台代理服务,两台子服务器,XX台客户机来作验证;
操作流程如下:
第一步、服务器和客户机配好IP地址,其中Nginx代理服务器需要配置两张网卡,两个IP地址,一个和客户机通信,一个和子服务器通信;
代理服务器与客户机和子服务器都分别配置同网段IP地址;
例如:
代理服务器:19216845 19216825
子服务器 :1921682100 1921682200
客户机 :192168410
这样配置的好处是: 可以负载均衡,保障用户的访问体验,保障上网速度,同时也保障了,即便有一台服务器坏掉了,另一台服务可以接待用户访问;
第二步、代理服务器上安装Nginx服务软件,两台子服务器上安装HTTPD服务并写入相应的网页,然后启动服务;
yum -y install httpd ##安装httpd服务;
echo "罗贵" > /var/www/html/indexhtml ##写一个简单的网页
/configure --user=nginx --group=nginx --with-http_ssl_module
make && make install ##编译安装Nginx
第三步、修改Nginx的配置文件;
vim /usr /local /nginx /conf /nginxconf
http { ##在文件中找到http开头的行,并在http下面随意找两行添加下面两行的内容;
upstream luogui { ##luogui是集群名字,可以自由定义,upstream 上游的意思;翻译过来就是在上游建立一个名字为luogui的集群,集群中包含下述IP地址;
server 1921682100:80;
server 1921682200:80;
}
server {
listen 80;
server_name wwwluoguicom; ##域名,可以自由定义;
location ^/php$ { ##匹配网页地址的意思,匹配以 / 开头php结尾的网页文件;
proxy_pass http://luogui; ##通过proxy代理服务器将用户的请求转发给luogui集群服务器;(注:优先级最高,系统会优先处理这条命令)
}
}
第四步、测试效果;
firefox http://19216845 或者 本地测试 curl http://19216845
结果应该是暂停任何一台子服务器,客户机访问网页都没有问题;
以上
(EDN)
祝:开心!
罗贵
2019-04-05于深圳
nginx代理常用配置项
通过以下的案例来理解proxy_set_header设置
其中backend 1921684122 提前安装nginx 第三方模块支持 ""echo"
=============1921684119 proxy1 nginxconf
=============1921684120 proxy2 nginxconf
=============1921684121 proxy3 nginxconf
=============1921684122 backend nginxconf
=============
有注意到 ||1921684254, 1921684120 是不包含1921684119
proxy_set_header Host $host;
本案例因为不涉及到域名所以用不到$Host值,作用也比较好理解,就是nginx做代理时,把原http请求的Header中的Host字段也放到转发的请求里,如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你的请求的是哪个域名的资源的,
proxy_set_header X-Real-IP $remote_addr;
只能获取到与服务器本身直连的上层请求ip 写入到http请求头中
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
定义客户端IP,如果多层代理都有配置这个值,离backent最近的会覆盖之前的值 所以一般只在连接客户端的代理上写添加这条值,这样backend就能获取到客户端的真实IP,单独使用无效
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
把客户端IP写入到http请求头中,前提是之前有X-Real-IP $remote_addr定义过客户端IP,所以单独使用无效
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
相当于 $http_x_forwarded_for 和 $remote_addr和结合 获取上层IP和把客户端IP写入请求头中,
代理类型
代理IP根据匿名性来划分一共能分为三种:透明代理、普通匿名代理、高匿代理。从安全程度来说,这三种代理类型的排序是高匿>普通匿名>透明。
代理原理
代理类型主要取决于代理服务器端的配置。不同配置会形成不同的代理类型。在配置中,这三个变量REMOTE_ADDR,HTTP_VIA,HTTP_X_FORWARDED_FOR是决定性因素:
1 REMOTE_ADDR
REMOTE_ADDR 表示客户端的 IP,但是它的值不是由客户端提供的,而是服务器根据客户端的IP指定的。
如果使用浏览器直接访问某个网站,那么网站的web服务器(Nginx、Apache等)就会把REMOTE_ADDR设为客户端的 IP 地址。
如果用户给浏览器设置代理,用户访问目标网站的请求会先经过代理服务器,然后由代理服务器将请求转化到目标网站。那么网站的web服务器就会把 REMOTE_ADDR 设为代理服务器的 IP。
2X-Forwarded-For(XFF)
X-Forwarded-For是一个HTTP扩展标头,用来表示HTTP请求端真实IP。当客户端使用了代理时,web服务器就无法获知客户端的真实IP地址。为了避免这个情况,代理服务器通常会增加一个X-Forwarded-For的标头信息,把客户端的IP添加到标头信息里面。
3HTTP_VIA
via是HTTP协议里面的一个header,记录了一次HTTP请求所经过的代理和网关,经过1个代理服务器,就添加一个代理服务器的信息,经过2个就添加2个。
代理类型区别
1透明代理(Transparent Proxy)
透明代理虽然可以直接“隐藏”客户端的 IP 地址,但是还是可以从来源查到客户端的 IP地址。
2普通匿名代理(Anonymous Proxy)
普通匿名代理能提供隐藏客户端IP地址的功能,但当用户使用普通匿名代理时,服务器就能知道客户端使用代理的行为。
3高匿代理(Elite Proxy或High Anonymity Proxy)
高匿代理既能让服务器不清楚客户端是否在使用代理,也能保证服务器获取不到客户端的真实IP地址。
0条评论