2016-03-14 3 views
1

У меня есть сервер LEMP, и я ищу установить RespondCMS (http://respondcms.com/documentation/install-on-digital-ocean). Я столкнулся с некоторыми трудностями в разделе mod_rewrite для API. Я пробовал несколько итераций, но не смог заставить его показать сообщение «Работы API», которое указывает, что приложение PHP работает. Я получаю 404. До сих пор я установил следующую настройку в моем/etc/nginx/sites-enabled /. Я думаю, что он не имеет доступа к папке/api правильно. Приветствуется любая помощь в понимании того, как все это взаимодействует и как ее заставить работать.Директивы сервера NGINX для доступа к API

app.domain.com 
server { 
    listen 80; 
    server_name app.domain.com; 

    root /srv/www/domain_app/app; 
    index index.php index.html index.htm; 

    access_log /var/log/nginx/respond.access.log; 
    error_log /var/log/nginx/respond.error.log; 


    location /api/ { 
      try_files $uri $uri/ /api/dispatch.php$args; 
    } 

    location/{ 
      try_files $uri $uri/ =404; 

    } 

    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
      root /srv/www; 
    } 

    location ~ \.php$ { 
      try_files $uri =404; 
      include fastcgi_params; 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 

} 





domain.com 
server { 
    listen 80 default_server; 

    root /srv/www/html; 
    index index.php index.html index.htm; 

    server_name domain.com; 

    location/{ 
      try_files $uri $uri/ =404; 
    } 

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

    location ~ \.php$ { 
      try_files $uri =404; 
      fastcgi_split_path_info ^(.+\.php)(/.+)$; 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
      fastcgi_index index.php; 
      include fastcgi_params; 
    } 

} 
+0

Каков путь к 'dispatch.php'? –

+0

Это /srv/www/domain_app/app/api/dispatch.php – daki

ответ

0

URL-адрес http://app.domain.com/api/dispatch.php обрабатывается location ~ \.(hh|php)$ блока. И этот блок, кажется, настроен (разумно) правильно.

Вы должны переместить include fastcgi_params; над любой директивой fastcgi_param, чтобы избежать непреднамеренного переопределения последнего. А директива fastcgi_index является избыточной в этом контексте.

У блоков location / и location /api/ есть проблемы. Директива alias не является необходимой и неправильной. Все три местоположения наследуют их root от внешнего блока server. Вы должны удалить как директивы alias.

В заявлении try_files $uri $uri/ $uri.php /api/dispatch.php$args; элемент $uri.php приведет к загрузке файла PHP, а не его выполнению. Только последний элемент директивы try_files может принять действие, которое не обрабатывается в одном и том же блоке местоположения. Если вам действительно нужно выполнять URI с расширением PHP без ограничений и иметь URI по умолчанию, вы, вероятно, должны будете использовать именованное местоположение.

Полезный ресурс для всех директив nginx - here.

+0

Спасибо за помощь Ричарда. Я обновил свой конфиг с вашими предложениями, но все равно не кубиками. Я удалил $ uri.php (хотя я бы хотел, чтобы URI без расширения), чтобы увидеть, изменилось ли это. Проверка моего журнала ошибок Я получаю это: * 1 FastCGI, отправленный в stderr: '" Сообщение PHP: ошибка PHP-анализа: синтаксическая ошибка, неожиданный «DEFAULT_LANGUAGE» (T_STRING) 'в /srv/www/domain_app/app/setup.php on line 21" . – daki

+0

Я исправил ошибку PHP. У меня была небольшая ошибка, когда я переустановил установку LEMP. – daki

+0

Теперь он работает: D! Это было связано с ошибками PHP, а не с NGINX. Так восторженно, большое спасибо за все. – daki