繁体   English   中英

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

[英]nginx redirect all domain to another port but keep one domain for admin apps

我尝试使用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 如果我用server.domain.com替换了127.0.0.1 ,则第一个虚拟主机将无法正常工作,并重定向到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:
    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更适合您的情况。 我可以告诉你如何做到这一点。

万一您需要它

看来您正在尝试做与我为我们公司的需求相似的事情。 如果您有兴趣,我可以给您访问我的项目的权限。 我已经使用docker建立了一个完整的服务器基础架构,现在它已完美部署在我们的服务器上。 简而言之,它的工作方式如下:

  • 首先是nginx代理容器
  • 用于演示应用程序的带有apache2-nginx-php5.6的容器
  • 用于演示应用程序的带有apache2-nginx-php7.0的容器
  • 用于生产应用程序的带有apache2-nginx-php5.6的容器
  • 用于生产应用程序的带有apache2-nginx-php7.0的容器
  • 玛丽亚分贝的演示容器
  • 带有玛丽亚分贝的生产容器
  • 一个带有phpmyadmin的容器来访问两个数据库服务

  • 任何请求都会传给nginx代理。

  • 它与某些虚拟主机匹配,并被代理到内部具有apache2和nginx的4个容器之一。

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

我打算将其进一步发展为一个开源项目,有兴趣的人应该告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM