Перемещение 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
, Каркас обрабатывает дальнейшую маршрутизацию.
В Nginx мне удалось сделать доступным только один сайт, указав root C:/webapps/develop/mil_catele_tech_docs/public;
в блоке сервера. Это работает только потому, что модуль документации не зависит от аутентификации, как другие, и сайт был в 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 Browswer изменены на 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?
1 ответ
Вы не должны использовать 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
будет работать
Надеюсь, это работает так, как вы хотите, чтобы это работало.