我对 nginx 世界还比较陌生,现在我有一个非常复杂的问题(从我的角度来看)。这是我的情况。我开发了一个 Web 应用程序(基于 backbone.js 的单页应用程序),对于内容页面(印记和那些东西),我使用 Wordpress。我想要实现以下结果:
如果用户访问我的网站 (example.com),则应用程序的 index.html 应包含所有 JavaScript 内容。如果用户点击页脚中的链接(例如 example.com/imprint),则应加载 Wordpress 的内容页面。
我通过我的主域 example.com 访问应用程序,但是所有应该从 Wordpress 提供的子页面都显示“找不到文件”,并且 nginx.log 告诉我:
2013/09/26 23:08:03 [错误] 31223#0:*86944 FastCGI 在 stderr 中发送:“主要脚本未知”,同时从上游读取响应标头,客户端:91.114.231.224,服务器:www.example.at,请求:“GET /trainer/HTTP/1.1”,上游:“fastcgi://unix:/var/run/php5-fpm.sock:”,主机:“www.example.at”
由于该应用程序在 Facebook 上也可用,因此也可以通过 app.example.com 访问。因此,我尝试将每个请求通过代理传递到 example.com 的根目录到 app.example.com。这很有效,但正如所提到的,使用该配置,Wordpress 将不再工作。
这是我当前的配置文件(根据@Pothi Kalimuthu 的输入)
server {
server_name www.domain.at domain.at;
# other directives, such as
index index.html;
error_log /var/www/log/error.log debug;
root /var/www/temp;
location = / {
# process the single page apps
#proxy_pass http://mdev.domain.at/;
# or
#try_files $uri $uri/ /index.html;
}
location /shared
{
root /var/www/temp/src;
}
location / {
# let's process WordPress here
# if WordPress is installed in another location, then
alias /var/www/web/;
try_files $uri $uri/ /index.php;
# process PHP here
location ~* ^/(.*\.php)$ {
# directives to process PHP
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
}
我尝试了很多次,所以请原谅注释掉的几行。
您能否给我一些提示,告诉我如何解决我的问题,例如,代理传递功能是否可能是错误的方法?
编辑 在 Pothi Kalimuthu 的帮助之后,我至少设法让我的单页应用程序和 wordpress 协同工作。
有人知道如何配置 nginx 以使其与第三个 zend-framework 项目一起工作,该项目仅提供与 domain.at/trainers/ 或 location ^~ /trainers 匹配的 URL(我猜)吗?
编辑2
我添加了 /trainers/ 的位置块,但始终会提供 index.html
location /trainers/
{
root /var/www/staging/public;
#alias /var/www/staging/public;
index index.php;
try_files $uri $uri/ /index.php$is_args$args;
}
答案1
更新:稍微修改一下您的原始问题应该可以解决问题。请尝试以下操作...
server {
server_name domainname.com;
# other directives, such as
index index.html index.php;
root /path/to/apps;
location = / {
# process the single page apps
# proxy_pass http://...;
# or
# try_files $uri $uri/ /index.html;
}
location / {
# let's process WordPress here
# if WordPress is installed in another location, then
# alias /path/to/wordpress/;
try_files $uri $uri/ /index.php;
# process PHP here
location ~* ^/(.*\.php)$ {
# directives to process PHP
}
}
}
我希望这能有所帮助。