簡體   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