我正在尝试设置一个全栈Nginx反向代理服务器(显然标题是这样),而且在使用PHP-FPM进行代码解释时我有点挣扎。
以下是代理流程的所谓前端部分(不是用于直接提供文件,而是将客户端重定向到后端服务器):
server {
listen xxx.xxx.xxx.xxx:80;
server_name localhost;
# logs...
# Here begins the reverse-proxying
# Test 2nd backend server
location /test {
proxy_pass http://127.0.0.1:82/;
}
# default main site (has to be at the end since location checks file hierarchy)
location / {
proxy_pass http://127.0.0.1:81/;
}
然后,这是我的两个反向服务器块。 第一个是主站点,默认情况下应通过访问domain.com来提供服务:
server {
listen 127.0.0.1:81;
server_name main;
# logs...
root /var/www/main;
gzip on;
gzip_types "*";
expires 10m;
location / {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm.socket;
include /etc/nginx/fastcgi.conf;
}
}
这是第二次"测试"一,尝试domain.com/test时应该访问:
server {
listen 127.0.0.1:82;
server_name test;
root /var/www/test;
gzip on;
gzip_types "*";
expires 10m;
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm.socket;
include /etc/nginx/fastcgi.conf;
}
}
使用反向代理这样做可以让我实际上只使用一个端口,最重要的是,它隐藏了实际运行的虚拟服务器的数量和数量。
那么,问题是什么? 好吧,它更多的是关于如何通过nginx反向代理管理PHP和索引而不是反向代理本身。
当我在81和82服务器中使用index.html文件时,它工作正常,索引指令工作正常,服务器在访问域时返回/var/www/main/index.html访问domain.com/test时.com和/var/www/test/index.html。
但是,当我使用index.php文件时会出现问题。在这种情况下,只使用那里的URL,在这两种情况下都会留下404错误。我需要在URL中明确指定index.php,例如。 domain.com/test/index.php使其成功,我不想这样做。
我还没有找到任何处理这种特定情况的线程或文档,这就是为什么我来这里询问是否有人对PHP的索引行为有更多的信息?
感谢您提前回答,我很乐意接受您现有的任何事情,因为我已经在这个问题上挣扎了很长时间。
答案 0 :(得分:0)
您需要将其设置为默认加载index.php文件:
location / {
index index.php index.html index.htm;
// ...other configurations
}