搜索

首页  >  问答  >  正文

新手用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 ,得到正确的数据。

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

为情所困为情所困2749 天前573

全部回复(2)我来回复

  • 大家讲道理

    大家讲道理2017-05-16 17:25:54

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

    回复
    0
  • 習慣沉默

    習慣沉默2017-05-16 17:25:54

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

    rewrite "^/(course/.*)/?"   .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配置贴出来

    回复
    0
  • 取消回复