nginx反向代理

目录

1 反向代理服务器介绍

2 准备工作

2.1 虚拟机准备

2.2 proxy_pass参数介绍

3 虚拟机配置

3.1 客户端配置

3.2 反向代理服务器配置

3.3 web服务器配置

3.4 关闭防火墙且将selinux设置为宽容模式

3.5 测试是否转发成功

3.6 测试第二个网页

3.7 参数proxy_set_header

4 常用参数介绍与实践

4.1 proxy_http_version

4.2 proxy_hide_header 

4.3 proxy_cache_path

4.4 add_header

5 nginx实现动静分离

5.1 区分location 的逻辑

5.2 nginx 的动静分离

5.2.1 配置

5.2.2 客户端测试访问

5.2.3 抓包分析


1 反向代理服务器介绍

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

2 准备工作

2.1 虚拟机准备

准备三台虚拟机

按照如下图参数布置虚拟机,下图是整个反向代理的过程

2.2 proxy_pass参数介绍

proxy_pass是Nginx配置中最常用的指令之一,用于设置反向代理,将客户端的请求转发到另一台服务器或一组服务器。

3 虚拟机配置

3.1 客户端配置

[root@client ~] vim /etc/hosts

# 增加以下行
192.168.239.137 www.shuyan.com

3.2 反向代理服务器配置

[root@nginx-forward ~] echo this is `hostname -I` > /usr/local/nginx/html/index.html 
[root@nginx-forward ~] vim /usr/local/nginx/conf.d/aa.conf
# 定义一个服务器块,用于处理特定的网络请求
server {
        # 指定此服务器块监听的端口,默认为HTTP的80端口
        listen 80;

        # 设置服务器名称,即处理哪些域名的请求
        # 这里指明处理对"www.shuyan.com"域名的请求
        server_name www.shuyan.com;

        # 设置访问日志的保存位置
        # 所有对本服务器块处理的请求的访问日志将被记录在此文件中
        access_log /usr/local/nginx/logs/access.log;

        # 设置静态文件的根目录
        # 当请求的是静态文件时,Nginx将从这个目录下寻找文件
        root /usr/local/nginx/html;

        # 定义一个location块,处理所有根路径"/"的请求
        location / {
                # 将接收到的请求代理到另一台服务器上
                # 这里的设置意味着,所有对"www.shuyan.com"的请求将被转发至"192.168.239.148"
                # 注意,这里没有指定端口,如果目标服务器的端口不是标准的80端口,则需明确指出
                proxy_pass http://192.168.239.148;
        }
}

3.3 web服务器配置

web服务器,将本机的IP地址导入到主配置文件指定的默认的index文件中

[root@web01 ~] echo this is `hostname -I` > /usr/local/nginx/html/index.html

3.4 关闭防火墙且将selinux设置为宽容模式

systemctl stop firewalld.service
setenforce 0

3.5 测试是否转发成功

[root@client ~] curl www.shuyan.com
this is 192.168.239.148 192.168.239.149 192.168.122.1

3.6 测试第二个网页

(虚拟主机定义配置,此网页的名称为www.shuyan.com)

主配置文件

子配置文件(虚拟主机)

[root@web01 /] mkdir /web
[root@web01 /] cd web
[root@web01 web] echo this is web > index.html
[root@web01 html] echo default web > index.html 
[root@web01 html] pwd 
/usr/local/nginx/html

[root@web01 conf.d] pwd
/usr/local/nginx/conf.d
[root@web01 conf.d] vim aa.conf 

# 开始一个新的server块
server {
    # 指定服务器监听的端口
    listen 80;
    
    # 设置服务器名称,用于处理www.shuyan.com的请求
    server_name  www.shuyan.com;
    
    # location块开始,定义如何处理根目录"/"下的请求
    location / {
        # 设置文档根目录,所有对"/"的请求将从这个目录下寻找文件
        root /web;
        
        # 设置默认索引文件,如果请求的URI没有明确指定文件名,则尝试这些文件名
        index index.html index.htm;
    }
}

重启nginx,使用客户端重新访问www.shuyan.com

发现他访问的并不是我定义server_name  为 www.shuyan.com 的网站,而是那个默认的网站

这是为什么呢?

