0
点赞
收藏
分享

微信扫一扫

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理

在上一篇文章中,通过最简单的方式让大家如何在 Linux 环境下搭建 Nginx 服务,同时还收到好几位读者的留言期待后续的 Nginx 系列的文章,那么我们不仅仅是为了搭建服务而搭建,同时要把它利用起来,为我们提供更多的服务。在今天的文章中,进一步带领大家认识什么是 Nginx 的​​正向代理​​​与​​反向代理​​以及通过这两个代理做一个简单的实操案例;

一、正向代理

​正向代理​​:你可以这样理解,就是把局域网以外的 Internet 想象成一个外网世界,那么当我们局域网中的客户端设备要访问局域网以外的 Internet 时,需在客户端浏览器中配置代理服务器,然后通过代理服务器来进行访问,将访问到的局域网以外的 Internet 网站内容返回给客户端,而不是通过局域网中的客户端设备直接访问到局域网以外的 Internet 网站中,这种代理服务称之为:​​正向代理​​。

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_tomcat

正向代理的用途:

  • 访问原来无法访问的资源;
  • 可做缓存,加速访问资源;
  • 对客户端访问授权,上网进行认证;
  • 代理可以记录用户访问记录等,且对外隐藏用户信息;

二、反向代理

​反向代理​​​:无需在客户端进行配置即可访问,我们只需要将请求发送给​​反向代理服务器​​​,然后由​​反向代理服务器​​​去选择要访问的​​目标服务器​​​获取数据后,在返回给​​客户端​​​。这里你可以这样理解:​​反向代理服务器​​​和​​目标服务器​​​对外访问的就是一台服务器,知道的是​​反向代理服务器​​地址,其实隐藏了真实服务器的 IP 地址, 这种代理服务称之为:​​反向代理​​。

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_apache_02

反向代理的用途:

  • 保证内网安全,通常将反向代理作为公网访问地址,Web 服务器是内网;
  • 负载均衡,通过反向代理服务器来优化网站的负载;

三、正向代理配置实操

在​​Nginx​​​服务器上,修改​​nginx.conf​​​配置文件,配置到一个 server 块中,如下代码块中的​​第 35 行​​​,在该 server 块中,​​server_name 指令,不要设置虚拟主机的名称和 IP,按默认的即可​​​,而​​resolver​​​是必须要配置的,如没有该指令,Nginx 将无法处理接收到的​​IP地址​​,其次,Nginx 代理服务不支持正向代理 HTTPS 站点。

