Nginx 正向代理和反向代理
前言
最近在捣腾代理,要做个内网yum源代理,之前没接触过代理这些个东西,折腾完记录一下吧。
一、下载源码
目前Nginx一般都是使用源码编译,没有现成的rpm包。下载网址:http://nginx.org/download/。里面有各个版本的Nginx,随便找个版本下载即可,尽量使用新版本,至少bug少一点,功能支持也多一点。
二、编译
Nginx依赖一些组件,需要提前安装好,比如pcre和zlib,如果要使用https相关模块,还需要安装openssl组件。如果是CentOS系统的话,直接用yum命令安装就好了,方便快捷。
yum install openssl* pcre* zlib*
依赖组件安装好后,就可以开始编译Nginx了。解压Nginx压缩包,进入到目录,执行千篇一律的编译命令。
./configure
make && make install
如果需要使用ssl模块,在configure时添加ssl模块,
./configure --with-http_ssl_module
make && make install
然后就OK了。
Nginx的默认安装根目录是/usr/local/nginx,因此它的命令,配置文件都在这个目录。为了方便,可以把Nginx的命令路径添加到环境变量中,这样就不要用绝对路径调用命令了。
export PATH=$PATH:/usr/local/nginx/sbin
三、代理
代理一般分为正向代理和反向代理。
正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
反向代理实际运行方式是代理服务器接受网络上的连接请求。它将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
可以这么认为,对于正向代理,代理服务器和客户端处于同一个局域网内;而反向代理,代理服务器和源站则处于同一个局域网内。
四、配置正向代理
Nginx的配置文件为/usr/local/nginx/conf/nginx.conf。一般我们不直接在该文件里配置我们的代理,转而使用include的方式,把我们的配置独立成另一个配置文件。
...
http {...keepalive_timeout 65;include yumproxy.conf;//添加自己的配置文件
}
这样我们就可以在yumproxy.conf文件里配置我们的代理了。
正向代理的配置很简单,其实两个语句就行了。
server {resolver 192.168.0.1;location / {proxy_pass http://$http_host$request_uri;}
}
其中,
resolver表示DNS服务器
location表示匹配用户访问的资源,并作进一步转交和处理,可用正则表达式匹配
proxy_pass表示需要代理的地址
$http_host 表示用户访问资源的主机部分
$request_uri 表示用户访问资源的URI部分。
如,http://nginx.org/download/nginx-1.6.3.tar.gz,则$http_host=nginx.org,$request_uri=/download/nginx-1.6.3.tar.gz。
可以不设置监听端口号,nginx默认监听80端口,除非你要修改监听端口,可以用listen字段指定。
可以看出,对于正向代理,只是对用户的访问进行一个转发,不做其他处理。
下面我们实际验证一下这个正向代理是否有效,找了两台虚拟机,一台用nginx搭建正向代理,另一台使用该代理访问,以百度为例。
先确认nginx服务启动,用netstat命令查看监听端口,
接下来使用curl命令设置代理访问百度首页。
访问成功。
五、反向代理配置
对于反向代理也很简单,如下,
server {server_name www.baidu.com;location / {proxy_pass http://www.baidu.com/;}
}
其中,server_name字段用于匹配用户访问资源的主机名称。proxy_pass字段同样表示转交的访问。
与正向代理不同,反向代理是指定了特定的网址。其实也就是限定了访问的对象。指定用户访问www.baidu.com时,只能去百度。如果你把proxy_pass的网址替换为新浪的,那就会出现用户明明要访问百度,却跑到新浪去了。这就是代理劫持了。另外,server_name可以匹配多个主机名,用空格分开即可,也可以用正则表达式匹配主机名。
但是特别要注意一点,对于没有匹配到的访问,nginx会默认走第一条server配置,所以一般我们将第一条server设置为阻止页面。
我们可以实际验证一下。先按上述配置反向代理,访问百度,正常返回,注意百度的ETAG,
然后我们再访问新浪,
可以看出,此时虽然我们想访问的是新浪,但是实际返回的还是百度。下面我们在上面反向代理的基础上添加一个空的server配置,只返回404错误。
此时,结果和我们预期的一致了,未匹配的全都走第一条server,返回404,也就控制了那些网站能访问,哪些不能访问,但是这明显不是nginx该考虑的。因为nginx的优势不在于控制访问,相比之下,squid的ACL才是更明智的选择,这就是后话了。
由此,我们可以看出,对于正向代理,Nginx没法控制用户访问的资源,对于所有访问只管转发。这对于内网需要管理网络访问来说肯定是不行的。而对比反向代理,是可以控制用户访问的网络资源的。只代理允许访问的网址,不允许访问的网址到了代理服务器也出不去。
Nginx 正向代理和反向代理相关推荐
- [转]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
文章目录 前言 一.nginx简介 1. 什么是 nginx 和可以做什么事情 2.Nginx 作为 web 服务器 3. 正向代理 4. 反向代理 5. 负载均衡 6.动静分离 二.Nginx 的安 ...
- 浅析Nginx 正向代理与反向代理
1.正向代理和反向代理的概念 无论是正向代理,还是反向代理,说到底,就是代理模式的衍生版本罢了.我们都学习过代理设计模式,都知道代理模式中有代理角色和被代理角色,为什么这么说,因为这两个角色对于我们理 ...
- nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
文章目录 前言 一.nginx简介 1. 什么是 nginx 和可以做什么事情 2.Nginx 作为 web 服务器 3. 正向代理 4. 反向代理 5. 负载均衡 6.动静分离 二.Nginx 的安 ...
- Nginx正向代理和反向代理的区别
正向代理与反向代理的区别: 1.正向代理相对于目标服务器而言隐藏了客户端的真实IP地址,因为对于目标服务器而言所有请求都是从正向代理服务器发出的,正向代理主要是为了突破网络访问限制,比如ke xue上 ...
- Nginx:正向代理与反向代理
什么是Nginx? Nginx 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务. Nginx是一款轻量级的WEB服务器/反向代理服务器及电子邮件(IMAP ...
- Nginx -- 正向代理和反向代理粗解
正向代理: 有一些网站我们无法访问,如国外的网站,或者说某些公司内部的网站,我们输入完整的url无法访问,这时候我们就可以使用正向代理,让可以访问这些url的代理服务器作为正向代理服务器,接收客户 ...
- 正向代理和反向代理的区别Nginx配置虚拟主机流程(后续更新)
目录 目标 安装Nginx 配置虚拟主机 准备 方法一 方法二(推荐) 验证虚拟主机 正向代理和反向代理的区别 区别&案例 正向代理和反向代理流程 目标 熟练在Linux安装单机Nginx: ...
- nginx正向代理,反向代理概念
正向代理 正向代理,也就是传说中的代理,他的工作原理就像一个跳板, 简单的说, 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器 这个代理服务器呢,他能访问那个我不能访问的网站 于是我先连上 ...
- Nginx之负载均衡,正向代理和反向代理
正向代理( Forward Proxy ): 定义: 是指是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容, 客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服 ...
最新文章
- 全面认识Eclipse中JVM内存设置
- Docker中安装DB2的详细教程和DBVisualize的安装教程
- 准备写一个Ibatisnet开发指南
- jdbc对mysql进行增删改查操作(Statement)
- [NewLife.XCode]高级查询(化繁为简、分页提升性能)
- CF1592E Bored Bakry
- python123第6周答案_Python123测验6: 组合数据类型 (第6周)
- P4055 [JSOI2009]游戏
- Layui判断Tab栏是否打开,查找Tab栏中的元素
- Android四大组件之 --- Service入门
- 随机森林模型解释_随机森林解释
- win10怎么修复网络连接服务器失败,微软发布修复补丁修复Win10无网络连接问题...
- eclipse优化记录
- 多边形的定义为什么要强调封闭图形_11.3.1 多边形讲解.ppt
- 架构测试:HAproxy实现负载均衡,前端为nginx+php,数据库实现读写分离和高可用...
- 14福师计算机导论在线作业一,(随机)福师18秋《计算机导论》在线作业一资料...
- 科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生
- springboot电商系统-生鲜电商-蔬菜商城
- BT656/BT601/BT1120协议以及DM365/DM355/DM6467上使用的YUV颜色空间说明
- 逆战选择服务器后显示器,逆战游戏设置知识_隐藏在数据设置背后的大学问_叶子猪逆战...
热门文章
- imindmap11(思维导图软件)绿色版
- Linux修改文件名称
- stm32毕设 stm32的智能婴儿车系统(源码+硬件+论文)
- 各类Excel表格批量合并问题的实现思路与案例
- Premiere颜色插件 Synthetic-Aperture.Color.Finesse.Pl.v3.1.0.CE (x64) PR/AE版本
- 微环谐振器MRR相关笔记
- 教你关闭iTunes的自动更新功能
- MATLAB基础语法总结
- 分布式--雪花算法改进版--美团的Leaf
- Zox's code life 人生就是不停的战斗! xxx is not in the sudoers file.This incident will be reported.的解决方法