Nginx配置404的坑记

NGINX IT敢客 1个月前 (07-10) 234次浏览 已收录 0个评论 扫描二维码

今天在配置一个 nginx 配置文件 conf 的时候,出现了奇怪的现象,怎么访问都是 404;下面是配置文件内容

location /games {
    root /home/game/static-resource/game/;
    index index.html;
    if (!-e $request_filename) {
    rewrite (.*) /index.html break;
    }
}

而路径/home/game/static-resource/game/下面还有 123.html,我在域名 www.xxx.com/games/123.html 访问的时候是还是跳转到 Index.html 页面上,去掉 if 块内容,结果发现所有的访问都是 404 了。后来发现原来是 root 和 alias 有巨大的区别导致的!

nginx 是通过 alias 设置虚拟目录,在 nginx 的配置中,alias 目录和 root 目录是有区别的:
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 目录后面带不带”/”,都不会影响访问。

举例说明(比如 nginx 配置的域名是 www.wangshibo.com):
(1)

location /huan/ {
      alias /home/www/huan/;
}

在上面 alias 虚拟目录配置下,访问 http://www.wangshibo.com/huan/a.html 实际指定的是/home/www/huan/a.html。
注意:alias 指定的目录后面必须要加上”/”,即/home/www/huan/不能改成/home/www/huan

上面的配置也可以改成 root 目录配置,如下,这样 nginx 就会去/home/www/huan 下寻找 http://www.wangshibo.com/huan 的访问资源,两者配置后的访问效果是一样的!

location /huan/ {
       root /home/www/;
}

(2)
上面的例子中 alias 设置的目录名和 location 匹配访问的 path 目录名一致,这样可以直接改成 root 目录配置;那要是不一致呢?
再看一例:

location /web/ {
      alias /home/www/html/;
}

访问 http://www.wangshibo.com/web 的时候就会去/home/www/html/下寻找访问资源。
这样的话,还不能直接改成 root 目录配置。
如果非要改成 root 目录配置,就只能在/home/www 下将 html->web(做软连接,即快捷方式),如下:

location /web/ {
     root /home/www/;
}

# ln -s /home/www/web /home/www/html       //即保持/home/www/web 和/home/www/html 内容一直

所以,一般情况下,在 nginx 配置中的良好习惯是:
1)在 location /中配置 root 目录;
2)在 location /path 中配置 alias 虚拟目录。

如下一例:

server {
          listen 80;
          server_name www.wangshibo.com;
          index index.html index.php index.htm;
          access_log /usr/local/nginx/logs/image.log;
    location / {
        root /var/www/html;
        }
   location /haha {                                          //匹配的 path 目录 haha 不需要真实存在 alias 指定的目录中
       alias /var/www/html/ops/;                       //后面的"/"符号一定要带上
       rewrite ^/opp/hen.php(.*)$ /opp/hen.php?s=$1 last;
    # rewrite ^/opp/(.*)$ /opp/hen.php?s=$1 last;
       }
   location /wang {                    //匹配的 path 目录 wang 一定要真实存在 root 指定的目录中(就/var/www/html 下一定要有 wang 目录存在)
      root /var/www/html;
     }
 }

IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Nginx 配置 404 的坑记
喜欢 (4)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址