建网站服务器系统交换链接名词解释
 Nginx 是一个高性能的开源反向代理服务器,可以用于处理跨域请求、负载均衡和缓存等功能。在本文中,我们将介绍如何使用 Nginx 配置文件来实现反向代理。
     我们可以实现跨域请求的处理,同时保护用户的隐私和安全。此外,Nginx 还可以通过添加其他配置指令来实现更多功能,如负载均衡和缓存等。
举例1:
1、用户访问 http://x.com/test/api/oauth2/...... 需要请求到 http://y.com/api/oauth2/...... 去除 test
server { listen 80; server_name x.com; location /test/{ rewrite ^/test/(.*)$ /$1 break; proxy_pass http://y.com; } } 
  
 注意:
 
 listen 80;:监听端口号 80,表示该服务器将接收来自客户端的 HTTP 请求。
  
 server_name x.com; :指定该服务器的域名为 x.com,表示当客户端请求的域名为 x.com 时,将使用该服务器进行处理。
 location /test/:匹配以 /test/ 开头的请求路径。
 rewrite ^/test/(.*)$ /$1 break;:将匹配到的请求路径中的 /test/ 替换为空,即去掉 /test/ 部分,然后继续处理后续的指令。
 proxy_pass http://y.com;:将经过重写后的请求转发到 http://y.com,即将请求代理到 http://y.com 上进行处理。
 总体来说,这段配置的作用是将客户端请求中以 /test/ 开头的路径重写为去掉 /test/ 部分的路径,并将重写后的请求转发到 http://b.com 进行处理。
举例2:
server {# 对外暴露 80 端口listen    80;server_name x.com;# 后端API地址暴露为:http://x.com/apislocation /apis {proxy_pass   http://127.0.0.1:8080/;proxy_pass_request_headers      on;# 重写URL 去除apisrewrite "^/apis/(.*)$" /$1 break;} 
}
 
这里的rewrite 就是为了去除URL中的/apis,实际的后端api中是没有这个参数的,但是为了做到在Nginx转发请求,前端需要加上这个参数,以便于区别
比如前端的请求地址是
http://x.com/apis/user
 那么实际上经过Nginx转发后请求的地址是
http://127.0.0.1:8080/user
 rewrite “^/api/(.)”/1 break,路径重写:
(1)"^/api/(.)$":匹配路径的正则表达式,用了分组语法就是*(.)**,把/api/以后的所有部分当做1组;
 (2) /$1:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始,也就是api),即/api/后面的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的目的
 break:指令,常用的有2个,分别是:last、break;
(1)last:重写路径结束后,将得到的路径重新进行一次路径匹配;
 (2)break:重写路径结束后,不再重新匹配路径。
总结
1.rewrite和location功能有点像,都能实现跳转。主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他服务器。
2.下面是可以用作if判断的全局变量
 $content_type : 请求头中的Content-Type字段。
 $document_root : 当前请求在root指令中指定的值。
 $host : 请求主机头字段,否则为服务器名称。
 $http_user_agent : 客户端agent信息
 $http_cookie : 客户端cookie信息
 $limit_rate : 这个变量可以限制连接速率。
 $request_method : 客户端请求的动作,通常为GET或POST。
 $remote_addr : 客户端的IP地址。
 $remote_port : 客户端的端口。
 $remote_user : 已经经过Auth Basic Module验证的用户名。
 $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
 $scheme : HTTP方法(如http,https)。
 $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
 $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
 $server_name : 服务器名称。
 $server_port : 请求到达服务器的端口号。
 $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
 uri:不带请求参数的当前URI,uri不包含主机名,如”/foo/bar.html”。
 documenturi : 与uri:与uri相同。
