Для меня определяют задачу с администрированием веб-приложения, которое имеет базовый каталог с набором унаследованного кода в нем, и подкаталог моего собственного создания с MVC основывал API, который мы используем для медленной миграции фронтэнда в модель SPA. Владелец получил дикого зайца его задница и постановил, чтобы мы переместились в nginx.
У меня есть обширный опыт в Apache, переписывает, и мне потребовались бы приблизительно девять секунд для установки этого в Apache. Однако, поскольку люди быстры для указания, nginx не является Apache. В то время как я могу получить любой раздел рвения самостоятельно в nginx, я не могу заставить API играть по правилам с главным приложением, когда это находится в своем/api/каталоге.
Я предполагаю, что это будет некоторая перестановка директивы местоположения, которая, кажется, ведет себя так же к в Apache. В основном, если что-нибудь поражает/api/каталог, я должен передать остаток от uri к/api/public/index.php с переписыванием:
^/(.*)$ public/index.php?_url=/$1;
Любая справка значительно ценится.
Существующая конфигурация:
server {
listen 10.1.1.225:443 ssl;
server_name dev.domain.com;
ssl_certificate /etc/nginx/conf.d/chain.crt;
ssl_certificate_key /etc/nginx/conf.d/4096_SSL.key;
set $root_path '/usr/share/nginx/www';
root $root_path/trunk;
index index.php index.html;
fastcgi_param ENV development;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_read_timeout 180;
location / {
try_files $uri $uri/ =404;
}
location ^~ /api {
rewrite ^/(.*)$ public/index.php?_url=/$1;
}
fastcgi_intercept_errors off;
location ~ \.php {
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Эта конфигурация ужасна, потому что я играл со всем этим день, но это должно понять через.
Вы правы, что nginx не apache, а это значит, что большинство мест, где вы можете подумать об использовании переписывания, неуместны. Вместо этого вам следует попробовать использовать try_files
. Например:
location /api/ {
try_files $uri /api/public/index.php?_url=$request_uri;
}
Для других, ищущих эту замену:
location ^~ /api {
rewrite ^/(.*)$ public/index.php?_url=/$1;
}
на
rewrite ^/api(/.*)$ /api/public/index.php?_url=$1 last;