正向代理,简单的说就像是一个跳板,它隐藏了真实的请求客户端(IP),服务端不知道真实的客户端是谁,客户端请求的服务都由代理服务器来代替请求。
举个例子来说:众所周知,国内的用户无法访问谷歌,但是因为某些原因,我们必须要访问谷歌,这个时候我们会有一个“梯子”,既然我们无法直接访问谷歌,我们就麻烦“梯子”帮助我们访问谷歌。
事实上我们还是没法访问谷歌,只是这个“梯子”能够访问,它只是将访问结果返回给我们而已。这里的“梯子”就是一个正向代理,它是帮助客户端也就是我们用户来代理的。
正向代理对象是客户端,客户端转发给代理客户端,由代理客户端去真正访问服务器,正向代理隐藏了真实客户端的身份(IP)。
客户端<==转发==>代理客户端的服务器<----------->服务器
当正向代理出现多个请求客户端时,如图所示:
简单来说,正向代理指的是一对一或者多对一,服务端不知道发送请求的客户端是哪些人。
反向代理恰好跟正向代理相反。反向代理指的是一对多或者多对多,客户端不知道响应请求的服务端是哪些服务。
反向代理对象是服务端,客户端真正访问的是代理服务器,反向代理隐藏了真实的服务端的身份(IP)。
客户端<----------->代理服务器的服务器<==转发==>服务器
反向代理一般是负载均衡(Load Balance)的一个原理。
代理服务器会将大量的请求分摊给多台提供相同服务的服务器或集群。
负载均衡的策略跟 nginx使用的负载均衡算法有关,默认使用轮询算法,nginx还提供各种参数给负载均衡调优。
两者根本的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。
总而言之:
实现效果:打开浏览器,在浏览器的地址栏中输入www.proxy123.com,回车之后就会访问 Linux系统中运行的 Tomcat服务器的主页面。
Tomcat依赖JDK。Linux 安装JDK详细步骤:https://blog.csdn.net/qq_42402854/article/details/108164936
然后在 Linux中安装 Tomcat,Tomcat使用端口号8080。一次执行下面命令:
# 下载Tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.105/bin/apache-tomcat-7.0.105.tar.gz
# 解压即安装
tar -zxvf apache-tomcat-7.0.105.tar.gz
# 移动到local目录下
mv apache-tomcat-7.0.105 /usr/local/tomcat
# 启动Tomcat
/usr/local/tomcat/bin/startup.sh
浏览器直接访问 Tomcat服务器,192.168.xxx.xxx:8080
打开 C:\Windows\System32\drivers\etc\,在该目录下有一个hosts文件,将该文件进行拷贝备份,避免修改后不知道怎么改回去,打开hosts文件,添加以下配置代码:
#虚拟机域名 映射的网址
192.168.xxx.xxx www.proxy123.com
第一步:编辑nginx.conf
编辑内容如下:vi /usr/local/nginx/conf/nginx.conf
server {
listen 80; # 指定虚拟主机的服务端口
server_name 192.168.xxx.xxx; # 指定虚拟主机的IP,或者外网域名
# URL匹配
location / {
root html #定位localtion匹配的url资源路径
proxy_pass http://127.0.0.1:8080; # 代理转发
index index.html index.htm; # 定义页面显示html
}
}
配置文件不熟悉的,可查看文章:https://blog.csdn.net/qq_42402854/article/details/132843413
第二步:Nginx启动
编辑完成之后保存退出,启动Nginx命令:/usr/local/nginx/sbin/nginx
如果Nginx已经启动,那么就使用重新加载配置文件的命令:/usr/local/nginx/sbin/nginx -s reload
[root@centos7 jdk]# /usr/local/nginx/sbin/nginx
nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
[root@centos7 sbin]# mkdir /var/run/nginx/
[root@centos7 sbin]# /usr/local/nginx/sbin/nginx
[root@centos7 sbin]#
Nginx启动报错如下:nginx启动报错:nginx: [error] open() “/var/run/nginx/nginx.pid“ failed (2: No such file or directory) 的解决:https://blog.csdn.net/qq_39244882/article/details/120058404
第三步:浏览器访问OK
启动 Nginx和 Tomcat之后,在浏览器通过 www.proxy123.com就可以通过 nginx代理访问 Tomcat服务的界面啦。
第四步:关闭服务
关闭Tomcat命令:/usr/local/tomcat/bin/shutdown.sh
关闭Nginx命令:/usr/local/nginx/sbin/nginx -s stop
该指令用于配置网络监听。主要有如下三种配置语法结构:
listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred]
[accept_filter=filter] [bind] [ssl];
listen port[default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter]
[deferred] [bind] [ipv6only=on|off] [ssl];
listen unix:path [default_server] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter]
[deferred] [bind] [ssl];
上面的配置看似比较复杂,其实使用起来是比较简单的:
listen *:80 | *:8080 #监听所有80端口和8080端口
listen IP_address:port #监听指定的地址和端口号
listen IP_address #监听指定ip地址所有端口
listen port #监听该端口的所有IP连接
下面分别解释每个选项的具体含义:
1、address:IP地址,如果是 IPV6地址,需要使用中括号[] 括起来,比如[fe80::1]等。
2、port:端口号,如果只定义了IP地址,没有定义端口号,那么就使用80端口。
3、path:socket文件路径,如 var/run/nginx.sock等。
4、default_server:标识符,将此虚拟主机设置为 address:port 的默认主机。(在 nginx-0.8.21 之前使用的是 default 指令)。
5、 setfib=number:Nginx-0.8.44 中使用这个变量监听 socket 关联路由表,目前只对 FreeBSD 起作用,不常用。
6、backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在 FreeBSD 中默认为 -1,其他平台默认为511。
7、rcvbuf=size:设置监听socket接收缓存区大小。
8、sndbuf=size:设置监听socket发送缓存区大小。
9、deferred:标识符,将accept()设置为Deferred模式。
10、accept_filter=filter:设置监听端口对所有请求进行过滤,被过滤的内容不能被接收和处理,本指令只在 FreeBSD 和 NetBSD 5.0+ 平台下有效。filter 可以设置为 dataready 或 httpready 。
11、bind:标识符,使用独立的bind() 处理此address:port,一般情况下,对于端口相同而IP地址不同的多个连接,Nginx 服务器将只使用一个监听指令,并使用 bind() 处理端口相同的所有连接。
12、ssl:标识符,设置会话连接使用 SSL模式进行,此标识符和Nginx服务器提供的 HTTPS 服务有关。
该指令用于虚拟主机的配置。通常分为以下两种:
语法格式如下:server_name name …;
1)对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开。而每个名字由两段或者三段组成,每段之间用“.”隔开。
server_name 123.com www.123.com
2)也可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。
server_name *.123.com www.123.*
3)还可以使用正则表达式,用“~”作为正则表达式字符串的开始标记。
server_name ~^www\d+\.123\.com$;
该表达式“~”表示匹配正则表达式,以www开头(“^”表示开头),紧跟着一个0~9之间的数字,在紧跟“.123.co”,最后跟着“m”($表示结尾)。
以上匹配的顺序优先级如下:
1、准确匹配 server_name
2、通配符在开始时匹配 server_name 成功
3、通配符在结尾时匹配 server_name 成功
4、正则表达式匹配 server_name 成功
语法格式如下:server_name 192.168.1.1
语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。
该指令用于匹配 URL。语法格式如下:
1 location [ = | ~ | ~* | ^~] uri {
2
3 }
URL匹配通配符:
多个location配置的情况下匹配顺序为: 首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
注意:
如果uri包含正则表达式,则必须要有 ~ 或者 ~ 标识。
该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。
语法结构如下:proxy_pass URL;
URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。例如:
proxy_pass http://www.123.com/uri;
该指令用于设置网站的默认首页。
语法结构如下:index filename …;
后面的文件名称可以有多个,中间用空格隔开。例如:
index index.html index.jsp;
通常该指令有两个作用:
– 求知若饥,虚心若愚。