首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将nginx反向代理修复为用户重定向端口的wordpress停靠端?

如何将nginx反向代理修复为用户重定向端口的wordpress停靠端?
EN

Stack Overflow用户
提问于 2020-07-16 00:11:05
回答 1查看 2.5K关注 0票数 2

因此,我有一个raspberry pi网络服务器,我一直在试验,它运行nginx来服务多个站点等等。我想将wordpress作为博客在停靠容器中运行,但我在正确配置nginx+docker wordpress设置时遇到了问题。

这是我的船坞-复合。Here:

代码语言:javascript
复制
version: "3"
services:
  db:
    image: hypriot/rpi-mysql
    restart: always
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: <password>
    networks:
      - wp

  wordpress:
    depends_on:
      - db
    image: wordpress
    restart: always
    volumes:
      - ./:/var/www/html/wp-content
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: <password>
    ports:
      - 8082:80
    networks:
      - wp

networks:
  wp:

volumes:
  db_data:

下面是我当前用于example.com的nginx .conf:

代码语言:javascript
复制
server {
    client_max_body_size 32M;

    # Listen HTTP
    listen 80;
    server_name www.example.com example.com;

    # Redirect HTTP to HTTPS
    return 301 https://$host$request_uri;

}

server {
    client_max_body_size 32M;
    
    # Listen HTTP
    listen 443 ssl;

    server_name example.com www.example.com;

    # SSL config
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
   
    # does not fix the issue
    port_in_redirect off;

    # Proxy Config
    location / {

        # My attempts at fixing the port issue (did not work in any combination) 
        proxy_bind $host:443;
        proxy_redirect off;
        port_in_redirect off;
        absolute_redirect off;
        proxy_set_header Location $host:443;
        proxy_set_header Host $http_host:443;

        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8082/;
    
        # an extra try despite my 8082 port not being open
        proxy_redirect https://example.com:8082/ https://example.com/;
    }

    # testing and looking at just the /wp-login.php "works" but without any of the content
    location ~ \.php {
        proxy_pass http://127.0.0.1:8082;
    }

}

我的问题是:在访问我的example.com域时,我被重定向到example.com:8082,而没有得到任何内容,而且我有很多问题试图想出一种解决它的方法。我也尝试过在端口80上使用http,但这并没有什么区别(除非我在本地网络上,因为它在本地获取文件)

在上面的nginx设置中,我遗漏了一件简单的东西吗?

是否有一种方法可以让码头将其转发到不同的虚拟端口?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-27 20:29:45

好的,看起来问题不在于docker/nginx设置,而在于wordpress。我犯了错误,在rpi.local.ip.address:8082上填写了最初的wordpress设置,并将其保存在配置中。

最后,我只是用docker-compose down --volumes重置卷,尽管这会删除所有的数据。

真正的答案是解决方案--这里发现的问题:Docker: I can't map ports other than 80 to my WordPress container

我还对这些文件做了一些修改,因此这些文件的工作内容如下:

如果这些方法也不适用于您,那么您可以:

ports: - 8082:80

  • forward
  • docker-compose down --volumes重新设置容器,
  • 删除到docker inspect [id-of-wordpress-container]使用
  • 找到的ip地址

然后设置wordpress安装,只有在重新添加ports: - 8082:80之后才能安装,因为这个ip在重新启动后才会更改。

docker-compose.yml

代码语言:javascript
复制
version: "3"
services:
  db:
    image: mysql/mysql-server:8.0
    restart: always
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: VNz5EHiZkec9mn
    networks:
      - wp
    command: '--default-authentication-plugin=mysql_native_password'
   
  wordpress:
    depends_on:
      - db
    image: wordpress
    restart: always
    volumes:
      - ./wp-content/:/var/www/html/wp-content
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: VNz5EHiZkec9mn 
    networks:
      - wp
    ports:
      - 8082:80

networks:
  wp

volumes:
  db_data:

/etx/nginx/sites现有/example.com.conf

如果301重定向被缓存在浏览器中,则会添加重定向。

代码语言:javascript
复制
server {
    client_max_body_size 32M;

    # Listen HTTP
    listen 80;
    server_name www.example.com example.com;

    # Redirect HTTP to HTTPS
    return 301 https://$http_host$request_uri;

}

server {
    listen 8082 ssl;
    server_name example.com www.example.com;

    # SSL config
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    return 301 https://scienceangles.com;
}

server {
    client_max_body_size 32M;
    
    # Listen HTTP
    listen 443 ssl;
    
    server_name example.com www.example.com;

    # SSL config
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
   
    port_in_redirect off;

    # Proxy Config
    location / {
    proxy_pass http://localhost:8082;
    proxy_redirect off;
    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_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    
    }

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62925541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档