Nginx实例 try_file伪静态 - Link运维社区

Nginx实例 try_file伪静态

目录 [隐藏]

一.简介

try_file用于伪静态。

正常的静态文件是一个xx.html文件,他是真实存在于服务器某个文件夹中的。动态网页是从数据库里查询,返回给浏览器的,实际上并没有这个文件,另外路径也很长。

伪静态优点:
缩短URL路径,更美观
URL路径短,容易被SEO收录,搜索排名靠前
隐藏了真实的访问路径,更安全

伪静态缺点:
与原生的url比较在性能上,不如原生的url,简单的说伪静态就是在服务器上又进行了一层url解析,消耗服务器资源。当然了这点消耗与优点相比,我们还是可以接受的。

下面是博客园中的一篇博客,地址是xx.html,让人看起来是一个html文件

这个是微信的一个文章的地址,后面的参数是文章在数据库中的位置,还有一些其它信息

二.配置

server {
    listen       80;
    server_name   xxx.baidu.com;
    index index.html  index.php;
    root   /data/html;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
    }

}

try_files $uri $uri/ /index.php?$query_string

当访问http://www.baidu.com/3434.html 时,$uri就是3434.html,它会去本地的/data/html下面找3434.html。

如果没找到3434.html,就匹配$uri/,nginx会去/data/html找有没有这个目录。

如果还找不到就会匹配最后一个选项,/index.php?$query_string。发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求http://www.baidu.com/3434.php 这个请求会被后面的location ~ .php$ 来匹配,当php程序解析完后,再返回给浏览器。

而具体的 URI 及参数是在 REQUEST_URI 中传递给 FastCGI 和 PHP 程序的,因此不受 URI 变化的影响。

三.整体流程

你在百度搜索一篇文章,右键复制链接地址,粘贴到笔记上,会发现链接非常的长。
https://www.baidu.com/link.php?wd=&eqid=e307e4f6000029fa000000035b864c15

当点击后,这篇文章所在的服务器,会try_files $uri $uri/ /index.php?$query_string;,首先匹配是否是xx.html,明显不是,但也不是文件夹,那就交给fastcgi,转而交给php-fpn去操作。

php看到里面写的是去数据库查询一个id号为e307e4f6000029fa000000035b864c15的文章,就将文章提取后发给浏览器,并取名叫3434.html,这个只是显示,并不存在。

四.更多

交给反向代理

如果后端不是php而是反向代理则:

    location / {
        #直接匹配最后面的,不去寻找了
        try_files /_not_exists_ @backend;
    }

    location @backend {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host            $http_host;
        proxy_set_header   X-Forwarded-Proto $scheme;

        #后端程序地址
        proxy_pass http://127.0.0.1:8181;
    }

A机器没有的图片从B机器获得

server {

#访问图片文件,这里做解析
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
        root /img; #指定图片所在目录
        try_files $uri $uri/ @backend; #当图片不存在,会尝试交给@backend来获取图片
    }

    location @backend { #反向代理给图片服务器
        proxy_pass http://192.168.2.166; #图片服务器可以获取图片
    }

}

原网址: 访问
创建于: 2021-04-01 10:43:24
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论