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

时间:2017-12-09 03:09:20

标签: wordpress docker nginx proxypass

背景

我正在努力将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-.*的任何网址。假设所有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

2 个答案:

答案 0 :(得分: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'];

答案 1 :(得分:0)

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