nginx图解正向代理反向代理案例如何操作,看我这一篇2020年原创就够了

一、前言

花了一个周末来归纳和总结,路过的朋友们,请点个赞,你的点赞是我前进的动力,谢谢啦!

首先必须安装nginx,可以参考我发表的文章 linux安装nginx1.18最详细的步骤

无论是你后台开发还是前端开发或者是运维等,都多多少少需要知道一下nginx,这一个如此出名的服务器。

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

二、nginx正向代理

2.1 正向代理和反向代理的区分

下面我引用两张网上最热门,我也不知道为什么热门,大家先欣赏一下。
在这里插入图片描述
在这里插入图片描述
不知道大家能不能看得懂,我还是以下解释

  • 正向代理中,代理服务器proxy与客户端client同属于一个LAN局域网,对server透明
正向代理用途:

 1 为在防火墙内的局域网客户端提供访问Internet的途径

 2 可以做缓存,加速访问资源

 3 对客户端访问授权,上网进行认证

 4 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
  • 反向代理中,代理服务器proxy与server同属一个LAN局域网,对client透明
反向代理用途:

1 保证内网的安全
 2 负载均衡

2.2 什么是正向代理

被和谐掉了

三、nginx反向代理

3.1 什么是反向代理

反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

总结起来还是一句话:正向代理代理客户端,反向代理代理服务器。

3.2 反向代理的简单案例(案例1)

实现,我对 nginx.conf这个文件进行简单介绍

Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server { //这个是服务器级别
      listen 80; //监听的端口,nginx占用的端口
      server_name localhost; //域名访问器,如果hosts存在该域名,会拼接到listen前面
        location / { //这个是请求级, / 是指匹配根目录所有
           proxy_pass   http://127.0.0.1:80; //重定向的地址
           //注意:反向代理之后,获取客户端ip地址为nginx服务器地址,这里需要nginx进行forward,设置真实的ip地址:
          root html; 
          index index.html index.htm;
        }
      }
}

看完上面的解释之后,下面进行操作,找到 nginx.conf文件

vi /usr/local/nginx/conf/nginx.conf

    server {
        listen       80;
        server_name  www.cancan.com;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {

            proxy_pass   http://127.0.0.1:8082;
            #root   html;
            index  index.html index.htm;
        }

在这里插入图片描述
如上图,我作以下的介绍

  1. 在linux服务端(ip为 192.168.102.144),提供了http://127.0.0.1:8082,但是不想给客户端(本地电脑A)直接进行访问。
  2. 采用nginx反向代理,采用80端口进行代理8082端口
  3. 本地电脑A,访问 http://192.168.102.144:80 即可访问 http://192.168.102.144:8082 的端口。
  4. 简单来说,就是80端口代理了8082端口的功能

3.3 反向代理实现负载均衡(案例2)

说明

#设定负载均衡的服务器列表
	#upstream myproject {
		#weigth参数表示权值,权值越高被分配到的几率越大
		#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
		#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
	#}

3.3.1 配置服务器

upstream org.tonny.balance {
    server 127.0.0.1:8081 weight=1;
    server 127.0.0.1:8082 weight=1;
}

3.3.2 设置规则

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            proxy_pass   http://cancan.balance;
            #root   html;
            #index  index.html index.htm;
        }

3.3.3 图解

在这里插入图片描述
如上图,文字说明:

  1. 后台有两个服务,分别为服务A和服务B,对应端口为 8082 以及 8083
  2. nginx配置 upstream 有两个server,分别为服务A和服务B的地址。
  3. 从80端口访问,会重定向到 8082和8083
  4. 默认的规则是轮询的规制,所以客户端电脑访问的时候,会有轮询的效果

3.3.4 完整的配置

vi /usr/local/nginx/conf/nginx.conf

    #gzip  on;

    upstream cancan.balance {
        server 127.0.0.1:8082 weight=1;
        server 127.0.0.1:8083 weight=1;
        }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            proxy_pass   http://cancan.balance;
            #root   html;
            #index  index.html index.htm;
        }

3.4 反向代理之代理地址(案例三)

