【问题标题】:nginx subpath to redirect to wordpress docker containernginx 子路径重定向到 wordpress docker 容器
【发布时间】:2018-05-23 07:45:20
【问题描述】:

背景

我正在努力将 Dockerized 博客堆栈 (Wordpress + MariaDB) 添加到我们现有的在 Nginx 上运行的网站。 location / 已经为网站提供服务,我被指示向 Nginx 配置添加逻辑,/blog 将所有流量重定向到 Docker 容器。

尝试 1

  • 我在服务器上的localhost:9999 启动了wordpress 容器。
  • 使用引用我添加了额外的逻辑:

location ^~ /blog { proxy_pass http://localhost:9999; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; } 问题:

Wordpress 将 http://server/blog 重定向到 http://wp-admin/install.php,由于没有规则,我得到了 404。

尝试 2

我将location 更改为处理/blog 以及包含wp-.* 的任何URL。假设所有 Wordpress 页面都将具有该 URL。

location ~ ^/(blog|wp-.*) {

这通过 Wordpress 设置工作。 如果我明确访问http://server/wp-admin,我就可以访问博客管理页面。

问题:

  • Wordpress 博客页面不满足上述正则表达式,并返回 404。例如http://server/?p=31 是博客文章的链接。

尝试 3

只是为了它,我将location / 重定向到 Docker 容器并且博客运行良好。但遗憾的是,这不是我的问题陈述。

问题

接下来我该怎么做才能满足所有来自 wordpress 的特定请求?当这里可能有更优雅的解决方案时,我觉得我正在陷入一个对抗正则表达式的循环。

参考文献

  1. nginx proxy pass subpaths not redirected
  2. How can I have same rule for two locations in NGINX config?
  3. nginx redirect to docker container

【问题讨论】:

    标签: wordpress docker nginx proxypass


    【解决方案1】:

    根据一个自我回答的 SO 问题https://stackoverflow.com/a/41479776/1264360

    // add these lines to wp-config.php
    define('WP_SITE_URL', 'http://example.com/blog');
    define('WP_HOME', 'http://example.com/blog');
    
    $_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI'];
    

    【讨论】:

    • $_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI']; 在这里,谢谢。
    • 你可以标记为将来帮助他人的答案
    • @vish ? 如果这回答了你的问题,你会这样做吗
    【解决方案2】:

    假设您希望通过 wp 子目录访问您的 wordpress 网站。例如:

    http://your-website.com/wp

    这是我在不更改 wp-config.php 的情况下设法使其工作的方法。关键是使用working_dir指令。

    docker-compose.yml

    version: '3'
    services:
    
     nginx:
       image: nginx:1.17
       container_name: nginx
       restart: unless-stopped
       depends_on:
         - wordpress
       ports:
         - '80:80'
       networks:
         - app-network
       volumes:
         - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    
     db:
       image: mysql:5.7
       container_name: db
       volumes:
         - db_data:/var/lib/mysql
       restart: always
       environment:
         MYSQL_ROOT_PASSWORD: somewordpress
         MYSQL_DATABASE: wordpress
         MYSQL_USER: wordpress
         MYSQL_PASSWORD: wordpress
       networks:
         - app-network
    
     wordpress:
       container_name: wordpress
       depends_on:
         - db
       image: wordpress:latest
       restart: always
       environment:
         WORDPRESS_DB_HOST: db:3306
         WORDPRESS_DB_USER: wordpress
         WORDPRESS_DB_PASSWORD: wordpress
         WORDPRESS_DB_NAME: wordpress
       working_dir: /var/www/html/wp
       volumes:
        - wordpress:/var/www/html/wp
       networks:
         - app-network
    
    networks:
     app-network:
       driver: bridge
    
    volumes:
     db_data:
     wordpress:
    

    nginx.conf

    events {}
    http {
        server {
            listen 80;
    
            location /wp/ {
                proxy_set_header  Host               $host;
                proxy_set_header  X-Real-IP          $remote_addr;
                proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;
    
                proxy_pass http://wordpress;
            }
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2019-04-16
      • 2019-04-04
      • 2020-12-30
      • 2022-01-11
      相关资源
      最近更新 更多