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

Перенос Zend Framework 2 с apache на nginx

Я хочу переместить сайт, использующий Zend Framework 2, с Apache на Nginx. Проблема в том, что на сайте 6 модулей, и apache обрабатывает их с помощью псевдонимов, определенных в httpd-vhosts.conf,

#httpd-vhosts.conf
<VirtualHost _default_:443>
ServerName localhost:443

Alias /develop/cpanel "C:/webapps/develop/mil_catele_cp/public"
Alias /develop/docs/tech "C:/webapps/develop/mil_catele_tech_docs/public"
Alias /develop/docs "C:/webapps/develop/mil_catele_docs/public"
Alias /develop/auth "C:/webapps/develop/mil_catele_auth/public"
Alias /develop "C:/webapps/develop/mil_web_dicom_viewer/public" 

DocumentRoot "C:/webapps/mil_catele_homepage"
</VirtualHost>

в httpd.conf DocumentRoot установлен на C: / webapps. Сайты доступны, например, на localhost/develop/cpanel. Framework обрабатывает дальнейшую маршрутизацию.

В Nginx я смог сделать доступным только один сайт, указав root C:/webapps/develop/mil_catele_tech_docs/public; в серверном блоке. Это работает только потому, что модуль docs не зависит от авторизации, как другие, и сайт был на localhost/.

При следующей попытке:

root   C:/webapps;
location  /develop/auth {
    root   C:/webapps/develop/mil_catele_auth/public;
    try_files $uri $uri/ /develop/mil_catele_auth/public/index.php$is_args$args;
}

Теперь, когда я вхожу localhost/develop/cpanel он исправляет index.php, но не может найти никаких ресурсов (файлы css, js). Понятия не имею, почему ссылочные пути в запросах GET браузера изменены на https://localhost/css/bootstrap.css форма https://localhost/develop/auth/css/bootstrap.css как было на apache. Кажется, эта корневая директива не работает.

Nginx обрабатывает php с помощью fastCGI

location ~ \.(php|phtml)?$ {        
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param   APPLICATION_ENV  production;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Я гуглил целый день и ничего полезного не нашел. Может ли кто-нибудь помочь мне заставить эту конфигурацию работать как на Apache?

Вы не должны использовать root директива внутри location блоки.

Попробуй это:

location /develop/auth {
    alias C:/webapps/develop/mil_catele_auth/public;
    try_files $uri $uri/ /index.php$is_args$args;
}

В этой конфигурации URL-адреса работают следующим образом:

http://example.com/develop/auth/image.png -> C:/webapps/develop/mil_catele_auth/public/image.png

Если вы используете root вместо того alias, вы получите:

C:/webapps/develop/mil_catele_auth/public/develop/auth/image.png вместо.

А затем для несуществующего файла / каталога:

http://example.com/develop/auth/not-existing -> C:/webapps/develop/mil_catele_auth/public/index.php будет запущен.

Надеюсь, это сработает так, как вы хотите.