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

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

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

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

2.

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

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

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


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

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

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

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


第一个问题:
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表达的就是这个意思).

【热门文章】
【热门文章】