其实该案例为简单案例的变形,但是也是对于初学者来说,还是需要学习的
在这里插入图片描述
如上图,文字说明:

  1. 本地电脑A是无法访问本地电脑C的,因为本地电脑A网段为 172.23.x.x,而本地电脑C网段为192.168.x.x
  2. 本地电脑A想访问本地电脑C的资源,需要本地电脑B来进行中转。
  3. 本地电脑B采用反向代理,把用 localhost:81 的端口去代理 192.168.102.144
  4. 本地电脑C访问本地电脑B的81端口,等于访问本地电脑C的资源。

完整的配置

vi /usr/local/nginx/conf/nginx.conf

 upstream cancan{
    server 192.168.102.144;
 }

 server {
  listen 81;
  location / {
   proxy_pass http://cancan;
  }
 }

四、nginx动静分离

4.1 访问静态html页面(案例4)

直接写nginx.conf配置

	server {
		listen 127.0.0.1:81;
		location / {
			root D:/OpenSources/nginx-1.18.0/static; #静态页面所在的路径
			index index.html; #默认打开index.html
		}
	}

在这里插入图片描述
如上图,文字说明:

  1. 由nginx占用的81端口进行访问
  2. 规定了静态页面的目录,root D:/OpenSources/nginx-1.18.0/static; #静态页面所在的路径
  3. 打开index.html的静态页面

4.2 Nginx作为图片服务器(案例5)

在这里插入图片描述
如上图,文字说明:

  1. 该案例的图片路径为:D:/Opencv/C++/图片实例/log;
  2. 当访问路径为 端口81以及 gif|jpg|jpeg|png 结尾的时候,会通过请求控制器location进入访问。
  3. 当匹配路径成功后,就会在图片路径下寻找合适的图片。
  4. 当在图片路径下找不到图片 if ( !-e $request_filename) ,就会重定向到 proxy_pass http://192.168.102.144:81;#代理访问地址 进行查找。

4.2.1 完整的配置

修改如下 nginx.conf

server {
	   listen 127.0.0.1:81;
		#location / {
			#root D:/OpenSources/nginx-1.18.0/static;
			#index index.html;
		#}
		
	  location ~ .*\.(gif|jpg|jpeg|png)$ {  
	  expires 24h;  
	  root D:/Opencv/C++/图片实例/;#指定图片存放路径  
	  access_log D:/Opencv/C++/图片实例/log;#图片路径  
	  proxy_store on;  
	  proxy_store_access user:rw group:rw all:rw;  
	  proxy_temp_path         D:/Opencv/C++/图片实例/;#图片路径  
	  proxy_redirect          off;  
	  
	  proxy_set_header        Host 127.0.0.1;  
	  proxy_set_header        X-Real-IP $remote_addr;  
	  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;  
	  client_max_body_size    10m;  
	  client_body_buffer_size 1280k;  
	  proxy_connect_timeout   900;  
	  proxy_send_timeout      900;  
	  proxy_read_timeout      900;  
	  proxy_buffer_size       40k;  
	  proxy_buffers           40 320k;  
	  proxy_busy_buffers_size 640k;  
	  proxy_temp_file_write_size 640k;	  
	  if ( !-e $request_filename)  
	  {  
	     #如果从本地路径访问不到资源,重定向下面的地址进行访问
	     proxy_pass  http://192.168.102.144:81;#代理访问地址
	   }  
	  }   

4.2.2 访问本地的图片

注意地址路径
在这里插入图片描述

4.2.3 访问远端服务器的地址

注意地址路径
在这里插入图片描述

4.2.4 本地访问不到,到远端进行访问

注意地址路径
在这里插入图片描述

五、后记

如果能把我这个5个案例都测试一遍的同学们,应该可以把nginx了解得七七八八,其实正向代理和反向代理,核心都是对于请求的转发和代理,并没有很大的区分。

通俗的理解,正向代理就是客户端代理,反向代理就是服务端代码,除非是运维部署人员,不然没必要了解正向代理。

从nginx.conf中,我们需要记住的关键字有 协议级别, 服务器级别server, 请求级别location,upstream,proxy_pass, 了解这些关键字,面试挺有用的。

经过前面配置与测试,我们发现,Nginx 反向代理动静分离、负载均衡很简单,但是在生产环境,我们要做的还有很多,比如 日志文件,语法规则,匹配规则,rewrite语法等等。

程序员本来就是一条不断学习的路,有疑问或者对于本文有什么看法,可以留言,既然来了,我们就是朋友

猜你喜欢

转载自blog.csdn.net/qq_34168515/article/details/106735459
今日推荐