Nginx配置----root和alias的使用和区别

server
{ 
    listen 8889;
     server_name api.xxx.com;
    index index.html;
      location / {
      proxy_set_header X-Forward-For remote_addr;
        proxy_set_header X-real-ip remote_addr;
        proxy_pass   http://127.0.0.1:8887; // 反向代理
        root /home/gowork;
        index  index.html index.htm;
        }
        # 普通静态文件夹
        # 访问api.xxx.com/html 
        location /html {
        root  /home/gowork; # api.xxx.com/home/gowork/html 
        # alias /home/gowork/html/; # api.xxx.com/home/gowork/html 
          index   index.html index.htm;
        } 
    # 访问api.xxx.com/web web目录不存在 
      location /web {
         # root  /home/gowork; # 这种配置会报404
          alias /home/gowork/html/; # api.xxx.com/home/gowork/html
          index   index.html index.htm;
        } 
      #  location /aaa/bbb {
      #  root  /www/server/nginx/html;
      #    index   index.html index.htm;
      #    try_files uri uri/ /visits/index.html;
      #  } 
      # root /home/gowork;
    
 # 禁止访问的文件或目录
     location ~    ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
   {
      return 404;
   }

    access_log  /www/wwwlogs/api.xile.xya.log;
    error_log  /www/wwwlogs/api.xile.xya.error.log;
}

location /html {

​ root /home/gowork; # api.xxx.com/home/gowork/html

​ alias /home/gowork/html/; # api.xxx.com/home/gowork/html
​ index index.html index.htm;
​ }

之前访问api.xxx.com/html404,我疑惑的是root目录/home/gowork这下面有index.html,为啥还访问不到,现在知道了location后面的路径,root是必须要有的,于是在/home/gowork创建html目录,创建index.htnl文件访问正常!

1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
3)使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/"符号!!
4)alias虚拟目录配置中,location匹配的path目录如果后面不带"/",那么访问的url地址中这个path目录后面加不加"/"不影响访问,访问时它会自动加上"/";

但是如果location匹配的path目录后面加上"/",那么访问的url地址中这个path目录必须要加上"/",访问时它不会自动加上"/"。如果不加上"/",访问就会失败!

5)root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问。

Last modification:June 22nd, 2020 at 03:13 pm