[未添加] 反向代理是通过 proxy_pass 指令实现的。 2.2 反向代理示例:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host:$server_port;#为请求头添加Host字段,用于指定请求服务器的域名/IP地址和端口号。
# 设置用户ip地址
proxy_set_header X-Forwarded-For $remote_addr;#为请求头添加XFF字段,值为客户端的IP地址。
# 当请求服务器出错去寻找其他服务器
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
当我们访问 localhost 时,ngnix 会将我们的请求转发到 localhost:8081
3 负载均衡
3.1 负载均衡概念:
当有 2 个或更多服务器时,代理服务器会将请求按照规则分发到特定的服务器进行处理。
3.2 负载均衡策略及示例:
Nginx 目前支持多种负载均衡策略。这里有6个常用的。
3.2.1RR(循环:默认投票):
每个请求按照时间顺序依次分配到不同的后端服务器,即第一个请求分配到第一个服务器,第二个请求分配到第二个服务器。第一个服务器。第一个请求被分配给另一台服务器。如果只有两台服务器,则第三个请求将继续分配给第一台服务器。如此循环下去,意味着服务器接收请求的比例为1:1。如果后端服务器宕机,可以自动删除。轮询是默认配置,不需要太多配置
同一个项目分别使用8081和8082端口启动项目
upstream web_servers {
server localhost:8081;
server localhost:8082;
}
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
location / {
proxy_pass http://web_servers;
proxy_set_header Host $host:$server_port;
}
3.2.2热备:
假设有2台服务器。当一台服务器发生灾难时,另一台服务器可以提供服务。服务器处理请求的顺序:AAAAAA。突然A挂断了电话。服务器处理请求的顺序:BBBBBBBBBBBBBB...
upstream web_servers {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
3.2.3 权重
根据配置的权重将不同数量的请求分发到不同的服务器。 。如果未设置,则默认为 1。以下服务器的请求顺序为:ABBABBABBABBABBB....
upstream web_servers {
server localhost:8081 weight=1;
server localhost:8082 weight=2;
}
3.2.4 ip_hash
这样每个IP地址都有固定的访问后端服务器的权限,可以解决会话问题。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
3.2.5 fair(第三方)
根据后端服务器的响应时间分配请求,响应时间短的优先分配。此配置是为了更快地响应用户。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
3.2.6 url_hash(第三方)
根据访问的URL的哈希结果分发请求,使每个URL都定向到同一个后端服务器。如果后端服务器有缓存的话效率会更高。将哈希语句添加到上述流中。 hash_method是使用的哈希算法
upstream backend {
hash_method crc32;
hash $request_uri;
server localhost:8080;
server localhost:8081;
}
以上6种负载均衡适合不同的情况,可以单独使用,也可以混合使用。您可以根据实际情况决定使用它们。 Fair和url_hash必须安装第三方模块才能使用。
4 动静分离:
4.1 动静分离的概念:
动静分离是指将静态页面与动态页面或静态内容界面和动态内容界面针对不同的场景进行分离的架构设计方法。 Web 服务器架构中的访问系统。 ,从而提高整体服务访问效率和持久性。
4.2 动静分离示例:
upstream web_servers {
server localhost:8081;
server localhost:8082;
}
server {
listen 80;
server_name localhost;
set $doc_root /usr/local/var/www;
location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
root $doc_root/img;
}
location / {
proxy_pass http://web_servers;
proxy_set_header Host $host:$server_port;
}
error_page 500 502 503 504 /50x.html; #出现 500 502 503 504错误时走内部跳转
location = /50x.html {
root $doc_root;
}
}
结果:访问http://localhost/test.jpg时,直接返回/usr/local/var/www/img路径下的图片。
访问http://localhost /index.html会访问后端服务器(tomcat等)
5其他常用指令:
5.1.return指令
返回http状态码和可选第二个参数可以重定向 URL
return code [text];
return code URL;
return URL;
例如:
location / {
return 404; # 直接返回状态码
}
location / {
return 404 "pages not found"; # 返回状态码 + 一段文本
}
location / {
return 302 /bbs ; # 返回状态码 + 重定向地址
}
location / {
return https://www.baidu.com ; # 返回重定向地址
}
5.2 重写指令
Rewrite URI 重写请求,使用具有 1 个可选参数和 2 个必需参数的重写指令,在请求处理期间多次更改请求 URI。
第一个(必需)参数是请求 URI 必须匹配的正则表达式。
第二个参数是用于替换匹配URI的URI。
可选第三个参数重写策略
- last使用重写后的URL发起新的请求,重新进入服务器段并在该位置重试匹配;
- break直接使用重写后的URL,不再匹配其他位置的语句;
- redirect 返回临时 302 重定向;
- 永久返回301永久重定向;
location /users/ {
rewrite ^/users/(.*)$ /show?user=$1 break;
}
5.3 error_page 指令
error_page 指令允许您配置 NGINX 返回自定义页面和错误代码、替换响应中的其他错误代码或将浏览器重定向到不同的 URI。在以下示例中,error_page 指令指定返回 404 页面错误代码的页面 (/404.html)。 ?可以使用的内置变量以美元符号 $ 开头。在它们之间,客户端发送并传输大多数预定义变量的值。
- $args: # 该变量与请求行中的参数相同,与$query_string
- $content_length:请求头中的内容长度字段相同。
- $content_type:请求头中的Content-Type字段。
- $document_root:当前请求的根指令中指定的值。
- $host:请求行的主机名,如果为空则为 Host 请求头字段中的主机名,如果再次为空则为与请求匹配的 server_name
- $ http_user_agent:客户端代理信息
- $http_cookie:客户端cookie信息
- $limit_rate:该变量可以限制连接速度。
- $request_method:客户端请求的操作,通常是 GET 或 POST。
- $remote_addr:客户端IP地址。
- $remote_port:客户端端口。
- $remote_user:已通过认证基础模块认证的用户名。
- $request_filename:使用根或别名指令和请求 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”。
- $document_uri:与$uri相同
6 总结
Ngnix是一个高性能的反向代理服务器。这是非常有必要学习的。本文介绍了基本的 Ngnix 配置并介绍了反向代理和负载平衡。 、动静态分离的三个主要功能,最后扩展了一些常用的指令。