配置nginx之后,访问不了首页,其他页面能访问的问题

2,084 阅读2分钟

前言

前阵子学习了一下nginx,然后准备自己实践一下,结果发现自己配置完之后,访问不了首页,但是访问其他页面没有任何的问题,搞了好久始终不知道为什么,最后还是找别人帮忙解决的,先贴上nginx的配置

主要内容

这是一开始的错误配置

server {
        listen 80;
        server_name example.com;

        location = / {
                root /home/projects/temporary;
                index index.html;
        }


        location /test {
                alias /home/projects/temporary/test;
        }

        location /test2 {
                alias /home/projects/temporary;
        }


        location ~* .*\.(png|html|js|css|jpg)$ {
                root /home/projects/temporary/static;
        }
}

分析造成访问不了index.html的主要原因: 造成这个问题主要是我以为精准配置是配置/,然后/下面指定的index.html也能访问到,但是精准匹配只是匹配/这个路径,实际请求的/index.html是访问不到,匹配不了的(好吧,其实这并不是原因,是我没有完全理解)
解决方法:
方法1.如果还想使用精准匹配,其实就是得明白其原理,比如我这里精准匹配/,最后落到的uri是index.html,然后index.html会回去匹配正则,但是正则下面的static目录下面我并没有创建index.html这个页面,所以会报错404,这个时候可以加一个匹配前准的规则

location ^~ /index.html  {
        root /home/projects/temporary;
}

因为他的优先级比正则的高,然后index.html在下面的/home/projects/temporary,这样页面就可以正确显示了

方法2.把精准匹配的参数去掉,同时把正则匹配里面的html去掉,因为标准url(即没有带有参数的匹配)优先级是最低的,如果没有把正则里面的html去掉,就会先匹配到这个规则,然后因为index.html不在/home/projects/temporary/static目录里面,所以访问mydomain.com/index.html也访问不到会报错

写在最后

最后附上我的配置,其实关键还是得明白其中的原理,这样解决问题才能快速高效,游刃有余

server {
        listen 80;
        server_name example.com;

        location = / {
                root /home/projects/temporary;
                index index.html;
        }

        location ~* .*\.(png|js|css|jpg|html) {
                root /home/projects/temporary/static;
        }

        location ^~ /index.html  {
                root /home/projects/temporary;
        }
}