server_name
- 当出现多个
location
时,server_name 就有用了 - 注意域名即使配置了
www
跳转,server_name 还是要进行 server_name 配置- 不然,可能会无法访问/被rewrite到其他 location 中
优先级
相同 server_name
的虚拟主机(server
)优先级
- 看加载 nginx.conf 以及子配置谁先加载(一般看文件顺序)
url 匹配优先级
[=|~|
*|^~]` 上下文 server location | 匹配规则 | 含义 | | —- | —- | | = | 普通字符精确匹配 | | ~ | 正则匹配,区分大小写 | | ~* | 正则匹配,不区分大小写 | | ^~ | 普通字符前缀匹配 | | 不带符号 | |
优先级,从高到低
root 和 alias 区别
- 感谢 nginx的location、root、alias指令用法和区别
root
的处理结果是:root
路径+location
路径alias
的处理结果是:使用alias
路径替换location
路径
alias
是一个目录别名的定义,root
则是最上层目录的定义。
例子
root:
location /static/ {
root ./dist/;
}
如果一个请求的URI是 /static/a.js
时,将会返回服务器上的 /dist/static/a.js
的文件
alias实例:
location /static/ {
alias ./dist/;
}
如果一个请求的URI是 /static/a.js
时,将会返回服务器上的 /dist/a.js
的文件,会直接将 alias
后面的值替换 location
的值
注意点
- 使用
alias
时,目录名后面一定要加"/"
。
3.alias
在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
4.alias
只能位于location
块中。(root
可以不放在location
中)
如何获得真实 ip
问题
- 直接用 $
remote_addr
变量,如果前面经过代理ip,那么只会获得代理层的 ip x_referer_for
header 头,容易被篡改
解决
- 让 第一层代理 进行
set x_real_ip = $remote_addr
设置一个自定义 header 头,直接获取 remote_addr - 其他代理层 透传 即可