apache - nginx 将所有域重定向到另一个端口,但为管理应用程序保留一个域

标签 apache docker nginx nginx-reverse-proxy

我尝试使用 Docker 设置 Web 服务器,所以我将使用我的服务器“server.domain.com”的主域供管理员使用(server.domain.com/phpmyadmin,等等...),我想重定向所有另一个域到监听端口 81 的 apache 容器。

所以我的 default.conf 上有这个代码:

server {
    listen 80;
    listen [::]:80 default_server;

    location / {
       proxy_pass  http://web/;
    }
}
main.conf :
server {
    listen 80;
    listen [::]:80;

    server_name server.domain.com;

    location /phpmyadmin/ {
       proxy_pass http://phpmyadmin/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

(更新的配置)

还有我的nginx.conf :
user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;
    gzip_comp_level   5;
    gzip_http_version 1.0;
    gzip_min_length   0;
    gzip_types        *;
    gzip_vary         on;


    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites/*;
}

“docker-compose.yml”的一部分:
nginx:
    build: ./server/proxy
    ports:
        - "80:80"
    #volumes:
       #- nginx_conf:/etc/nginx/
    networks:
        - web_network
    depends_on:
        - web
        - phpmyadmin
        - panel

此时我使用“depends_on”在我的配置中使用容器的名称,但你只谈论网络,所以我认为“depends_on”没有义务?

但这给了我一个错误connection refused .
如果我更换 127.0.0.1通过 server.domain.com第一个虚拟主机不工作并重定向到 nginx webRoot。

所以我不知道为什么...

谢谢 !

最佳答案

据我了解,这个 nginx 容器正在监听端口 80,所有发往您机器的连接请求都将传递给它。所以它只是一个代理容器。我有一个类似实现的项目。让我们试着弄清楚。

为了清楚起见,我建议你有 2 个 conf 文件。

1) main.conf - 将为您的“server.domain.com”服务

server {
    listen 80;
    listen [::]:80;

    server_name server.domain.com;

    location /phpmyadmin {
       proxy_pass http://server.domain.com:82;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

That's all of the configuration you basically need here. Later if you need them, you'll pass headers.

2) default.conf - 将服务于任何其他域
server {
    listen 80;
    listen [::]:80 default_server;

    location / {
       proxy_pass  http://server.domain.com:81;
    }
}

此配置假定:

1) 有一个运行 apache 的容器,并且在端口 81 上到达您的机器的请求将被传递到 apache2 容器的端口 80(或它正在监听的任何端口)

2) 有一个容器正在运行 phpmyadmin,并且在端口 82 上到达您机器的请求将被传递到 phpmyadmin 容器的端口 80(或其他任何...)

您应该考虑的一些改进:

1)如果您使用 docker-compose 启动所有这些容器,您将能够为它们设置虚拟网络。这将允许您按名称将传递请求直接代理到容器。在我的项目中,我这样做:
proxy_pass http://adminer;

其中 adminer 定义为:
adminer:
    image: phpmyadmin/phpmyadmin
    volumes:
        - ./db_interface/conf/config.inc.php/:/etc/phpmyadmin/config.inc.php
    networks:
     - demo_webnet
     - prod_webnet

如果你有问题只是问,我会解释。

2)您可以将另一个 nginx 服务器与您的 apache2 服务器一起放置在其容器中。它们捆绑在一起工作得很好。 Nginx 更适合服务器静态。在您的情况下,Apache2 更适合 PHP。我也可以向您展示如何做到这一点。

如果您需要它

看起来您正在尝试做一些类似于我为我们公司的需求所做的事情。如果您有兴趣,我可以让您访问我的项目。我已经用 docker 建立了一个完整的服务器基础设施,现在它完美地部署在我们的服务器上。简而言之,它的工作原理如下:
  • 首先是nginx代理容器
  • 一个带有 apache2-nginx-php5.6 的容器,用于演示应用程序
  • 一个带有 apache2-nginx-php7.0 的容器,用于演示应用程序
  • 带有 apache2-nginx-php5.6 的容器,用于生产应用程序
  • 带有 apache2-nginx-php7.0 的容器,用于生产应用程序
  • 一个带有 maria db 的容器,用于演示
  • 用于生产的带有 maria db 的容器
  • 带有 phpmyadmin 的容器,用于访问两个数据库服务
  • 任何请求都来自 nginx 代理。
  • 它匹配一些虚拟主机并被代理到内部有 apache2 和 nginx 的 4 个容器之一。

  • 还有很多很酷的东西,比如 cron 配置为在检测到文件更改时自动重新加载 apache2 和 nginx、监督服务、https 支持等等。

    我计划将它进一步开发为一个开源项目,有兴趣的人应该告诉我。

    关于apache - nginx 将所有域重定向到另一个端口,但为管理应用程序保留一个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47679593/

    相关文章:

    c# - 从 .net Core 中的 webapi 调用 grpc 服务的策略

    amazon-web-services - 如何在不使用ELB的情况下为EC2实例实现自定义运行状况检查?

    docker - 挂载的卷不会被 docker 图像内容填满

    amazon-web-services - 在移动设备上使用 StartSSL 的单实例 AWS HTTPS 不起作用

    windows - Windows 上 nginx 的日志轮换

    php - 登录后php如何使用SSL与服务器传输所有数据?

    Eclipse/apache-tomcat-7.0.34 服务器无法定义新服务器

    django - nginx 不会在某些端口上响应

    python-3.x - Apache - sqlite3.OperationalError : attempt to write a readonly database

    PHP、Apache 和 MySQL