暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nginx反向代理

运维DevOps 2023-07-22
141

反向代理是Nginx代理方式的一种,与正向代理不同,客户端无需任何配置,客户端将请求发送到反向代理服务器,由反向代理服务器去请求后端资源,暴漏了代理服务器地址,隐藏真实地址

本例子中使用nginx和tomcat来一起演示下如何进行反向代理

一、安装tomcat:

1、首先在机器机器上安装tomcat,直接yum即可(演示用),如下:

    yum -y install tomcat

    2、在/usr/share/tomcat/目录下创建ROOT文件夹,然后编辑一个index.html文件作为入口,如下:

      #linux安装tomcat没有默认页面,因此需要人为创建
      mkdir -p usr/share/tomcat/ROOT
      echo "I am Tomcat" >> /usr/share/tomcat/ROOT/index.html
      #yum安装的tomcat实际应该是通过软连接到/var/lib/tomcat路径下

      3、通过浏览器加上8080端口访问如下:

      二、配置nginx反向代理:

      1、根据默认url地址匹配:

      在conf.d路径下新增配置文件gong.com.conf,添加内容如下:

      说明:www.gong.com为自定义域名,需要在windows本地添加解析,通过此域名的80端口访问将反向代理到10.9.2.80的8080端口,也就是tomcat服务上,如图:

      2、根据不同的url地址进行匹配:

      编辑gong.com.conf文件,配置不同的url条件,如图:

      注意看,上图中反向代理的url最后都没有加"/",如果加了"/",那么实际代理的时候就不会将location中路由代过去

      在/usr/share/tomcat/webapps/目录下新建项目文件夹projectA和projectB,并在内部创建文件index.html,内容分别为:

      重新加载nginx配置文件或者重启nginx,然后访问如下:

      注意:webapps一般会有一个ROOT目录,此目录下也可以放项目,访问的时候不需要加项目名,例如直接放一个index.html,访问时直接通过IP和端口即可,如果直接放在webapps目录下,访问的时候需要加上项目名去访问

      3、同一个url代理到多个地址上:

      通过域名请求后代理到后端多台服务器上,如图:

      上图中的http://project中的project对应的就是上面upstream中的两个地址,这个upstream模块也可以单独放在一个conf文件中

      此时通过域名访问会以轮询的方式在两台机器之间返回数据,如图:

      4、在反向代理中可以添加辅助相关参数,如图:

      反向代理常用参数:

      • proxy_http_version 1.0 ; Nginx服务器提供代理服务的http协议版本1.0,1.1,默认设置为1.0版本,可改为1.1

      • proxy_connect_timeout 10; nginx服务器与被代理的服务器建立连接的超时时间,默认60秒

      • proxy_read_timeout 10; nginx服务器向被代理服务器组发出read请求后,等待响应的超时间,默认为60秒

      • proxy_send_timeout 10; nginx服务器向被代理服务器组发出write请求后,等待响应的超时间,默认为60秒

      • proxy_ignore_client_abort on; 客户端断网时,nginx服务器是否对中断代理服务器的请求。默认为off

      • proxy_next_upstream timeout; 反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值

      • proxy_set_header Host $host; $host就是nginx代理服务器

      • proxy_set_header X-Real-IP $remote_addr; $remote_addr的值为客户端的真实ip

      • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;也可以获取真实IP

      • keepalive_timeout 65; 连接超时时间,默认为75s,可以在http,server,location块

      • proxy_set_header Origin ""; 允许跨域


      文章转载自运维DevOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论