【问题标题】:nginx reverse proxy from rails to wordpress从 rails 到 wordpress 的 nginx 反向代理
【发布时间】:2018-02-15 06:22:54
【问题描述】:

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

我正在尝试使 Wordpress 博客像 Rails 应用程序的子文件夹(example.com/blog 而不是 blog.example.com),以实现更好的 SEO

  • 可以通过http和https访问Rails应用(http是重定向到https)

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

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

  1. 博客主页按预期打开 (example.com/blog),但 没有 CSS。
  2. 带有争论的 URL (example.com/blog/args) 将我重定向回 Rails 应用程序 (example.com/args)

我在 wp-config.php 中将所需的博客网址设置如下:

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 博客保持分离非常重要。

如果有其他方法可以实现这一点,我愿意接受建议。

【问题讨论】:

  • 你能不能先让你的博客直接使用https://www.example.com/blog然后proxy_pass会更容易
  • @TarunLalwani 不,我使用亚马逊上的预构建映像安装了它
  • @TarunLalwani 我已经设法将 /blog 路由到它的服务器上的 Wordpress。你是说现在 nginx 配置应该可以正常工作了?
  • 是的,如果它现在在那里工作,nginx 反向代理也应该工作
  • @TarunLalwani 它正在工作,但不加载 css 和 js,因为 chrome 说它不安全。我的 Rails 应用程序使用 SSL,而 Wordpress 没有。你知道我该如何解决这个问题吗?

标签: ruby-on-rails wordpress url nginx reverse-proxy


【解决方案1】:

在 Tarun Lalwani 的帮助下解决了

  1. Wordpress 应该可以从

    访问

    博客-ip/博客

  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. 改了网址

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

【讨论】:

    【解决方案2】:

    现在您的博客在 http://&lt;blogip&gt;/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';
    

    【讨论】:

    • 只是为了确定,应该是一样的BLOG ip吧?我这样做了,但资产仍然从 http://
    【解决方案3】:

    作为替代解决方案,您可以使用 AWS CDN CloudFront 并拥有多个来源。您的网站的一个来源和博客的另一个来源。 (分开以便您可以将它们分开)

    要设置 WordPress,您可以关注此帖子:http://www.danneh.org/2015/04/setting-wordpress-amazon-cloudfront/

    在您的 CloudFront 分发行为中,Path Pattern 可能如下所示:

    在 CDN 中,如果需要,除了 CloudFront 中的 allowing traffic 之外,您还可以执行“http 到 https”。

    您关于location 的 Nginx 配置可能如下所示:

    location /blog {
        try_files $uri $uri/ /blog/index.php;
    }
    

    /blog 是因为 CloudFront 不会删除 Path Patterns,因此对您的来源的所有请求都将以 /blog 为前缀

    【讨论】:

    • 如果博客在其服务器上的根路径下而不是 /blog 下,这会起作用吗? webmasters.stackexchange.com/questions/98520/…我真的很困惑如何完成这项工作。能否请您详细说明如何从 example.com/blog 到 blog.example.com 和 example.com 作为主服务器进行反向代理?
    • 棘手的部分是将WordPress从/blog目录中移出,主要是因为CloudFront不会删除请求中的/blog,可能通过一些Nginx重写条件可以解决。跨度>
    • 我已设法将博客移至其服务器上的 /blog。请告诉我,如果我理解这一点,我应该使用 /blog* 路径创建域 blog.example.com 的源并将 example.com 作为备用域?
    • 您的第一个来源将类似于mainsite.example.com Default(),您的第二个来源将是blog.example.com,在“行为”中您将创建一个Path Pattern“/blog i>"
    • 我按照你说的做了,使用默认设置使用源 example.com 进行了分发,然后添加了另一个源 blog.example.com,最后为博客源添加了 /blog* 路径的行为,但是 example.com/blog 将我重定向到我的 Rails 应用程序的主页(我有一条规则,任何未设置的路由都会重定向到主页)我不明白这个东西是如何工作的
    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 2015-04-04
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多