Nginx 反向代理

时间:2022-07-26
本文章向大家介绍Nginx 反向代理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.1 概述

1.1.1 代理

  在 Java 设计模式中,代理模式指:给某个对象提供一个代理对象,并由代理对象控制原对象的引用。简单来说就是我想要买一套房,但是这需要我自己去跑楼盘,看房子,比较麻烦,然后我就去做中介的朋友哪里,让他帮我搞定,我付钱就好了。这就是代理的思想,娱乐圈中的经纪人也可以理解为代理。即我们想做什么,但又不想直接去做,那么这时候就找另外一个人帮我们去做,这个就是代理。

1.1.2 正向代理

  正向代理意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。就好比在国内无法使用 Google 服务,需要借助工具才能访问,这里用的就是正向代理。

1.1.3 反向代理

  反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为 Web 加速,即使用反向代理作为 Web 服务器的前置机来降低网络和服务器的负载,提高访问效率。

1.2 使用 http 模块反向代理

 proxy_pass 指令属于 ngx_http_proxy_module 模块,此模块可以将请求转发到另一台服务器。  proxy_set_header:proxy_set_header host host; 当后端 Web 服务器上也配置有多个虚拟主机时,需要用该 Header 来区分反向代理哪个主机名;proxy_set_header X-Forwarded-For remote_addr;如果后端 Web 服务器上的程序需要获取用户 IP,从该 Header 头获取。

server {
	listen       80;
	server_name  localhost;
	
	location / {
		proxy_pass http://47.103.1.4.205:6666;
		index  index.html index.htm index.jsp;
	}
}

1.3 使用 stream 模块反向代理

  有些 Nginx 默认安装的时候无法加载 stream 模块,需要在安装时 ./configure 参数里加上 –with-stream 即 ./configure --with-stream。在配置文件中怎加 stream 模块,stream 模块位于与 http 模块相同的层次,stream 在使用上与 http 相近,只需配置 upstream 然后再配置 server 即可,代理 mysql 只需用反向代理服务器的一个端口去代理数据库服务器(集群)的端口即可,文件下载亦然。

// stream 模块,就跟 http 模块一样 
stream { 
	
	upstream ssh {
		server smtp.qq.com;
	}
	// 里面可以有多个监听服务,配置监听端口和代理的 ip 和端口就可以进行 tcp 代理了。 
	server { 
		listen 9600;
		proxy_pass ssh;
		proxy_connect_timeout 1h;
		proxy_timeout 1h;
	}
}