Nginx 中的模块分为:
upstream
为 Nginx 内置模块,用于定义上游服务器(指的是后台提供的应用服务器)的相关信息。
# 语法upstream <name> {...}# 示例upstream back_end_server {server 192.168.100.33:8081;}
在 upstream
内可使用的指令:
指令 | 说明 |
---|---|
server | 定义上游服务器地址 |
zone | 定义共享内存,用于跨 worker 子进程 |
keepalive | 对上游服务启用长连接 |
keepalive_requests | 一个长连接最多请求 HTTP 的个数 |
keepalive_timeout | 空闲情形下,一个长连接的超时时长 |
hash | 哈希负载均衡算法 |
ip_hash | 依据 IP 进行哈希计算的负载均衡算法 |
least_conn | 最少连接数负载均衡算法 |
least_time | 最短响应时间负载均衡算法 |
random | 随机负载均衡算法 |
定义上游服务器
# 语法srver <address> [parameters]
parameters
可选值:
weight=number
权重值,默认为 1max_conns=number
上游服务器的最大并发连接数fail_timeout=time
服务器不可用的判定时间max_fails=numer
服务器不可用的检查次数backup
备份服务器,仅当其他服务器都不可用时才会启用down
标记服务器长期不可用,离线维护用于配制代理服务器
可用上下文:location
、if
、limit_except
# 语法proxy_pass <URL># 示例proxy_pass http://127.0.0.1:8081;proxy_pass http://127.0.0.1/proxy
URL
参数原则:
URL
必须以 http
或 https
开头URL
中可以携带变量URL
中是否带 URI
,会直接影响发往上游请求的 URL
接下来我们看看两种常见的 URL
用法:
proxy_pass http://192.168.100.33:8001
proxy_pass http://192.168.100.33:8001/
这两种用法的区别就是带 /
和不带 /
,在配置代理时它们的区别可大了:
/
意味着 Nginx 不会修改用户 URL
,而是直接透传给上游的应用服务器/
意味着 Nginx 会修改用户 URL
,修改方案是将 location
后的 URL
从用户 URL
中删除不带 /
的用法:
location /bbs/ {proxy_pass http://127.0.0.1:8080;}
分析:
URL
:/bbs/abc/test.html
URL
:/bbs/abc/test.html
URL
:/bbs/abc/test.html
带 /
的用法:
location /bbs/ {proxy_pass http://127.0.0.1:8080;}
分析:
URL
:/bbs/abc/test.html
URL
:/bbs/abc/test.html
URL
:/abc/test.html
并没有接上 /bbs
,这点和 root
与 alias
之间的区别是保持一致的。