![我应该如何配置 nGinx 来提供一个简单的 PHP 应用程序(路由问题)?](https://linux22.com/image/631838/%E6%88%91%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20nGinx%20%E6%9D%A5%E6%8F%90%E4%BE%9B%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%20PHP%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%88%E8%B7%AF%E7%94%B1%E9%97%AE%E9%A2%98%EF%BC%89%EF%BC%9F.png)
我正在尝试配置我的 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”。