nginx有哪些反向代理的方式,你知道吗_

Reverse proxy

正向代理

正向代理,和平常我们说代理上网的代理基本一样,他的工作原理就像一个代理人的角色,举个粟子,一个用户访问不了某网站,但是能访问一个代理服务器,这个代理服务器呢,它能访问那个用户不能访问的网站,于是用户可以先连上代理服务器,告诉它用户需要那个无法访问网站的内容,代理服务器去取回来,然后返回给用户。也就是用户通过了代理人访问了原先无法访问的网站。正向代理是一个位于用户或客户端(client)和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置(也就是配置代理服务器的连接信息)才能使用正向代理。

反向代理

用户访问了网站,但实际上www.example.com上并不存在index.html页面,他是从另外一台服务器上取回来,然后作为自己的内容返回用户,但用户显然是不知道index.html不是他的,他只清楚得知道,我就是访问了www.example.com,而不清楚www.example.com只是个代理服务器。这里提到的www.example.com这个域名对应的服务器其实是设置了反向代理功能,代理后端的服务器向外提供服务。对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理发送页面请求,反向代理会判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

总结下,做正向代理的时候,代理服务器是客户端的代理。作为反向代理的时候,代理服务器是原始服务器的代理。从代理谁的角度应该比较好理解。

proxy

一、http反向代理

nginx中server段配置

方式1:

server {       listen 80;       server_name www.example.com;       location / {           proxy_pass :8080/;           proxy_set_header Host $http_host;           proxy_set_header X-Forward-For $remote_addr;       } }

重新加载配置文件或重启服务,使之修改生效。这里要注意location /,下面的proxy_pass 后接的地址也要加“/”,如果location /bbs {,那么下面的proxy_pass地址也要与之对应,写成:8080/bbs;如果为location /bbs/ { , 那么应写成:8080/bbs/, 注意这个"/"。

代理服务器IP:192.168.10.11,将域名www.example.com解析到该IP。这样当用户在浏览器中输入 www.example.com 的时候,代理服务器(192.168.10.11)就会从 192.168.10.10:8080取出页面文件当成自己的发送给用户。

这里proxy_set_header Host $http_host; 这个配置,通过设定对应的域名头信息传递到后端的虚拟主机中,以使后端能以对应域名进行响应。 proxy_set_header Host $http_host; 应用于解决nginx同IP、同端口、不同域名时的转发。

方式2:

配置成负载均衡的用法也是可以的,这时候只在upstream中加一个server,主要是起到个域名转发的作用。

upstream web_server {      server 192.168.10.10:8080; #       server 192.168.10.9:8080; #       server 192.168.10.8:8080; 此处增加多个服务器,便可配置成负载均衡,还可加上一些控制机制,如轮循,权重。 } server {      listen 80;      server_name www.example.com;      location / {      proxy_pass ;      } }

二、tcp反向代理

TCP反向代理,官方在1.9.0及之后的版本加入了这个功能,在之前的话可以用第三方的模块实现,目前基本使用官方的反向代理。

编译的时候要将stream模块编译进去,./configure的时候带上 --with-stream

配置文件中的具体配置如下:

stream {  upstream backend {      server 192.168.10.10:8888    }  server {      listen 12345;      proxy_pass backend;  } }

同样也是可以配置成负载均衡的模式,在upstream下增加server。

三、websocket反向代理

http {   # ... 省略其它的配置... #  map $http_upgrade $connection_upgrade {  default upgrade;   close;  }  upstream websocket {      server 192.168.100.10:8010;  }  server {         listen 8020;  location / {         proxy_pass http://websocket;         proxy_http_version 1.1;         proxy_set_header Upgrade $http_upgrade;         proxy_set_header Connection "Upgrade";         }  } }

注:通过http反向代理到其他端口的服务访问时页面报“502 bad gateway”, 通过日志查看报“(13: Permission denied) while connecting to upstream”的错误 检查nginx配置文件并无问题,原因在SElinux,

#getenforce Enforcing

设置selinux策略为宽松模式

#setenforce 0 #getenforce Permissive

永久保存该模式

#vim /etc/selinux/config SELINUX=disabled