[root@client ~] curl  www.shuyan.com 
default web

windows上打开抓包工具对数据包进行过滤分析

重新访问

[root@client ~] curl  www.shuyan.com 
default web

这个时候在vmnet8网卡上抓取到四个数据包

刚好就对应这请求相应四次过程

接下来逐个分析数据包

第一个数据包

第二个数据包,是代理服务器转发给后端服务器的,确实进行了转发,但在这里就发现了端倪

在主机头Host处发现了www.shuyan.com 的主机头不见了,转而变成了IP地址?在这里主机头www.shuyan.com 出现了传输的丢失

想要携带主机头继续传输,首先要认识到一个参数proxy_set_header

3.7 参数proxy_set_header

proxy_set_header 是 Nginx 中的一个配置指令,主要用于反向代理场景。当你配置 Nginx 作为反向代理服务器时,proxy_set_header 允许你自定义或修改从 Nginx 转发到后端服务器的 HTTP 请求头。

这个指令可以包含静态文本、动态变量或两者的组合,用于覆盖或添加请求头。下面是一些常见的 proxy_set_header 参数及其作用:

proxy_set_header Host $host;

这个参数用于设置请求头中的 Host 字段。当 Nginx 作为反向代理时,原始请求的 Host 头可能不会反映实际请求的目标主机。这个设置确保后端服务器收到正确的主机名。

proxy_set_header X-Real-IP $remote_addr;

这个参数用于设置 X-Real-IP 请求头,它包含了客户端的真实 IP 地址。这对于后端服务器识别实际发起请求的客户端非常重要。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

当请求经过多个代理时,X-Forwarded-For 用来记录请求路径上所有代理的 IP 地址。这通常是一个逗号分隔的列表,最新的 IP 地址在最前面。

proxy_set_header X-Forwarded-Proto $scheme;

这个参数用于设置 X-Forwarded-Proto 请求头,它告诉后端服务器原始请求使用的协议(例如,HTTP 或 HTTPS)。这对于处理 SSL 卸载特别有用。

proxy_set_header Connection close;

默认情况下,proxy_set_header 将 Connection 头设为 close,这意味着每个请求都会打开一个新的连接,请求完成后连接会被关闭。这可以避免某些后端服务器对持久连接的支持问题。

自定义参数

你可以设置任何其他请求头,只要你知道后端服务器需要什么信息。例如,proxy_set_header Custom-Header value; 可以用于添加一个自定义的请求头。

使用 proxy_set_header 时,你应该注意以下几点:

  • 不要重复设置已经存在的头,除非你明确知道这样做的后果。
  • 确保你正确地设置了所有的代理头,特别是当涉及到安全性和身份验证时。
  • 在使用 X-Forwarded-For 时,要确保你信任的代理链是安全的,因为这个头可以被伪造。

在 Nginx 的配置文件中,proxy_set_header 指令通常位于 http, server, 或者 location 上下文中。

这一次需要用到proxy_set_header Host $host ,以下就是演示过程

确保selinux设置为宽容模式 和 防火墙关掉

确保主配置文件里面http块里包含以下行信息,尽量放http块最后面(包含子配置文件)

[root@nginx-forward conf.d] vim /usr/local/nginx/conf/nginx.conf

打开子配置文件配置虚拟主机

[root@nginx-forward conf.d] vim /usr/local/nginx/conf.d/aa.conf 
server{
        listen 80;
        server_name www.shuyan.com;
        access_log /usr/local/nginx/logs/access.log;
        root /usr/local/nginx/html;
        location / {
                proxy_pass http://192.168.239.148;
                proxy_set_header Host $host;    # 增加这一行
                # 设置代理请求的Host头部,将其设置为原始请求的Host头部
                # 这样做是为了确保目标服务器能够正确识别请求的来源域名
                                            
}
}

# 重启nginx服务
[root@nginx-forward conf.d] systemctl restart nginx

在客户端上请求报文(在此前已在hosts文件编辑代理服务器为www.shuyan.com了)

[root@client ~] curl www.shuyan.com
this is web

抓包结果如下图(过滤http)

基础反向代理已完成

4 常用参数介绍与实践

4.1 proxy_http_version

