Nginx配置偽靜態


一.簡介

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; #圖片服務器可以獲取圖片
	}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM