$host
与 $http_host
的比较
特性 | $host |
$http_host |
---|---|---|
来源 | - 有 Host 头部时:取 Host 头部中的主机名部分- 无 Host 头部时:取 Nginx 配置中的 server_name |
- 有 Host 头部时:取原始的 Host 头部内容- 无 Host 头部时:为空 |
包含端口号 | 不包含端口号,即使 Host 头部中有端口号也会被去除 |
包含端口号,如果 Host 头部中有端口号会保留 |
大小写处理 | 将主机名转换为小写 | 保留原始大小写格式 |
非法字符处理 | 过滤掉主机名中非法的字符 | 不做处理,保留原始内容 |
无 Host 头部时的值 |
使用配置中的 server_name |
为空 |
典型应用场景 | - 生成标准化的主机名 - 重定向、日志记录 - 防止主机名注入攻击 |
- 需要保留客户端提供的原始主机信息 - 后端服务需要完整的 Host 信息 |
安全性 | 更安全,适合默认使用 | 可能存在安全风险,需谨慎使用 |
proxy_pass
后面是否带斜杠 /
的区别
特性 | proxy_pass 带斜杠 / |
proxy_pass 不带斜杠 |
---|---|---|
配置示例 | proxy_pass http://backend/; |
proxy_pass http://backend; |
URI 重写行为 | 替换匹配的 location 路径 |
保留匹配的 location 路径 |
后端接收的 URI | backend_uri + 剩余请求路径 |
backend_uri + 原始请求路径 |
客户端请求示例 | http://yourserver/app/page1 |
http://yourserver/app/page1 |
后端接收的请求 | http://backend/page1 |
http://backend/app/page1 |
应用场景 | 后端不需要 location 前缀 |
后端需要完整的请求路径 |
注意事项 | proxy_pass URI 末尾需有 / |
proxy_pass URI 末尾不应有 / |
Nginx 一些其他配置
指令 | 作用 | 详细说明 | 示例用法 |
---|---|---|---|
proxy_set_header Range $http_range; |
将客户端的 Range 头部传递给后端服务器 |
- 支持断点续传和流媒体播放 - 默认情况下 Nginx 不会转发 Range 头部- 配置后可使后端处理部分内容请求(返回 206 Partial Content ) |
|
proxy_set_header If-Range $http_if_range; |
将客户端的 If-Range 头部传递给后端服务器 |
- 与 Range 头部配合,支持条件性的范围请求- 默认情况下 Nginx 不会转发 If-Range 头部- 配置后后端可正确处理条件性请求 |
|
proxy_redirect off; |
禁用 Nginx 对后端返回的重定向头部的自动修改 | - 默认情况下,Nginx 会重写后端返回的 Location 和 Refresh 头部- 配置此指令后,Nginx 将直接传递后端的重定向头部,不做修改 |
|
Comments NOTHING