以下是我的 nginx.conf ,它会随example.com
向/srv/phabricator/phabricator/webroot/index.php
提出请求。我想更改功能,以便在请求进入example.com/test
时提供/home/phragile/public/index.php
。
daemon off;
error_log stderr info;
worker_processes 1;
pid /run/nginx.pid;
events {
worker_connections 4096;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
client_max_body_size 200M;
client_body_buffer_size 200M;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket_pool {
ip_hash;
server 127.0.0.1:22280;
}
server {
listen *:80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /srv/phabricator/phabricator/webroot;
try_files $uri $uri/ /index.php;
location /.well-known/ {
root /srv/letsencrypt-webroot;
}
location / {
index index.php;
if ( !-f $request_filename )
{
rewrite ^/(.*)$ /index.php?__path__=/$1 last;
break;
}
}
location /index.php {
include /app/fastcgi.conf;
fastcgi_param PATH "/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin";
fastcgi_pass 127.0.0.1:9000;
}
location = /ws/ {
proxy_pass http://websocket_pool;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 999999999;
}
}
}
我尝试过以下操作但不起作用:
location /test {
root /home/phragile/public;
}
有人可以告诉我.conf文件中需要添加什么内容吗?
答案 0 :(得分:1)
在尝试将alias
映射到root
时,您需要使用/test
而不是/home/phragile/public
,后者不会以前者结束。有关详情,请参阅this document。您还需要在该位置执行PHP(请参阅location /index.php
块)。
您有一个非常具体的配置,旨在只执行一个PHP文件。 /test
的一般解决方案可能如下所示:
location ^~ /test {
alias /home/phragile/public;
if (!-e $request_filename) { rewrite ^ /test/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include /app/fastcgi.conf;
fastcgi_param PATH "/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin";
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
我已粘贴您现有的FastCGI指令(我认为这对您有用)并添加了SCRIPT_FILENAME
所需的值(假设您使用的是php_fpm
或类似的)。
当然,如果/test
下没有静态内容,您可以大大简化。