我正在尝试使用在端口 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
工作原理类似。)