Last active
November 30, 2021 17:54
-
-
Save JamesPaden/4cf0670f7b79373b1ded to your computer and use it in GitHub Desktop.
Wordpress Reverse Proxy Plugin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @package Reverse Proxy | |
*/ | |
/* | |
Plugin Name: Reverse Proxy | |
Plugin URI: https://instrumentalapp.com/ | |
Description: Reverse proxy setup for Instrumental blog | |
Version: 1.0 | |
Author: James Paden | |
Author URI: https://instrumentalapp.com | |
*/ | |
// Change to match the desired subfolder, no leading or tralling slash | |
define("RP_SUBFOLDER", "blog"); | |
function rp_is_login_page() { | |
return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')); | |
} | |
if ( $_SERVER["REMOTE_ADDR"] != "127.0.0.1" && !is_admin() && !rp_is_login_page() && $_GET["preview"] != "true" ) { | |
add_action( 'init', function () { | |
if (!$_SERVER["HTTP_X_IS_REVERSE_PROXY"]) { | |
//not coming from us, 404 it. | |
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); | |
exit; | |
} | |
}); | |
//From http://stackoverflow.com/questions/772510/wordpress-filter-to-modify-final-html-output | |
ob_start(); | |
add_action('shutdown', function() { | |
$final = ''; | |
$levels = count(ob_get_level()); | |
for ( $i = 0; $i < $levels; $i++ ) { | |
$final .= ob_get_clean(); | |
} | |
// Apply any filters to the final output | |
$final = str_replace("http://" . $_SERVER["HTTP_HOST"], "https://" . $_SERVER["HTTP_X_ORIGINAL_HOST"] . "/" . RP_SUBFOLDER, $final); | |
echo $final; | |
}, 0); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Example code for Apache config | |
# Put this inside the <VirtualHost> directive | |
<Location /blog> | |
RequestHeader set X-Is-Reverse=Proxy true | |
RequestHeader set X-Original-Host yourwebsite.com | |
ProxyPass http://yourpressableblog.com | |
ProxyPassReverse http://yourpressableblog.com | |
</Location> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Example code for Nginx config | |
# Put this inside the "server {" section | |
location /blog/ { | |
proxy_set_header X-Original-Host $host; | |
proxy_set_header X-Is-Reverse-Proxy "true"; | |
proxy_pass_header Set-Cookie; | |
proxy_cookie_path / /blog/; | |
proxy_pass http://yourpressableblog.com/; | |
} |
Hi James, I just stumbled upon your code which seems to align with what I'm trying to achieve.
I have 2 questions if you don't mind:
1- do you change the site_url and home_url on the origin site to be "finalsite.com/blog" or do you leave those as originsite.com ?
2- how do you get assets from wp-content to not throw 404 errors when accessed via the RP URL (finalsite.com/blog/wp-content/...) since they physically live on originsite.com/wp-content/...
Thank you,
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for quick reply . Please let me know upgrade challenges . If you have any document please share . Also I tried the solution with minimal change it worked . I also like to understand better about this code before taking decision. Thanks again helping on this issue