Skip to content

Instantly share code, notes, and snippets.

@JamesPaden
Last active November 30, 2021 17:54
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save JamesPaden/4cf0670f7b79373b1ded to your computer and use it in GitHub Desktop.
Save JamesPaden/4cf0670f7b79373b1ded to your computer and use it in GitHub Desktop.
Wordpress Reverse Proxy Plugin
<?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);
}
# 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>
# 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/;
}
@chitikenasatish
Copy link

chitikenasatish commented Oct 17, 2019

Hi , This is good and exactly what I need . Can you please let me know how to add reverproxy.php in the code or include . I am new to wordpress . Thanks a lot for the response.

@JamesPaden
Copy link
Author

HI, I cannot recommend the usage of this if you aren't not an expert Wordpress user. It's an advanced technique and will likely require ongoing maintenance and changes.

@chitikenasatish
Copy link

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

@ouadie-limouni
Copy link

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