日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

nginx配置pathinfo支持,最佳方案

發(fā)布時(shí)間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 nginx配置pathinfo支持,最佳方案 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

〇. 前言

pathinfo有兩個(gè),1 pathinfo()函數(shù),2 $_SERVER['PATH_INFO']。
pathinfo()是php的庫函數(shù),原生支持不需要nginx配置,$_SERVER['PATH_INFO']才需要nginx的特殊配置。
為什么要配置pathinfo,因?yàn)門hinkPHP/CodeIgniter/Yii等MVC框架都需要$_SERVER['PATH_INFO']。

一. 配置pathinfo支持之前,先讓nginx支持PHP

這里有個(gè)缺陷,就是得到的SCRIPT_NAME不準(zhǔn)確。

二. 開始配置 pathinfo

這是傳統(tǒng)的nginx - pathinfo 解決方案

三. 尋找最佳方案的途中

因?yàn)榕渲梦募锩鍼ATH_INFO 跟 SCRIPT_NAME 都是使用了 $fastcgi_script_name,所以strace追蹤nginx進(jìn)程發(fā)現(xiàn)兩者一樣是正常的。可是從瀏覽器請(qǐng)求的效果看到PATH_INFO跟SCRIPT_NAME卻不一樣,雖然從最終結(jié)果看,它符合我們的要求,可是不合理呀。
我猜想,是php-fpm或者說fastcgi對(duì)此做了一些容錯(cuò)處理。

四. 最佳方案

五. rewrite 隱藏index.php

另外,現(xiàn)在nginx官方推薦使用try_files取代rewrite,不過try_files好像不支持正則,有興趣的童鞋自行研究哈。給出一個(gè)例子,如下

六. 附件

1) 上面用到的配置文件的合集

 1 server {
 2     listen 80;
 3     server_name test;
 4     charset utf-8;
 5 
 6     index index.html index.htm index.php;
 7     root  /var/www/test;
 8 
 9     # rewrite 隱藏index.php
10     location / {
11         if (!-e $request_filename){
12             rewrite ^/(.*)$ /index.php/$1 last;
13             break;
14         }
15     }
16 
17     # 傳統(tǒng)方案
18     #location ~ .php {
19     #    set $real_script_name $path_info;
20     #
21     #    if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
22     #        set $real_script_name $1;
23     #        set $path_info $2;
24     #    }
25     #
26     #    include fastcgi_params;
27     #    fastcgi_param  SCRIPT_FILENAME $document_root$real_script_name;
28     #    fastcgi_param  PATH_INFO $path_info;
29     #    fastcgi_param  SCRIPT_NAME $real_script_name;
30     #    
31     #    fastcgi_pass 127.0.0.1:9000;
32     #}
33 
34     # 尋找最佳方案的途中
35     #location ~ .php {
36     #    include fastcgi.conf;
37     #    fastcgi_param  PATH_INFO $fastcgi_script_name;
38     #
39     #    fastcgi_pass 127.0.0.1:9000;
40     #}
41 
42     # 最佳方案
43     location ~ .php {
44         fastcgi_split_path_info ^(.+.php)(/.+)$;
45 
46         include fastcgi.conf;
47         fastcgi_param  PATH_INFO          $fastcgi_path_info;
48 
49         fastcgi_pass   127.0.0.1:9000;
50     }
51 
52 }

2) fastcgi.conf 的中文注釋

 1 fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; #腳本文件請(qǐng)求的路徑
 2 fastcgi_param  QUERY_STRING       $query_string;                      #請(qǐng)求的參數(shù);如?app=123
 3 fastcgi_param  REQUEST_METHOD     $request_method;                    #請(qǐng)求的動(dòng)作(GET,POST)
 4 fastcgi_param  CONTENT_TYPE       $content_type;                      #請(qǐng)求頭中的Content-Type字段
 5 fastcgi_param  CONTENT_LENGTH     $content_length;                    #請(qǐng)求頭中的Content-length字段。
 6 
 7 fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; #腳本名稱 
 8 fastcgi_param  REQUEST_URI        $request_uri;         #請(qǐng)求的地址
 9 fastcgi_param  DOCUMENT_URI       $document_uri;        #與$uri相同。 
10 fastcgi_param  DOCUMENT_ROOT      $document_root;       #網(wǎng)站的根目錄。在server配置中root指令中指定的值 
11 fastcgi_param  SERVER_PROTOCOL    $server_protocol;     #請(qǐng)求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。  
12 
13 fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;              #cgi 版本
14 fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version; #nginx 版本號(hào),可修改、隱藏
15 
16 fastcgi_param  REMOTE_ADDR        $remote_addr; #客戶端IP
17 fastcgi_param  REMOTE_PORT        $remote_port; #客戶端端口
18 fastcgi_param  SERVER_ADDR        $server_addr; #服務(wù)器IP地址
19 fastcgi_param  SERVER_PORT        $server_port; #服務(wù)器端口
20 fastcgi_param  SERVER_NAME        $server_name; #服務(wù)器名,域名在server配置中指定的server_name
21 
22 # PHP only, required if PHP was built with --enable-force-cgi-redirect
23 fastcgi_param  REDIRECT_STATUS    200;
24 
25 在php可打印出上面的服務(wù)環(huán)境變量
26 如:echo $_SERVER['REMOTE_ADDR']

3)nginx 的uri、request_uri 區(qū)別

$request_uri: /stat.php/qw/cv?id=1585378&web_id=1585378
$uri /stat.php/qw/cv
$document_uri: /stat.php/qw/cv

3) 檢驗(yàn)REQUEST_URI /DOCUMENT_URI /PHP_SELF /PATH_INFO

echo 'REQUEST_URI - '.$_SERVER['REQUEST_URI'];
echo '<br />DOCUMENT_URI - '.$_SERVER['DOCUMENT_URI'];
echo '<br />SCRIPT_NAME - '.$_SERVER['SCRIPT_NAME'];
echo '<br />PHP_SELF - '.$_SERVER['PHP_SELF'];
echo '<br />PATH_INFO - '.$_SERVER['PATH_INFO'];

同時(shí)strace 追蹤nginx進(jìn)程

總結(jié)

以上是生活随笔為你收集整理的nginx配置pathinfo支持,最佳方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。