Назад | Перейти на главную страницу

NGINX обращается к файлам по неправильному пути

У меня есть приложение codeigniter со следующей структурой каталогов

<HOME>
  |_ <web>
  |    |_<API>
  |         |_index.php
  |_<admin>

У разработчиков есть index.html в каталогах, и. Файлы codeigniter и сервисы, развернутые разработчиками, находятся в каталогах. Разработчики получают доступ к службам, добавляя имя службы к домену следующим образом http: //mydomain/web/API/index.php/v1/GetRoles Имя хоста настраивается как переменная BASE PATH в файле javascript.

Это приложение обслуживается NGINX под управлением fast-cgi.

Хотя HTML-страницы загружаются, данные не загружаются. Поэтому мы попытались получить доступ к функциям, набрав URL-адрес в браузере (http: //mydomain/web/API/index.php/v1/GetRoles). Получаем ошибку 404 Not Found. Журналы ошибок содержат следующие записи

2016/05/20 16:14:57 [error] 2127#0: *232 FastCGI sent in stderr: "Unable to open primary script: /home/myname/public_html/domainname/public/projectname/index.php (No such file or directory)" while reading response header from upstream, client: 14.141.163.46, server: mydomain.com, request: "GET /web/API/v1/get/Common/GetActivities HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "mydomain.com"

Сервер должен искать index.php в /home/myname/public_html/domainname/public/projectname/web/API/index.php, а не искать его в WEB ROOT.

Моя конфигурация NGINX выглядит следующим образом

server {
    listen mydomain.com;
    server_name mydomain.com;
    root /home/myname/public_html/domainname/public/projectname; 

    keepalive_timeout 70;
    access_log /home/myname/public_html/domainname/log/access.log;
    error_log /home/myname/public_html/domainname/log/error.log;

    gzip_static on;

    index index.html index.php;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
          root /usr/share/nginx/www;
    }

# pass the PHP scripts to FastCGI server listening on the php-fpm socket
    location ~ \.php$ {
            #try_files $uri =404;
            #fastcgi_pass unix:/tmp/php5-fpm.sock;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_intercept_errors on;
    }
}

Я не могу понять, почему NGINX ищет index.php в WEB ROOT вместо того, чтобы загружать все, что мы вводим в URL. С нетерпением ждем ответа от всех, кто сталкивался с подобной проблемой.

Насколько я понимаю из вашего запроса, вы пытаетесь получить /web/API/v1/get/Common/GetActivities, который не является настоящей папкой. Вы могли бы сделать местоположение /web/API/v1/get/Common/GetActivities с корнем /home/myname/public_html/domainname/public/projectname/web/API или измените путь запроса на /web/API/index.php