nginx的反向代理实验 您所在的位置:网站首页 linux怎么配置代理服务器实验结果 nginx的反向代理实验

nginx的反向代理实验

#nginx的反向代理实验| 来源: 网络整理| 查看: 265

nginx反向代理 概念:

反向代理是nginx的一个重要功能,在编译安装的时候默认会编译的一个模块

主要的是proxy_pass这个参数来指定;

客户需要查找一些资源–>代理服务器接收—>然后再把请求给到后端真实的服务器进行处理;

再把得到的结果反馈给客户端;

作用:

正向代理:服务器代理客户的请求; 反向代理:主要是提供服务器返回的数据

可以防止内部服务器被恶意攻击(客户根本就不知道这些信息是哪一台服务器提供的)为负载均衡和动静分离提供技术支持; 语法: Syntax: proxy_pass URL; #proxy_pass +需要代理的后端服务器 Default: — Context: location, if in location, limit_except

代理服务器:可以支持http或者https

url地址:可以指的是域名或者是IP地址,也可以选择端口

语法例子:

proxy_pass http://192.168.75.130; #仅仅代理的是ip地址 proxy_pass http://192.168.75.130:8080;代理端口号 proxy_pass http://www.liangjiawei.net/url;#代理具体的目录请求 反向代理实验讲解 实验一:

规划:

location和proxy_pass都不带uri路径

客户服务器:192.168.75.130

代理服务器:192.168.75.131

后端服务器:192.168.75.132

代理端配置:

修改配置文件–>不要带上url的;

#使用的是虚拟主机的配置,也是131的nginx服务 [root@node1 nginx]# vim /data/nginx/conf/www.liangjiwei.net.conf server { listen 80; server_name www.liangjiawei.net; # location / { # root /data/html/www; # index index.html index.htm; # } location / { proxy_pass http://192.168.75.132; } } #这里配置文件指定了,131的服务器的www.liangjiawei.net这个网址, #如果访问www.liangjiawei.net就直接访问132的服务器 #意思就是131反代132的服务器-->真实处理的是132服务器 #验证 [root@node2-132 nginx]# curl www.liangjiawei.net 这是132的服务器 [root@node2-132 nginx]# curl www.liangjiawei.net/index.html 这是132的服务器 实验二:

这个是变形:

131代理服务器的proxy_pass这里没有uri路径;但是131代理服务器的location有uri路径注意资源路径的位置 #代理服务器,先修改配置文件-->还是引用原来的虚拟主机来配置 [root@node1 ~]# vim /data/nginx/conf/www.liangjiwei.net.conf server { listen 80; server_name www.liangjiawei.net; location /haha/ { #这里我们加了一个路径 proxy_pass http://192.168.75.132; } } #重载配置文件 [root@node1 ~]# nginx -s reload #后端服务器配置 [root@node2-132 ~]# mkdir /usr/local/nginx/html/haha/ [root@node2-132 ~]# echo “这是132的haha的页面” > /usr/local/nginx/html/haha/index.html #修改后端服务器的配置文件 [root@node2-132 ~]# vim /usr/local/nginx/conf/nginx.conf #在server下空白处加入 location /haha { index index.html index.htm; } .............. #重载配置文件 [root@node2-132 ~]# nginx -s reload #验证测试看看 #如果直接访问域名-->得到本机的默认页面 [root@node1 ~]# curl www.liangjiawei.net 这是131 默认的nginx的主页面 #如果访问/haha/? [root@node1 ~]# curl www.liangjiawei.net/haha/ “这是132的haha的页面”

解释说明

代理服务器端配置了uri的路径值得是远端的服务器的路径如果要访问成功,那么后端的资源要有 实验三:

这个也是变形:

