我正在嘗試使用在連接埠 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 程式碼。
Firefox:瀏覽 WordPress 網站會導致重定向到 127.0.0.1 ...
Safari:有效!被展示...
奇怪的是,如果我瀏覽所有瀏覽器http://media.example.net/wp-admin並執行登入..我可以進入儀表板,一切都顯示得完美!
所有圖像都在那裡,PHP 程式碼被執行......但只有在登入儀表板之後!
我在這裡缺少什麼?
我沒有在 Apache 中建立任何 VirtualHost,它是一個簡單的 Apache 2.4 伺服器,Wordpress 網站位於預設的 DocumentRoot 內。
我無法遷移到較新的 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
類似。)