proxy_http_version 是 Nginx 反向代理模块 (ngx_http_proxy_module) 中的一个配置指令,用于指定代理请求使用的 HTTP 协议版本。此参数影响 Nginx 与后端服务器通信时所使用的 HTTP 版本。

默认值

proxy_http_version 的默认值是 1.0。这意味着,如果没有特别配置,Nginx 会使用 HTTP/1.0 协议版本向后端服务器发起代理请求。

可选值

  • 1.0:指定使用 HTTP/1.0 版本。
  • 1.1:指定使用 HTTP/1.1 版本。

何时使用 1.1

HTTP/1.1 相比 HTTP/1.0 引入了持久连接和管线化请求等功能,这可以提高性能和减少延迟。特别是当使用 HTTP 的 Keep-Alive 功能时,设置 proxy_http_version1.1 可以充分利用 HTTP/1.1 的优势。

配置示例

在 Nginx 的配置文件中,proxy_http_version 指令可以放在 httpserver 或者 location 块中。例如:

[root@nginx-forward conf.d] vim /usr/local/nginx/conf.d/aa.conf 

server{
        listen 80;
        server_name www.shuyan.com;
        access_log /usr/local/nginx/logs/access.log;
        root /usr/local/nginx/html;
        location / {
                proxy_pass http://192.168.239.148;
                proxy_set_header Host $host;
                proxy_http_version 1.1;
                }
       }

再次尝试访问发现与之前不同,使用的是HTTP 1.1版本

[root@client ~] curl www.shuyan.com
this is web

4.2 proxy_hide_header 

proxy_hide_header (对大小写不敏感)是 Nginx 中的一个指令,主要用于在反向代理设置中修改或删除传递到上游服务器的请求头。当 Nginx 作为反向代理运行时,它会接收来自客户端的请求,并将这些请求转发到后端服务器。在这个过程中,Nginx 可以选择性地隐藏或修改某些 HTTP 请求头,以保护隐私、提高安全性或满足特定的配置需求。

# 使用curl命令请求www.shuyan.com/dynamic/并使用了-I选项,这告诉curl只获取HTTP头部信息而不下载整个网页内容。
[root@client ~] curl www.shuyan.com/static/ -I
HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Thu, 20 Jun 2024 12:15:23 GMT
Content-Type: text/html
Content-Length: 15
Connection: keep-alive
Last-Modified: Thu, 20 Jun 2024 10:07:41 GMT
ETag: "6673ff6d-f"
Accept-Ranges: bytes

查看反向代理服务器子配置文件

[root@nginx-forward conf.d] cat /usr/local/nginx/conf.d/aa.conf
server{
        listen 80;
        server_name www.shuyan.com;
        access_log /usr/local/nginx/logs/access.log;
        root /usr/local/nginx/html;
        location /static {
                proxy_pass http://192.168.239.148/;
                proxy_set_header Host $host;
                proxy_http_version 1.1;
                }

        location /dynamic {
                proxy_pass http://192.168.239.133/;
                proxy_set_header Host $host;
                proxy_http_version 1.1;

                }
    }

假如我想在反向代理服务器将头部信息中的ETag给隐藏不返回给客户端,在反向代理服务器上使用proxy_hide_header 参数选择需要隐藏的字段假如说我想要隐藏ETag字段

重新启动nginx

[root@nginx-forward conf.d] nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx-forward conf.d] systemctl restart nginx

服务端再次请求,发现ETag字段已经被隐藏掉了

[root@client ~] curl www.shuyan.com/static/ -I
HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Thu, 20 Jun 2024 12:23:42 GMT
Content-Type: text/html
Content-Length: 15
Connection: keep-alive
Last-Modified: Thu, 20 Jun 2024 10:07:41 GMT
Accept-Ranges: bytes

隐藏之前

隐藏之后

4.3 proxy_cache_path

以下是配置

proxy_cache_path /web/cache/nginx levels=1:1:1 keys_zone=my_cache:10m max_size=1g inactive=60m;

