提问者:小点点

重定向到wordpress docker容器的nginx子路径


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

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

< code >位置^~/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。

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

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

这是通过Wordpress的设置实现的。如果我明确地访问< code > http://server/WP-admin ,我就可以进入博客管理页面。

问题:

    < Li > Wordpress博客页面不满足上述正则表达式,返回404。例如< code>http://server/?p=31是一篇博文的链接。

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

接下来我该怎么做,以便为来自的所有wordpress特定请求提供服务?我觉得我正在进入一个与正则表达式战斗的循环,而这里可能有一个更优雅的解决方案。

  1. nginx 代理传递子路径未重定向
  2. 如何在 NGINX 配置中的两个位置使用相同的规则?
  3. nginx重定向至Docker容器

共2个答案

匿名用户

根据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'];

匿名用户

假设您想通过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;
        }
     }
}