从 rails 到 wordpress 的 nginx 反向代理
nginx reverse proxy from rails to wordpress
我在 Rails 上有一个 Ruby 应用程序和一个托管在不同 EC2 实例上的 Wordpress 博客。
我正在尝试让 Wordpress 博客充当 Rails 应用程序的子文件夹(示例。com/blog 而不是 blog.example.com)以便更好搜索引擎优化
- 可以通过 http 和 https 访问 Rails 应用程序(http 正在重定向到 https)
https://www.nginx.com/resources/admin-guide/reverse-proxy/
我尝试使用 nginx 反向代理功能,我认为这是我目前最好的选择,但我的尝试没有成功。
- 博客主页按预期打开(示例。com/blog)但是
没有 css.
- 带有争论的URL(例如。com/blog/args)将我重定向回
Rails 应用程序(示例。com/args)
我在wp-config.php中设置想要的博客url如下:
define('WP_SITEURL', 'https://www.example.com/blog');
define('WP_HOME', 'https://www.example.com/blog');
这是我使用的nginx配置:
location ^~ /blog {
proxy_pass http://<<BLOGIP>>/blog;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
- https://github.com/waterlink/rack-reverse-proxy
我也试过
rack-reverse-proxy gem 但得到相同的结果
为了自动缩放、冗余和部署目的,Rails 应用程序和 Wordpress 博客保持分离非常重要。
如果有其他方法可以实现此目的,我愿意接受建议。
作为替代解决方案,您可以使用 AWS CDN CloudFront 并具有多个来源。您网站的一个来源和博客的另一个来源。 (分开以便您可以将它们分开)
要设置 WordPress,您可以按照此 post:http://www.danneh.org/2015/04/setting-wordpress-amazon-cloudfront/
在您的 CloudFront 分发行为中,Path Pattern
可能如下所示:
在 CDN 中,您可以执行 "http to https" 此外,如果需要,也只能从 CloudFront allowing traffic。
关于 location
的 Nginx conf 可能如下所示:
location /blog {
try_files $uri $uri/ /blog/index.php;
}
/blog
是因为 CloudFront 不会删除 Path Patterns
,所以对您的来源的所有请求都将以 /blog
为前缀
既然您的博客在 http://<blogip>/blog
上运行,您还需要解决一些问题
location ^~ /blog {
proxy_pass http://<<BLOG_IP>>/blog;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http://<ip>/ https://$host/;
proxy_cookie_domain <ip> $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
还将以下添加到您的 wp-config.php
define('FORCE_SSL_ADMIN', true);
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
在 Tarun Lalwani 的帮助下解决了
应该可以从
访问 Wordpress
blog-ip/blog
example.com
上的 nginx 配置
location ^~ /blog {
proxy_pass http://<<blog-ip>>/blog;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http://<<blog-ip>>/ https://$host/;
proxy_cookie_domain <<blog-ip>> $host;
}
将此添加到 wp-config.php
define('FORCE_SSL_ADMIN', true);
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
更改了 url
define('WP_SITEURL', 'https://www.example.com/blog');
define('WP_HOME', 'https://www.example.com/blog');
我在 Rails 上有一个 Ruby 应用程序和一个托管在不同 EC2 实例上的 Wordpress 博客。
我正在尝试让 Wordpress 博客充当 Rails 应用程序的子文件夹(示例。com/blog 而不是 blog.example.com)以便更好搜索引擎优化
- 可以通过 http 和 https 访问 Rails 应用程序(http 正在重定向到 https)
https://www.nginx.com/resources/admin-guide/reverse-proxy/
我尝试使用 nginx 反向代理功能,我认为这是我目前最好的选择,但我的尝试没有成功。
- 博客主页按预期打开(示例。com/blog)但是 没有 css.
- 带有争论的URL(例如。com/blog/args)将我重定向回 Rails 应用程序(示例。com/args)
我在wp-config.php中设置想要的博客url如下:
define('WP_SITEURL', 'https://www.example.com/blog');
define('WP_HOME', 'https://www.example.com/blog');
这是我使用的nginx配置:
location ^~ /blog {
proxy_pass http://<<BLOGIP>>/blog;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
- https://github.com/waterlink/rack-reverse-proxy
我也试过 rack-reverse-proxy gem 但得到相同的结果
为了自动缩放、冗余和部署目的,Rails 应用程序和 Wordpress 博客保持分离非常重要。
如果有其他方法可以实现此目的,我愿意接受建议。
作为替代解决方案,您可以使用 AWS CDN CloudFront 并具有多个来源。您网站的一个来源和博客的另一个来源。 (分开以便您可以将它们分开)
要设置 WordPress,您可以按照此 post:http://www.danneh.org/2015/04/setting-wordpress-amazon-cloudfront/
在您的 CloudFront 分发行为中,Path Pattern
可能如下所示:
在 CDN 中,您可以执行 "http to https" 此外,如果需要,也只能从 CloudFront allowing traffic。
关于 location
的 Nginx conf 可能如下所示:
location /blog {
try_files $uri $uri/ /blog/index.php;
}
/blog
是因为 CloudFront 不会删除 Path Patterns
,所以对您的来源的所有请求都将以 /blog
既然您的博客在 http://<blogip>/blog
上运行,您还需要解决一些问题
location ^~ /blog {
proxy_pass http://<<BLOG_IP>>/blog;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http://<ip>/ https://$host/;
proxy_cookie_domain <ip> $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
还将以下添加到您的 wp-config.php
define('FORCE_SSL_ADMIN', true);
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
在 Tarun Lalwani 的帮助下解决了
应该可以从
访问 Wordpressblog-ip/blog
example.com
上的 nginx 配置location ^~ /blog { proxy_pass http://<<blog-ip>>/blog; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect http://<<blog-ip>>/ https://$host/; proxy_cookie_domain <<blog-ip>> $host; }
将此添加到 wp-config.php
define('FORCE_SSL_ADMIN', true); if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';
更改了 url
define('WP_SITEURL', 'https://www.example.com/blog'); define('WP_HOME', 'https://www.example.com/blog');