server{
	listen 80;
	server_name www.shuyan.com;
	access_log /usr/local/nginx/logs/access.log;
	root /usr/local/nginx/html;
	location /static {
                proxy_pass http://192.168.239.148/;
                proxy_set_header Host $host;
		        proxy_hide_header ETag;
                proxy_http_version 1.1;
		        proxy_cache my_cache;
                proxy_cache_valid 200 302 10m;
                proxy_cache_valid 404 1m;
                proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
                proxy_cache_key $request_uri;

		}

	location /dynamic {
                proxy_pass http://192.168.239.133/;
                proxy_set_header Host $host;
                proxy_http_version 1.1;


}
}

这条指令配置了代理缓存的存储路径、目录层次结构、共享内存区域大小、最大缓存大小以及缓存项的生存周期。具体来说,它告诉Nginx将缓存数据存储在/web/cache/nginx目录下,使用一个共享内存区域my_cache(大小10MB)来存储缓存元数据,整个缓存的最大大小为1GB,缓存项在60分钟无活动后将被清除。

  • /web/cache/nginx:这是缓存数据在文件系统中的存储路径。所有被缓存的响应数据将被保存在/web/cache/nginx目录下。

  • levels=1:1:1:这描述了缓存文件的目录结构。通常,使用多级目录结构(例如1:22:2)可以更高效地利用磁盘I/O,但在这里设置为1:1:1意味着所有的缓存文件将被存储在一个单一的目录下。这可能不是最优的选择,尤其是在缓存文件数量非常大的情况下,因为大量的文件在同一目录下可能会降低性能。

  • keys_zone=my_cache:10mkeys_zone参数定义了一个共享内存区域,用于存储缓存项的元数据(如缓存键和其他控制信息)。在这个例子中,名为my_cache的共享内存区域被创建,其大小为10MB。这个区域对所有Nginx工作进程可见,用于同步缓存项的状态。

  • max_size=1g:这设置了缓存使用的最大磁盘空间为1GB。一旦缓存使用达到这个限制,Nginx会根据某些策略(如LRU,最近最少使用)来删除旧的缓存项,以便为新的缓存项腾出空间。

  • inactive=60m:这是一个时间间隔,表示缓存项在没有被任何请求访问的情况下,将保留多久。在这个例子中,如果一个缓存项60分钟内没有被请求,它将被标记为可删除,以释放空间给新的缓存项。

/static路径下的请求,指示Nginx作为代理服务器,将请求转发至http://192.168.239.148/。它使用之前定义的my_cache缓存区域,缓存成功响应(状态码200和302)长达10分钟,缓存404响应1分钟。当遇到后端错误或超时时,Nginx将使用缓存中的陈旧数据。

proxy_cache my_cache;

这条指令指定了要使用的缓存区域名称。在你的配置中,my_cache 是在 proxy_cache_path 指令中定义的共享内存区域。当Nginx收到请求时,它会首先检查 my_cache 中是否有对应的缓存项可用。

proxy_cache_valid 200 302 10m;

这条指令设置了HTTP状态码为200和302的响应的缓存有效期。在这里,如果后端返回的是200或302状态码的响应,那么该响应将被缓存10分钟(10m)。这意味着,在接下来的10分钟内,对于相同的请求,Nginx将直接从缓存中提供响应,而不必重新查询后端服务器。

proxy_cache_valid 404 1m;

类似于上述指令,但针对404状态码的响应。在这种情况下,如果请求的结果是404(未找到),则该响应将被缓存1分钟(1m)。这通常用于减少对后端服务器的无效查询,特别是在短时间内连续发送多次相同请求时。

proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

这条指令非常重要,因为它告诉Nginx在特定情况下即使缓存项已过期,仍然使用它。具体来说,当Nginx遇到错误(error)、后端服务器响应超时(timeout)、缓存更新过程(updating),或者后端返回了服务器错误响应(http_500, http_502, http_503, http_504)时,Nginx将继续使用缓存中的数据。这种行为有助于保持服务的可用性,即使后端暂时不可用或出现问题。

proxy_cache_key $request_uri;

这条指令定义了用于查找和存储缓存项的键。在这里,使用proxy_cache_key $request_uri这条指令定义了用于查找和存储缓存项的键。Nginx使用$request_uri变量作为缓存键,这意味着相同的URI将指向相同的缓存项。如果请求的URI相同,无论其他请求头如何变化,Nginx都将认为它们是相同的请求,从而复用同一份缓存数据。当然,还可以使用更复杂的表达式来构造缓存键,以考虑更多的请求参数,例如用户代理、请求方法或查询字符串。

