Nginx 0.7.43 将 Wordpress 网站代理到 Apache 2.4 + PHP 5.6

Nginx 0.7.43 将 Wordpress 网站代理到 Apache 2.4 + PHP 5.6

我正在尝试使用在端口 80 上运行的现有 nginx,通过代理传递到为 Wordpress 网站提供服务的 Apache。

添加了 nginx 部分(故意留下了一些注释测试,我尝试了很多版本,如果看起来不对,请见谅):

upstream wordpress {
    server 127.0.0.1:5000;
}

server {
    server_name media.raw-news.net;
    access_log /home/plumi/PLUMI/plumi.app/var/log/wordpress-access.log;
    error_log /home/plumi/PLUMI/plumi.app/var/log/wordpress-error.log;

    #root /usr/local/apache2/htdocs/;

    location / {
        proxy_redirect off;
        proxy_pass http://wordpress;
        proxy_connect_timeout 75;
        proxy_read_timeout 185;
    }

 location ~ .*\\.(php)$ {

  proxy_pass         http://wordpress;
  proxy_redirect     off;

  proxy_set_header   Host             $host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

  client_max_body_size       10m;
  client_body_buffer_size    128k;

  proxy_connect_timeout      90;
  proxy_send_timeout         90;
  proxy_read_timeout         90;

  proxy_buffer_size          4k;
  proxy_buffers              4 32k;
  proxy_busy_buffers_size    64k;
  proxy_temp_file_write_size 64k;
 }

}

我的 Apache 在端口 5000 上运行,并启用了 PHP(仅相关的 php 内容):

LoadModule php5_module        modules/libphp5.so

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

AddType text/html .php
AddHandler php5-script  .php

现在的效果是:

Chrome:显示了 Wordpress 网站,但似乎没有执行 PHP 代码......我只能看到 HTML 部分。

Firefox:浏览 Wordpress 网站会导致 127.0.0.1 重定向...

Safari:它起作用了!显示...

奇怪的是,如果我在所有浏览器上浏览http://media.example.net/wp-admin并执行登录..我可以进入仪表板,并且一切都显示完美!

所有图像都在那里,PHP 代码被执行...但只有在登录仪表板后才会执行!

我在这里遗漏了什么?

我没有在 Apache 中创建任何 VirtualHost,它是一个简单的 Apache 2.4 服务器,其中默认的 DocumentRoot 内有 Wordpress 站点。

我无法迁移到较新的 nginx 版本,因为它正在运行生产网站。

当 Plumi 在 Debian 8 上正式发布 4.5.2 时,已经计划好了迁移。

是否有任何首选/有效的配置可以正确地将所有 Wordpress 内容代理到我的 Apache,而无需将其重定向到 127.0.0.1,并在 Apache 上正确执行 PHP 代码?

谢谢 !

答案1

您可能希望设置(并使用)额外的标头来代理到 Apache 实例,例如:

proxy_set_header    X-Real-IP         $remote_addr;
proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;

大多数后端(包括 Apache 和 PHP)都可以与其中一个或多个一起工作$Host(因此它知道正在请求哪个站点)。

应该然后允许 Apache 的 PHP 识别附加数据并基本上说“哦,这不是来自本地主机,它的实际来源是$remote_addr”。 ($remote_addr是一个指示真实源的真实 IP 地址的变量,其X-Forwarded-For工作原理类似。)

相关内容