前言

alias 与 rootopen in new window 有相似的用法,主要是介绍他们之间的区别。

其实在了解这个的时候,突然就想起 ”Linux 中一切皆文件“ 的概念(可能有些牵强),alias(root)的作用即将 URL 映射为文件路径,然后返回对应的静态文件。

待如今了解到 $request_filename 后发现与想法一致。

alias和root的区别

location /request_path/image/ {
    root /local_path/image/;
}

#当我们访问 http://xxx.com/request_path/image/cat.png时
#将访问 http://xxx.com/request_path/image/local_path/image/cat.png 下的文件

location /request_path/image/ {
    alias /local_path/image/;
}

#当我们访问 http://xxx.com/request_path/image/cat.png时
#将访问 http://xxx.com/local_path/image/cat.png 下的文件

区别

此中区别与 proxy_pass 相似。

directivesdifference
root将完整的 url 映射到文件路径。
alias将 location 后的 url 映射到文件路径。
server {
  listen       8083;
  server_name localhost;

  location /root {
    root /usr/share/nginx/html;
  }

  location /alias {
    alias /usr/share/nginx/html;
  }
  
  location /root/dir/ {
    root /usr/share/nginx/html;
  }

  location /alias/dir/ {
    alias /usr/share/nginx/html;
  }
  
  location ~* /root(\d+\.txt) {
      root /usr/share/nginx/html/$1;
  }
  location ~* /alias(\d+\.txt) {
      alias /usr/share/nginx/html/$1;
  }
}
curl($request)$request_filename
/root/usr/share/nginx/html/root
/root/index.htmlusr/share/nginx/html/root/index.html
/alias/usr/share/nginx/html
/alias/index.html/usr/share/nginx/html/index.html
/root/dir//usr/share/nginx/html/root/dir/
/root/dir/index.html/usr/share/nginx/html/root/dir/index.html
/alias/dir//usr/share/nginx/html
/alias/dir/index.html/usr/share/nginx/htmlindex.html
/root/123456.txt/usr/share/nginx/html/root/123456.txt
/alias/123456.txt/usr/share/nginx/html/123456.txt
/alias123456.txt/usr<br/>/share/nginx/html/123456.txt

当使用 aliaslocation/ 结尾时需注意 / 被废弃,与 proxy_pass 中情况一致。

用户真实IP

当一个请求通过多个代理服务器时,用户的IP将会被代理服务器IP覆盖

#在第一个代理服务器中设置
    set x_real_ip=$remote_addr
#最后一个代理服务器中获取
    $x_real_ip=IP1