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_forheader 头,容易被篡改
解决
- 让 第一层代理 进行
set x_real_ip = $remote_addr设置一个自定义 header 头,直接获取 remote_addr - 其他代理层 透传 即可
