【问题标题】:virtualhost with nginx and Apache带有 nginx 和 Apache 的虚拟主机
【发布时间】:2015-11-23 12:08:39
【问题描述】:

我已经用 nginx 和 apache 设置了我的本地机器。我使用 nginx 作为所有 nodejs 通信的前端服务器。每个 nodejs 应用程序都有一个自己的上游定义和我的 hosts 文件中的一个条目,这样我就可以得到一个方便的 URL 来使用。另外,我为 apache 定义了一个上游,它在我的配置中的端口 8080 上工作 - 这样我所有的 php 应用程序都可以在 localhost/* 下使用(内部是 localhost:8080/*)。这个配置现在可以正常工作几个月了。但是这次我想在我的本地机器上安装一个magento。为此,我将127.0.0.1 magento.local添加到我的主机文件中(就像我对所有nodejs应用程序所做的那样)并将以下内容添加到我的nginx.conf中:

upstream apache {
    server 127.0.0.1:8080;
}

server {
    listen       80;
    server_name  magento.local;
    client_max_body_size    1024M;
    root /Users/phunkei/htdocs/magento;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://apache;
    }
}

这会将所有内容重写为 /Users/phunkei/htdocs/,这是我的 apache 根。我已经尝试将子文件夹添加到上游定义server 127.0.0.1:8080/magento,但 nginx 不允许这样做。

【问题讨论】:

  • 不确定您要达到的目标。但是root 语句是多余的。它不是必需的,也不使用。你是在尝试proxy_pass http://apache/magneto/;吗?
  • 是的,它会将“magento”添加到 url,从而产生http://magento.local/magento。我试图让http://magento.local/指向/Users/phunkei/htdocs/magentohttp://localhost:8080/magento

标签: apache nginx


【解决方案1】:

目前你代理一切,所以http://magento.local/指向http://localhost:8080/

如果您希望http://magento.local/ 指向http://localhost:8080/magento/,您需要使用:

proxy_pass http://apache/magneto/;

如果您想使用您的root /Users/phunkei/htdocs/magento 直接从nginx 提供一些静态内容,您需要添加指令来实现这一点,例如将代理代码移动到指定位置并使用try_files

location / {
  try_files $uri $uri/ @proxy;
}

【讨论】:

  • 我已经尝试过proxy_pass http://apache/magento/;,但它会导致302重定向到http://localhost/magento/
  • 302 看起来像是来自apache 而不是来自nginx。 apache 访问日志是怎么说的?
猜你喜欢
  • 2015-01-31
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 2015-04-09
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
相关资源
最近更新 更多