Nginx一个域名多个应用

Nginx一个域名多个应用

我对 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
    }
  }
}

我希望这能有所帮助。

相关内容