比如 我的域名为 explame.com, nginx 里网站目录指向 public,nginx中默认文档已设为index.html
在public目录下有个 index.html
我想在直接访问 http://explame.com 时,能显示静态index.html里的内容,而不必再经由webman路由
upstream webman {
server 127.0.0.1:8788;
}
server
{
listen 80;
server_name ********;
index index.html;
root /www/wwwroot/ybtask/public;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
if (!-f $request_filename){
proxy_pass http://webman;
}
}
}
这样配置后,直接访问域名是反代到了 webman,只有使用 http://explame.com/index.html 才能正确访问到。
同理如果public下有个ucenter目录,而该目录下有个index.html,也是只有使用 http://explame.com/ucenter/index.html 才能访问到这个index.html。如果省略了该index.html 就走到了webman。
尝试过 try_files $uri @webman;
这样配置,也是一样。
目前状态:
访问 http://explame.com/ucenter/index.html ,没有反代到webman,正常显示 index.html里内容,没问题
访问 http://explame.com/api/getmyinfo ,正常反代到了 webman,也没问题
但如果 省略掉 index.html 去访问 http://explame.com/ucenter 那么就被反代到了 webman,虽然本意只是想显示 ucenter/index.html 这个文件
目的是想在访问 http://explame.com/ucenter 这类地址时,先让nginx判断下是否存 http://explame.com/ucenter/index.html 文件,如果存在,那么就直接显示这个文件,如果不存在,再反代到webman。
网站不应该指向public目录吧
应该是只配置静态文件走public就可以了。
不指向public,那应该如何指向?
指向应该没问题,现在的问题是:访问某个目录下的静态 index.html时,无法省略index.html,虽然已在nginx里将默认文档设为了index.html
比如访问 http://explame.com/ucenter/index.html ,一切正常,没有反代到webman
比如访问 http://explame.com/api/getmyinfo ,正常反代到 webman,也没问题
但如果 省略掉 index.html 去访问 http://explame.com/ucenter 那么就被反代到了 webman,虽然本意是想显示 ucenter/index.html 这个文件
其实就是说:在访问 http://explame.com/api/getmyinfo 时,想先让nginx判断下是否存 http://explame.com/api/getmyinfo/index.html 文件,如果存在,那么直接显示这个文件,如果不存在,再反代到webman,就是这个效果
不应该是这样,只有public目录下的文件才能被外部访问,除此之外,所有的url都是走路由?
你说的没错,但你没明白我的意思,我是想访问public中某个目录下的index.html文件时,能实现省略index.html的目录。
比如 public/abc/index.html 我是想 域名/abc 能实现和 域名/abc/index.html 一样的效果
nginx 配置里加一句
index index.html;
比如
已经加了的
如果去掉反代配置,没问题,是我想要的效果,但加上那个反代到webman配置后,就必须加index.html
我懂你的意思 就是静态文件nginx处理 ,动态请求转发webman 对吧
https://www.workerman.net/q/7922#answer_12312
你可以看一下这一篇文章
里面讲的很详细我写的
你设置非静态文件转发就可以了
不是。
那个能设置,是要实现nginx的默认文档功能,比如nginx里默认文档 index.html。
访问 /ucenter 时,先判断是否存在 /ucenter/index.html 这个文件,存在时就直接显示,不存在的话再反代。
目前是访问 /ucenter 时,直接就反代到了 webman,虽然存在 /ucenter/index.html
我知道直接 /ucenter/index.html 是可以的,只是有需求,想在url中省略 这个index.html
刚测试了,没问题的。只要目录里有index.html同时配置了index index.html,访问时加不加index.html都是先访问到index.html 。我是这么做的,假设静态目录的访问路径为abc.com/public/,我就只配置了
location /public/ {
root /yourSitePath/;
}
你说的对,如果有固定前缀就很好配置了
按照这样配置可以了。3q
=====
不想在访问时有public前缀。
其实这个就是想实现在 nginx+php-fpm时一样的效果:public下是静态文件,nginx里网站根目录指向public(访问时url不带有public)
public下有很多目录和html文件,各个目录下也有html文件,比如 index.html, ucenter,admin,doc,css,js等,在访问时,如果指向的是这些目录(如 /ucenter , /admin ),那么就直接显示这些目录下的 index.html。
在单纯nginx+php-fpm时,这些默认都是可以的,只是加了反代配置后,如果url没有精确匹配到 index.html 文件,就被反代了。
一直没搞明白怎么配置。
现在明白了,多谢 各位的回答
如果要那样在webman里应该是不行的,你那种想法其实就是fpm所有框架的单入口,路径逐个解析。但是在webman里默认就限制只有public目录可以被浏览器访问,虽然public也可以改名,意义不大。如果你有多个前缀,那就多配置几条规则就可以了。也不一定要是以public开头,只要root指向到webman里的public目录就可以了。比如/ucenter/=>/public/ucenter,/admin=>/public/admin,如此如此
明白了,3q。