我正在尝试配置我的 nGinx 服务器(在 Debian Wheezy 盒子上)来为我的小型 PHP 应用程序提供服务。我在路由方面遇到了问题。
我需要什么:
/ - 不允许使用 PHP,只能使用 .html 文件
/api-所有内容都转到/api/index.php,包括/api/method1、/api/method2 等。
就这样。
我现在有什么:
server {
listen 3000;
root /home/my_user/php/my_app;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
try_files /index.html =404;
}
location /api {
try_files /index.php =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
有效的方法:
/ 给我/home/my_user/php/my_app/index.html,没问题。
/api 给出 404,这不对(它应该转到 /api/index.php 文件)。/api/foo 也是如此。(是的,文件 /api/index.php 存在,并且每个人都可以读取,就像 api/ 子目录一样。)
/api/index.php 给了我 404(但是是另一个,我不确定发生了什么)。
根据我找到的 nginx/php 教程,一切都应该没问题。但事实并非如此。
我应该如何配置我的 nginx?
答案1
您的配置可以简化。
server {
listen 3000;
root /home/my_user/php/my_app;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location /api/ {
try_files /api/index.php =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}
首先,仅提供静态文件是默认的 nginx 行为,不需要为其设置一些特殊的块。index
指令足以让 nginx 搜索index.html
。
要将任何请求映射到/api/something
,/api/index.php
您应使用完整路径作为try_files
从root
指令到文件的构造路径。此外,fastcgi 指令也应位于此位置,因为如果try_files
找到文件,则会在当前上下文(即 内)中对其进行处理location /api/
。
没有必要location ~ .*\.php$
,因为“不允许使用 PHP”。