[英]NGINX configuration for static and PHP files
我正在嘗試配置nginx來提供靜態和PHP文件。 我的配置不起作用。 我想要以下本地文件夾結構:
src/static/ -> contains HTML, CSS, JS, images etc
src/api/ -> contains PHP files for a small REST service
如果我訪問http://mysite.local,我希望從/ static文件夾中提供文件。 如果我訪問http://mysite.local/api我想要提供API PHP文件。 我希望重寫api的請求並將其發送到index.php文件。
一些例子:
http://mysite.local/test.html -> served from src/static/test.html
http://mysite.local/images/something.png -> served from src/static/images/something.png
http://mysite.local/css/style.css -> served from src/static/css/style.css
http://mysite.local/api/users -> served from src/api/index.php?users
http://mysite.local/api/users/bob -> served from src/api/index.php?users/bob
http://mysite.local/api/biscuits/chocolate/10 -> served from src/api/index.php?biscuits/chocolate/10
以下配置適用於靜態文件,但不適用於api文件。 如果我訪問其中一個API路徑,我會收到404錯誤。
server {
listen 80;
server_name mysite.local;
access_log /var/log/nginx/mysite.access.log main;
error_log /var/log/nginx/mysite.error.log debug;
location / {
index index.html;
root /var/www/mysite/src/static;
try_files $uri $uri/ =404;
}
location /api {
index index.php;
root /var/www/mysite/src/api;
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
最初的問題是location /api
塊中的root
指令,該指令不應包含位置組件,因為它作為URI的一部分附加,因此:
location /api {
root /var/www/mysite/src;
...
}
當提供URI /api/index.php
時,將生成/var/www/mysite/src/api/index.php
的本地路徑。 請參閱此文檔了解詳細信息
try_files
規則不會像您在示例中指定的那樣重寫URI。 如果您確實需要將URI的最終路徑顯示為/api/index.php
的查詢字符串,則需要使用rewrite
。
最簡單的解決方案(如果您不需要從該位置提供靜態內容)是將try_files
替換為:
location /api {
...
rewrite ^/api/(.*)$ /api/index.php?$1 last;
location ~ \.php$ { ... }
}
否則,請使用命名位置:
location /api {
...
try_files $uri $uri/ @rewrite;
location ~ \.php$ { ... }
}
location @rewrite {
rewrite ^/api/(.*)$ /api/index.php?$1 last;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.