您的位置:首页技术文章
文章详情页

新手用nginx,有几个问题问下大神们

【字号: 日期:2024-06-19 14:13:02浏览:28作者:猪猪

问题描述

此前看到慕课网是用nginx部署的静态资源,所以想自己尝试下用ngjinx部署我的资源。现在需要下面几个问题:

比如慕课网的这个链接:http://www.imooc.com/course/list ,它是怎么匹配url后的/course/list,我只能使用list.html,我想让每个连接都不会出现.html的后缀,这个是重写url吗,还是用location配置

2.新手用nginx,有几个问题问下大神们

上面的是一个location的配置,用来反向代理,它不应该可以匹配像/test/test.html,但是没有匹配到,所以没有转发到代理服务器,而是正常显示静态页面。

但是它可以匹配这样的:/products/getproducts/2,确实转发到了:localhost:8086/products/getproducts/2 ,得到正确的数据。

先问这两个吧,对服务器不是很懂,可能有点白痴,望解答呀

新手用nginx,有几个问题问下大神们

问题解答

回答1:

第一个问题:Nginx用try_files指令可以很方便地把请求数据导入到框架的前端控制器比如index.php里:

location { try_files $uri $uri/ /index.php?$args;}

前端控制器index.php可以用$_SERVER[’REQUEST_URI’]获取/course/list这串URL参数,如果后面还有参数,比如/course/list?page=2&tag=mysql,这时可以用$_SERVER[’QUERY_STRING’]获取查询串page=2&tag=mysql,然后自行urldecode后用explode以&分割串获得类似$_GET的参数数组,也可以直接使用$_GET拿到参数数组.

总而言之,就是由程序入口index.php及其里面的程序决定是加载HTML静态文件返回,还是连接数据库可进行处理.如果你想让Nginx判断是否命中HTML缓存,可以这样配置:

location / { try_files $uri $uri/ /html$uri.html /index.php?$args;}

比如访问/post/1024,Nginx会按try_files给定的顺序尝试访问以下文件:/post/1024 ($uri 表示文件)/post/1024/ ($uri/ 表示目录)/html/post/1024.html (/html$uri.html 表示你的HTML静态缓存)如果都不存在,则连同参数把URI信息交给index.php处理 (最后的/index.php?$args表达的就是这个意思).

回答2:

问题 1,可以使用rewrite方式,例如:

rewrite '^/(course/.*)/?' $1.html last;

需要注意的是只重写所有course 开头的请求xxx.com/course/list -> xxx.com/course/list.htmlxxx.com/course/list/sub -> xxx.com/course/list/sub.html

问题 2感觉应该还有其他的location 配置,如果方便把整个nginx配置贴出来