# vi /root/nginx-1.17.0/conf/nginx.conf
35 server {
36 resolver 192.168.1.10 # 指定 Nginx 服务器 IP 地址
37 listen 80;
44 location / {
45 proxy_pass http://$http_host$request_uri; # 设定代理服务器的协议和地址

重启​​Nginx​​​服务,关闭​​防火墙​​​和​​SELINUX​​。

# ./nginx -s reload
# service iptables stop
# setenforce 0

在​​客户端​​​设备上进行配置代理服务器​​地址​​​和​​端口号​​​,必须与上述​​Nginx​​​服务器配置文件的配置相符,这样就可以通过​​Nginx​​的正向代理进行访问代理服务器能访问到的资源了。

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_服务器_03

进行验证:在​​客户端​​​浏览器中输入​​Nginx​​服务器地址即可;

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_服务器_04

四、反向代理前期准备工作实操

实现效果:通过​​客户端​​​,在浏览器地址栏中输入​​Nginx​​服务器地址,即可访问 Tomcat 页面。

准备工作

1、 在​​Nginx​​​服务器上安装​​Tomcat​​​,使用默认端口:​​8080​​​,解压压缩包,进入到​​Tomcat​​​的​​bin​​​目录下,执行​​./startup.sh​​​命令启动​​Tomcat​​服务;

2、 添加对外开放端口,保存配置并进行查看;

3、 通过Windows客户端设备浏览器进行访问​​Tomcat​​服务;

首先,在安装​​Tomcat​​​前,需要一个 JDK 的环境,那么我们需要在​​Nginx​​服务器上查看 JDK 是否有存在,如有可先用系统自带的 JDK ,如不合适可以在手动安装一个。

# java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

解压​​Tomcat​​​压缩包,在​​bin​​​目录下,执行​​startup.sh​​的文件,启动 Tomcat;

# tar -xvf apache-tomcat-7.0.70.tar.gz
# cd apache-tomcat-7.0.70
# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
# cd bin/
# ./startup.sh
Using CATALINA_BASE: /root/apache-tomcat-7.0.70
Using CATALINA_HOME: /root/apache-tomcat-7.0.70
Using CATALINA_TMPDIR: /root/apache-tomcat-7.0.70/temp
Using JRE_HOME: /usr
Using CLASSPATH: /root/apache-tomcat-7.0.70/bin/bootstrap.jar:/root/apache-tomcat-7.0.70/bin/tomcat-juli.jar
Tomcat started.

进入到日志文件中,查看启动效果;

# cd logs/
# tail -f catalina.out

在​​Linux​​环境下,其实并不是所有端口都是开放的,如需添加开放端口,可执行如下命令:

# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT            # 添加开放端口
# /etc/init.d/iptables save # 保存配置
# service iptables restart # 重启 iptables
# netstat -ntlp # 查看开放的端口号

在客户端设备上进行验证;

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_服务器_05

五、反向代理配置操作案例(一)

实现效果

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_tomcat_06

准备工作

1、 在 Windows 客户端的​​Host​​​文件中配置​​域名​​​和​​IP​​的对应关系;

在Windows中​​C:\Windows\System32\drivers\etc​​​路径下找到​​Hosts​​​文件,通过本地以管理员身份打开记事本,找到​​Hosts​​​文件的路径,进行添加​​域名​​​和​​IP​​;


添加完毕后,保存,切记不要是​​.txt​​​格式的文件,直接替换掉原有的​​Hosts​​文件即可;

192.168.1.10 www.jacktian.com

除​​Windows​​​客户端配置外,​​Nginx​​服务器也需要配置;

# vi /etc/hosts
192.168.1.10 www.jacktian.com

添加环境变量

# vim /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH

2、 在​​Nginx​​​进行请求转发的反向代理配置,并在末尾行添加​​include vhost/*.conf;​

# vim /usr/local/nginx/conf/nginx.conf
35 server {
36 listen 8000;
37 server_name localhost;
38
39 #charset koi8-r;
40
41 #access_log logs/host.access.log main;
42
43 location / {
44 root html;
45 index index.html index.htm;
46 }
79 }
116 include vhost/*.conf;

在​​/usr/local/nginx/conf/​​​目录下,创建​​vhost​​​目录,并在该目录下创建​​tomcat.conf​​,并添加如下配置;

# mkdir vhost
# cd vhost/
# ls
tomcat.conf
# vim tomcat.conf
1 server {
2 listen 80;
3 server_name 192.168.1.10;
4
5 location / {
6 proxy_pass http://192.168.1.10:8080;
7 }
8 }

在​​Windows​​​客户端进行访问域名:​​www.jacktian.com​​验证;

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_nginx_07

六、反向代理配置操作案例(二)

实现效果

使用​​Nginx​​反向代理,根据所访问的路径跳转至不同端口的服务中。

Nginx 监听端口为:9001

访问​​http://192.168.1.10:9001/abc​​​直接跳转至​​192.168.1.10:8080​​​ 访问​​http://192.168.1.10:9001/def​​直接跳转至​​192.168.1.10:8081​

准备工作

1、 准备​​2台Tomcat​​​服务器,分别为​​8080​​​和​​8081​​端口;

在​​/root​​​目录下创建两个​​Tomcat​​目录;

# mkdir tomcat8080
# mkdir tomcat8081

将​​apache-tomcat-7.0.70.tar.gz​​​压缩包分别​​cp​​到两个目录中;

# cp -r /root/apache-tomcat-7.0.70.tar.gz /root/tomcat8080
# cp -r /root/apache-tomcat-7.0.70.tar.gz /root/tomcat8081

查看​​Tomcat​​进程

# ps -ef | grep tomcat
root 3974 3280 16 12:15 pts/3 00:00:00 grep tomcat
root 64376 1 0 Jun07 pts/2 00:05:37 /usr/bin/java -Djava.util.logging.config.file=/root/apache-tomcat-7.0.70/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/root/apache-tomcat-7.0.70/endorsed -classpath /root/apache-tomcat-7.0.70/bin/bootstrap.jar:/root/apache-tomcat-7.0.70/bin/tomcat-juli.jar -Dcatalina.base=/root/apache-tomcat-7.0.70 -Dcatalina.home=/root/apache-tomcat-7.0.70 -Djava.io.tmpdir=/root/apache-tomcat-7.0.70/temp org.apache.catalina.startup.Bootstrap start

将原有的​​Tomcat​​​服务​​kill​​掉,并进行查看是否已经停止;

# kill -9 64376
# ps -ef | grep tomcat
root 3994 3280 7 12:23 pts/3 00:00:00 grep tomcat

修改​​tomcat8080​​的配置文件,如下;

# vim /root/tomcat8080/apache-tomcat-7.0.70/conf/server.xml
22 <Server port="8005" shutdown="SHUTDOWN">
71 <Connector port="8080" protocol="HTTP/1.1"
93 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

修改​​tomcat8081​​的配置文件,如下;

# vim /root/tomcat8081/apache-tomcat-7.0.70/conf/server.xml
22 <Server port="8015" shutdown="SHUTDOWN">
71 <Connector port="8081" protocol="HTTP/1.1"
93 <Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />

启动​​tomcat8080​​​和​​tomcat8081​​的服务;

# ./tomcat8080/apache-tomcat-7.0.70/bin/startup.sh 
# ./tomcat8081/apache-tomcat-7.0.70/bin/startup.sh

验证

在客户端浏览器地址栏中输入:​​192.168.1.10:8080​​​和​​192.168.1.10:8081​​查看页面结果;

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_nginx_08

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_tomcat_09

​Tomcat8080​​创建文件夹和测试页面

# cd /root/tomcat8080/apache-tomcat-7.0.70/webapps/
# mkdir abc
# cd abc/
# vim 20200320.html
<h1>welcome to tomcat 8080!</h1>

​Tomcat8081​​创建文件夹和测试页面

# cd /root/tomcat8081/apache-tomcat-7.0.70/webapps/
# mkdir def
# cd def/
# vim 20200320.html
<h1>welcome to tomcat 8081!</h1>

验证

在客户端浏览器地址中输入:​​http://192.168.1.10:8080/abc/20200320.html​​进行查看;



2、 配置反向代理至​​Nginx​​​服务器​​nginx.conf​​配置文件;

# vim /usr/local/nginx/conf/nginx.conf
84 server {
85 listen 9001;
86 server_name 192.168.1.10;
87
88 location ~ /abc/ {
89 proxy_pass http://192.168.1.10:8080;
90 }
91
92 location ~ /def/ {
93 proxy_pass http://192.168.1.10:8081;
94 }
95 }

location 配置指令说明:

用法:用于匹配 URI;

语法格式:

location [ = | ~ | ~* | ^~ ] uri {

}
  • =:用于不含正则表达式的 URI 前,要求请求字符串与 URI 匹配,如匹配成功,将停止向下搜索并处理该请求;
  • ~:用于表示 URI 包含正则表达式,并区分大小写;
  • ~*:用于表示 URI 包含正则表达式,​​不​​区分大小写;
  • ^~:用于不含正则表达式的 URI 前,需 Nginx 服务器找到标识 URI 和请求字符串匹配度高的 location 后,立即使用此 location 处理请求,不再使用 location 块中的正则 URI 的请求字符串做匹配;

如果 URI 包含正则表达式,则必须要有​​~​​​或​​~*​​标识。

编辑防火墙配置文件,添加对外开放端口​​8080​​​、​​8081​​​、​​9001​​;

# vim /etc/sysconfig/iptables
6 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
7 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
8 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
9 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT

重启防火墙,并进行查看;

# /etc/init.d/iptables restart
# service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8080
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8081
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:9001

最后,重启​​Nginx​​服务,或重新加载配置文件;

# cd /usr/local/nginx/
# cd sbin/
# ls
nginx
# ./nginx -s stop
# ./nginx

验证

在客户端浏览器地址中输入:​​http://192.168.1.10:9001/abc/20200320.html​​进行查看;

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_apache_10

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理_apache_11

七、常见问题

当重启​​Nginx​​服务时,出现如下报错现象:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

解决办法:

当出现这种错误时,意味着80端口被占用了,执行如下命令,将进程杀死后,启动​​Nginx​​。

# fuser -k 80/tcp
# ./nginx

总结

通过本篇文章,介绍了什么是​​正向代理​​​和​​反向代理​​​、​​正向代理​​​和​​反向代理​​​的​​用途​​​、正向代理配置实操、反向代理前期准备工作实操、反向代理配置操作案例(一):通过在​​Windows​​​客户端设备修改​​Hosts​​​文件,添加域名及IP,​​Nginx​​​服务器上配置转发反向代理,客户端通过访问​​Nginx​​​服务器的域名自动跳转至​​Tomcat​​​的主页面中,反向代理配置操作案例(二):使用​​Nginx​​反向代理,根据所访问的路径跳转至不同端口的服务中等;


举报

相关推荐

0 条评论