需求:通过 example.com 访问 /var/data/www,但通过 example.com/pa 访问的却是 /var/data/phpmyadmin,即保护phpmyadmin不暴露在www目录下。
一、方法一:(不推荐)
简介:这是网上普遍采用的 Rewrite 方式。
缺陷:简单的php程序还能应付,复杂一点的程序就"No input file specified"
01.
server {
02.
listen 80;
03.
server_name example.com;
04.
05.
root /var/data/www;
06.
index index.html index.php;
07.
08.
location /pa {
09.
alias
/var/data/phpmyadmin;
10.
index index.html index.php;
11.
}
12.
13.
location ~ /pa/.+\.php$ {
14.
rewrite /pa/(.+\.php) /$1
break
;
15.
fastcgi_pass 127.0.0.1:9000;
16.
fastcgi_index index.php;
17.
fastcgi_param SCRIPT_FILENAME /var/data/phpmyadmin/$fastcgi_script_name;
18.
include fastcgi_params;
19.
}
20.
21.
location ~ .+\.php.*$ {
22.
fastcgi_pass 127.0.0.1:9000;
23.
fastcgi_index index.php;
24.
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
25.
fastcgi_param SCRIPT_FILENAME $request_filename;
26.
include fastcgi_params;
27.
}
28.
}
二、方法二:(推荐)
简介:完美实现,无副作用。
特点:使用了一个叫"$valid_fastcgi_script_name"的变量
01.
server {
02.
listen 80;
03.
server_name example.com;
04.
05.
root /var/data/www;
06.
index index.html index.php;
07.
08.
location /pa {
09.
alias
/var/data/phpmyadmin;
10.
index index.html index.php;
11.
}
12.
13.
location ~ /pa/.+\.php.*$ {
14.
if
($fastcgi_script_name ~ /pa/(.+\.php.*)$) {
15.
set
$valid_fastcgi_script_name $1;
16.
}
17.
fastcgi_pass 127.0.0.1:9000;
18.
fastcgi_index index.php;
19.
fastcgi_param SCRIPT_FILENAME /var/data/phpmyadmin/$valid_fastcgi_script_name;
20.
include fastcgi_params;
21.
}
22.
23.
location ~ .+\.php.*$ {
24.
fastcgi_pass 127.0.0.1:9000;
25.
fastcgi_index index.php;
26.
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
27.
fastcgi_param SCRIPT_FILENAME $request_filename;
28.
include fastcgi_params;
29.
}
30.
}
二、方法三:
简介:在 zhigang.net 上看到的创意方法,即一个站加两个server字段,然后通过反代的方式实现。
特定:方法有创意,稍微麻烦点。