测试

使用ab命令:压力测试工具

ab 命令,全称 ApacheBench,是Apache HTTP服务器自带的一款压力测试工具,主要用于评估HTTP服务器的性能。它能够发送多个并发请求到一个或多个URL,并报告平均响应时间、每秒完成的请求数以及其他有关服务器性能的信息。ab 命令特别适合用于测试服务器在高并发情况下的表现,以及优化Web服务器配置。

基本语法

1ab [options] [http[s]://[host[:port]][/path]]

主要选项

  • -n requests:指定要发送的请求数量。
  • -c concurrency:指定并发请求的数量。
  • -t seconds:运行测试的持续时间(以秒为单位)。
  • -p postfile [content-type]:用于POST请求的文件名和内容类型。
  • -T content-type:设置HTTP请求的内容类型(Content-Type)头。
  • -H header:添加自定义的HTTP头。
  • -v detail:详细级别,用于控制输出的详细程度。
  • -L:允许30x重定向。
  • -k:使用HTTP KeepAlive功能。
  • --ssl:使用SSL/TLS连接。
  • --timeout seconds:设置超时时间(以秒为单位)。

示例

假设我们要测试一个Web服务器在并发100个请求,总共发送10000个请求时的表现:

[root@client test] ab -c 100 -n 10000 www.shuyan.com/static
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.shuyan.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.20.2
Server Hostname:        www.shuyan.com
Server Port:            80

Document Path:          /static
Document Length:        15 bytes

Concurrency Level:      100
Time taken for tests:   1.716 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2250000 bytes
HTML transferred:       150000 bytes
Requests per second:    5828.42 [#/sec] (mean)
Time per request:       17.157 [ms] (mean)
Time per request:       0.172 [ms] (mean, across all concurrent requests)
Transfer rate:          1280.66 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   3.1      1      38
Processing:     2   15   4.4     15      46
Waiting:        1   14   4.3     15      44
Total:          9   17   4.0     17      47

Percentage of the requests served within a certain time (ms)
  50%     17
  66%     18
  75%     19
  80%     19
  90%     20
  95%     21
  98%     23
  99%     43
 100%     47 (longest request)

每秒请求数

以下是演示

第一次请求client客户端

查看反向代理服务器

请求前没有文件,请求后发现出现了缓存文件

第二次请求发现请求速度明显变快了,说明缓存起了作用

第三次同样的

 4.4 add_header

add_header 用于在响应中动态地添加或修改 HTTP 响应头。这对于添加自定义头、安全性头(如 CORS 相关头、Content-Security-Policy、X-Frame-Options 等)、缓存控制头以及其它任何标准或非标准的 HTTP 头非常有用。

以下是配置

proxy_cache_path /web/cache/nginx levels=1:1:1 keys_zone=my_cache:10m max_size=1g inactive=60m;

server{
	listen 80;
	server_name www.shuyan.com;
	access_log /usr/local/nginx/logs/access.log;
	root /usr/local/nginx/html;
	location /static {
        proxy_pass http://192.168.239.148/;
        proxy_set_header Host $host;
		proxy_hide_header ETag;
        proxy_http_version 1.1;
		proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_key $request_uri;
		add_header X-Via $server_addr;	#当前nginx主机的IP
		add_header X-Cache $upstream_cache_status; #缓存命中HIT,未命中MISS
		add_header X-Accel $server_name; #客户端访问的FQDN
		}

	location /dynamic {
        proxy_pass http://192.168.239.133/;
        proxy_set_header Host $host;
        proxy_http_version 1.1;

        }
}

add_header X-Via $server_addr;:这条指令添加了一个名为“X-Via”的HTTP响应头,其值为当前Nginx主机的IP地址。这通常用于跟踪请求经过的网络路径或服务器信息。

add_header X-Cache $upstream_cache_status;:这条指令添加了一个名为“X-Cache”的HTTP响应头,其值为上游缓存的状态。如果缓存命中,则值为“HIT”,如果未命中则为“MISS”。这有助于了解缓存是否有效以及何时需要从原始源获取数据。

add_header X-Accel $server_name;:这条指令添加了一个名为“X-Accel”的HTTP响应头,其值为客户访问的FQDN(完全限定域名)。这在使用Nginx作为反向代理时特别有用,因为它可以帮助确定请求应该被转发到哪个后端服务器。

测试

5 nginx实现动静分离

5.1 区分location 的逻辑

在nginx反向代理服务器上增加一个location块

并将location /  改为 location /api

服务端增加配置

[root@web01 ~] cd /web/

[root@web01 web] mkdir /web/api

[root@web01 web] echo this is api > /web/api/index.html

[root@web01 web] cat /usr/local/nginx/conf.d/aa.conf 
server{
        listen 80;
        server_name  www.shuyan.com;
        location / {
        root /web;
        index index.html index.htm;

          }

    }

当去访问服务端的时候会出现以下几种情况:

[root@client ~] curl www.shuyan.com
this is web

[root@client ~] curl www.shuyan.com/api/
this is api


[root@client ~] curl www.shuyan.com/api
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.20.2</center>
</body>
</html>

Nginx配置中,为/api//定义了location块,Nginx通常会在某些情况下自动执行重定向,尤其是在处理URL结尾的斜杠时。Nginx的行为遵循以下规则:

隐式重定向规则:当一个请求URL没有以斜杠结尾,但Nginx配置中的location块是以斜杠结尾的,Nginx会自动执行一个301重定向,将请求重定向到加上斜杠的URL。这是因为Nginx试图保持URL的规范性和一致性。

在场景中,curl www.shuyan.com/api/返回了正确的响应:“this is api”,这表明请求被正确处理了。然而,curl www.shuyan.com/api返回了301 Moved Permanently状态码,这表明Nginx正在应用上述规则之一:隐式重定向规则 。将没有斜杠的URL重定向到带有斜杠的URL。

在抓包逐个分析,再通过查看web配置文件,确定了是因为web服务端是由于隐式重定向规则:

当一个请求URL没有以斜杠结尾,但web服务器的Nginx配置中的location块是以斜杠结尾的,Nginx会自动执行一个301重定向

请求的包没有斜杠结尾

重定向返回301

搞清楚逻辑就可以开始实践nginx的动静分离了

5.2 nginx 的动静分离

以下增加一台虚拟主机web02

静态服务器为web01,动态服务器为web02

5.2.1 配置

在web02服务器安装nginx,并增加以下配置

[root@web02 yum.repos.d] yum install nginx
[root@web02 ~] vim /etc/nginx/conf.d/aa.conf

server{
        listen 80;
        server_name  www.shuyan.com;
        location / {
        root /web/dynamic;   # 动态
        index index.html index.htm;

        }
    }

[root@web02 ~] mkdir /web/dynamic && echo this is dynamic > /web/dynamic/index.html

服务器web01

[root@web01 web] vim /usr/local/nginx/conf.d/aa.conf 
server{
        listen 80;
        server_name  www.shuyan.com;
        location / {
        root /web/static;   # 静态
        index index.html index.htm;

        }
    }

[root@web01 web] mkdir /web/static
[root@web01 web] echo this is static > /web/static/

反向代理服务器

[root@nginx-forward conf.d] vim /usr/local/nginx/conf.d/aa.conf 
server{
        listen 80;
        server_name www.shuyan.com;
        access_log /usr/local/nginx/logs/access.log;
        root /usr/local/nginx/html;
        location /static {
                proxy_pass http://192.168.239.148/;   # 将尾部闭合,这个时候传输数据包就会将客户端 传过来的www.shuyan.com/static 给闭合成 www.shuyan.com/static/ 
                proxy_set_header Host $host;
                proxy_http_version 1.1;
                }

        location /dynamic {
                proxy_pass http://192.168.239.133/;    # 将尾部闭合
                proxy_set_header Host $host;
                proxy_http_version 1.1;

                }
        }

5.2.2 客户端测试访问

[root@client ~] curl www.shuyan.com/static
this is static
[root@client ~] curl www.shuyan.com/static/
this is static
[root@client ~] curl www.shuyan.com/dynamic
this is dynamic
[root@client ~] curl www.shuyan.com/dynamic/
this is dynamic

5.2.3 抓包分析

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍妍的宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值