131代理服务器的proxy_pass这里设置了uri路径;131代理服务器中的location也设置了路径;那么服务器该如何处理这些资源?后端服务器同样有haha和hehe的资源,但是如果访问到的/haha,在proxy_pass中设置了uri直接访问到了hehe的资源 #代理服务器端的配置 [root@node1 ~]# vim /data/nginx/conf/www.liangjiwei.net.conf server { listen 80; server_name www.liangjiawei.net; location /haha/ { proxy_pass http://192.168.75.132//hehe/; #在实验二的基础上再加个路径; } #重载配置文件 [root@node1 ~]# nginx -s reload #后端服务器还没设置资源,然后直接验证-->直接报404;资源没找到 [root@node1 ~]# nginx -s reload [root@node1 ~]# curl www.liangjiawei.net/haha/ 404 Not Found 404 Not Found nginx/1.17.10 #然后我们在后端服务器创建一下资源 [root@node2-132 ~]# mkdir /usr/local/nginx/html/hehe [root@node2-132 ~]# echo "这是132的hehe的资源查看" > /usr/local/nginx/html/hehe/index.html #然后再次访问-->发现能够找到资源 [root@node1 ~]# curl www.liangjiawei.net/haha/ 这是132的hehe的资源查看 获取远程客户端真实ip地址 在服务器配置的基础上,去掉复杂的url,直接代理到132的主页就好了;我们不配置的时候,查看一下日志然后配置了之后再次查看日志,看看能否多出来什么 #代理服务器131的配置文件,尽量简单 [root@node1 ~]# vim /data/nginx/conf/www.liangjiwei.net.conf server { listen 80; server_name www.liangjiawei.net; location / { proxy_pass http://192.168.75.132; #后端的服务器是132, } } #重仔配置文件 [root@node1 ~]# nginx -s reload #查看验证--->这里使用130的客户端来查看 [root@node-130 ~]# curl www.liangjiawei.net 这是132的服务器 #去到后端服务器查看一下日志文件-->明显发现了,明明是130访问的,但是没有记录 [root@node2-132 ~]# tail -5 /usr/local/nginx/logs/access.log 192.168.75.131 - - [04/Jul/2021:17:50:33 +0800] "GET /haha/ HTTP/1.0" 200 32 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:17:57:48 +0800] "GET //hehe/ HTTP/1.0" 404 154 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:17:59:46 +0800] "GET //hehe/ HTTP/1.0" 200 32 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:18:01:45 +0800] "GET //hehe/ HTTP/1.0" 200 32 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:18:09:48 +0800] "GET / HTTP/1.0" 200 22 "-" "curl/7.29.0" [root@node2-132 ~]# #这里修改一下代理服务器的配置文件 [root@node1 ~]# vim /data/nginx/conf/www.liangjiwei.net.conf server { listen 80; server_name www.liangjiawei.net; location / { proxy_pass http://192.168.75.132; proxy_set_header Host $host; #请求的主机信息 proxy_set_header X-Real-IP $remote_addr; #真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #转发功能 } } #重载配置文件 [root@node1 ~]# nginx -s reload #后端服务器需要开启日志功能 [root@node2-132 ~]# vim /usr/local/nginx/conf/nginx.conf #在日志功能那里添加一个$http_x_real_ip的变量 .... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$http_x_real_ip"'; access_log logs/access.log main; #重载配置文件 [root@node2-132 ~]# nginx -s reload #然后访问查看--->依然是用130做客户端访问 [root@node-130 ~]# curl www.liangjiawei.net 这是132的服务器 #再看后端服务器的日志 [root@node2-132 ~]# tail -5 /usr/local/nginx/logs/access.log 192.168.75.131 - - [04/Jul/2021:17:57:48 +0800] "GET //hehe/ HTTP/1.0" 404 154 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:17:59:46 +0800] "GET //hehe/ HTTP/1.0" 200 32 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:18:01:45 +0800] "GET //hehe/ HTTP/1.0" 200 32 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:18:09:48 +0800] "GET / HTTP/1.0" 200 22 "-" "curl/7.29.0" 192.168.75.131 - - [04/Jul/2021:18:17:21 +0800] "GET / HTTP/1.0" 200 22 "-" "curl/7.29.0" "192.168.75.130" "192.168.75.130" 缓存代理服务器讲解

简单理解:

代理服务器还可以使用缓存功能,比如说疫情的时候,很多人查询结果,如果变化不大,但是直接就使用缓存来给与结果,减少应用服务器(后端服务器)上的资源开销,如果多个客户查询同一样的资源,代理服务器命中后,对后端服务器只会进行一次的资源调度;浏览器也是存在缓存配置,把请求目标的内容会放在浏览器本地;

实验:

后端服务器是130;

代理服务器是131;

后端服务器配置:

#修改配置文件 [root@node1 nginx]# vim conf/nginx.conf ............... proxy_cache_path /data/nginx/cache max_size=10g levels=1:2 keys_zone=nginx_cache:10m inactive=10m use_temp_path=off; upstream nginx { server 192.168.75.130; } server { listen 80; server_name localhost; #这里添加proxy的内容 location / { root html; index index.html index.htm; proxy_pass http://192.168.75.130; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache nginx_cache; proxy_cache_key $host$uri$is_args$args; proxy_cache_valid 200 304 302 1d; } #参数解释: /data/nginx/cache #缓存资源存放路径 levels #设置缓存资源的递归级别, 默认为 levels=1:2,表示Nginx为将要缓存的资源生成的key从后依次设置两级保 存。 key_zone #在共享内存中设置一块存储区域来存放缓存的key和 metadata,这样nginx可以快速判断一个request是否命中或者未命中缓存, 1m可以存储8000个key,10m可以存储80000个key max_size #最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除不活跃的cache文件 inactive #未被访问文件在缓存中保留时间,本配置中如果60分钟 未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默 认是10分钟。 需要注意的是,inactive和expired配置项的含义是不同的, expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问 的缓存文件 use_temp_path #如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件 在不同文件系统中不必要的拷贝 proxy_cache #启用proxy cache,并指定key_zone。如果 proxy_cache off表示关闭掉缓存。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有