Удалить порт из URL с помощью nginx и docker - PullRequest
0 голосов
/ 06 марта 2020

У меня есть 2 экземпляра веб-сайта, работающего на одном сервере для сред разработки и промежуточных сред для контейнеров docker. Исходные коды для этих сайтов такие же, но в 2 отдельных папках. / dev и / uat на одном сервере, и к ним можно получить доступ через один домен, но через разные порты, например dev.website.com: 5000 и dev.website.com

У меня нет доступа к DNS и я не могу его изменить, но я попросил указать домен uat.website.com , указывающий на тот же IP-адрес, чтобы я мог удалить этот порт. Возможно ли это с помощью обратного прокси-сервера или потребуется изменение DNS?

ПРОБЛЕМА

dev - dev.website.com:5000

uat - dev .website.com

То, что я хотел бы достичь

dev - dev.website.com

uat - uat.website.com

docker -составить dev.yml

version: '3'

networks:
  dev_network:
    driver: bridge

services:
  web_dev:
    image: nginx:stable-alpine
    container_name: web_dev
    working_dir: /var/www
    volumes:
      - ./src:/var/www
      - ./nginx/default.dev.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app_dev
    ports:
      - "5000:80"
    networks:
      - dev_network

  app_dev:
    image: php:7.2-fpm
    container_name: app_dev
    working_dir: /var/www
    volumes:
      - ./src:/var/www
    ports:
      - "9005:9000"
    networks:
      - dev_network


docker -создать uat.yml

version: '3'

networks:
  uat_network:
    driver: bridge

services:
  web_uat:
    image: nginx:stable-alpine
    container_name: web_uat
    working_dir: /var/www
    volumes:
      - ./src:/var/www
      - ./nginx/default.uat.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app_uat
    ports:
      - "80:80"
    networks:
      - uat_network

  app_uat:
    image: php:7.2-fpm
    container_name: app_uat
    working_dir: /var/www
    volumes:
      - ./src:/var/www
    ports:
      - "9000:9000"
    networks:
      - uat_network

nginx conf для dev

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root    /var/www;

    location / {
        try_files   $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app_dev:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

nginx conf для uat

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root    /var/www;

    location / {
        try_files   $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app_uat:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

1 Ответ

0 голосов
/ 07 марта 2020

Из моего опыта самый простой способ добиться маршрутизации виртуального хоста - это использовать traefik с docker compose. Он будет обрабатывать перенаправление для вас, а также может прервать https при необходимости (учитывая, что вы можете получить доступ к одному и тому же серверу через разные имена DNS). Вы также можете добавить еще один слой nginx в качестве обратного прокси.

...