我想将使用 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
将会运行。
希望它能按照您希望的方式运行。