wordpress+ngrok反向代理

ngrok要求 Host 值为 {通道名}.ngrok.{一级域名}.com:8081 ,其中8081是端口号,如非这样设置,nginx客户端无法代理后端站点,会提示:通道不存在。

proxy_set_header Host tunnel.ngrok.somename.com:8081;

巧了,wordpress 的 wp-app/wp-includes/canonical.php 中有这样一段代码:

if ( ! $requested_url && isset( $_SERVER['HOST'] ) ) {
		// Build the URL in the address bar.
		
		$requested_url  = is_ssl() ? 'https://' : 'http://';
		$requested_url .= $_SERVER['HOST'];
		$requested_url .= $_SERVER['REQUEST_URI'];
	}
这导致wordpress 接收到的域名正是 {站点前缀}.ngrok.{一级域名}.com:8081 ,所以首页会被代理到这上面去,而我们的前端域名必须是 www.xx.com这样漂的一级www域名,这就导致从www访问的wordpress总是重定向到 ngrok 的后端域名,不但难看,而且它还忽略了端口号,最终访问的是 ngrok 服务器的80端口,那肯定是个403,大写的“滚粗”。
解决方案是在 nginx 前端代理中,设置:
proxy_set_header X-Forwarded-Host www.xxx.com;
代表,它是为此转发。
同时修改 wp-app/wp-includes/canonical.php中的对应部分为:

if ( ! $requested_url && isset( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {
		// Build the URL in the address bar.
		
		$requested_url  = is_ssl() ? 'https://' : 'http://';
		$requested_url .= $_SERVER['HTTP_X_FORWARDED_HOST'];
		$requested_url .= $_SERVER['REQUEST_URI'];
	}
注意,这里要使用 HTTP_X_FORWARDED_HOST ,而不是 单纯的 X-Forwarded-Host

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