将 Zend Framework 2 从 apache 迁移到 nginx

将 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;在服务器块中指定来仅使一个站点可用。它之所以有效,只是因为 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 请求中的引用路径会更改为apache 上的https://localhost/css/bootstrap.css形式https://localhost/develop/auth/css/bootstrap.css。这个 root 指令似乎不起作用。

Nginx 使用 fastCGI 处理 php

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;
}

我整天都在 Google 上搜索,没有找到任何有用的东西。有人能帮我让这个配置像在 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将会运行。

希望它能按照您希望的方式运行。

相关内容