从 rails 到 wordpress 的 nginx 反向代理

nginx reverse proxy from rails to wordpress

我在 Rails 上有一个 Ruby 应用程序和一个托管在不同 EC2 实例上的 Wordpress 博客。

我正在尝试让 Wordpress 博客充当 Rails 应用程序的子文件夹(示例。com/blog 而不是 blog.example.com)以便更好搜索引擎优化

https://www.nginx.com/resources/admin-guide/reverse-proxy/

我尝试使用 nginx 反向代理功能,我认为这是我目前最好的选择,但我的尝试没有成功。

  1. 博客主页按预期打开(示例。com/blog)但是 没有 css.
  2. 带有争论的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;
  }

为了自动缩放、冗余和部署目的,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 的帮助下解决了

  1. 应该可以从

    访问 Wordpress

    blog-ip/blog

  2. 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;
      }
    
  3. 将此添加到 wp-config.php

    define('FORCE_SSL_ADMIN', true);
    
    if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
        $_SERVER['HTTPS']='on';
    
  4. 更改了 url

    define('WP_SITEURL', 'https://www.example.com/blog');
    define('WP_HOME', 'https://www.example.com/blog');