我如何配置nginx以仅提供它在配置的url中找到的内容

问题描述 投票:0回答:1

我在docker-compose中启动nginx反向代理。第一个docker compose文件如下所示:

version: "3.5"
services:
  rproxy:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports: 
      - 80:80
      - 443:443
    volumes:
      - '/etc/letsencrypt:/etc/letsencrypt'
    networks:
      - main
networks:
  main:
    name: main_network

dockerfile只是确保nginx服务器具有以下配置:

server {
    listen 443 ssl;
    server_name website.dev;
    ssl_certificate /etc/letsencrypt/live/www.website.dev/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.website.dev/privkey.pem;

    location / {
        resolver 127.0.0.11;
        set $frontend http://website;
        proxy_pass $frontend;
    }
}

[首先,我运行以下docker-compose文件。然后,当我尝试访问www.website.dev时,出现502错误按预期

然后我运行下面定义的另一个docker-compose文件:

version: '3.5'
services:
  website:
    image: registry.website.dev/frontendcontainer:latest
    command: npm run deploy
    networks:
      main:
        aliases: 
          - website
networks:
  main:
    external:
      name: main_network

这应该与nginx容器在同一网络上启动网站容器。“ docker ps”显示docker容器正在运行。进入website.dev会出现502错误。 这是意外的。我希望Nginx现在能够连接到正在运行的Docker容器。

我通过在第一个docker-compose文件中运行以下命令来重置nginx服务器:

docker-compose up -d

现在转到website.dev将显示网站容器的内容。

我对网站容器进行了更改,将新的Docker容器上传到私有容器。我在第二个docker-compose文件上使用以下命令:

docker-compose down

旧的网站容器已不存在。

docker-compose pull

新网站容器被拉出。

docker-compose up

新的网站容器现已在线。

现在转到website.dev会显示旧(已确认不存在)容器的内容,而不是新容器的内容。 这是意外的

重置nginx服务器将使它现在提供正确的网站。

我的问题是,如何配置nginx以仅提供它在配置的url中找到的内容,而不必重置nginx服务器?

根据要求的dockerfile:

FROM nginx:alpine

RUN rm /etc/nginx/conf.d/*

COPY proxy.conf /etc/nginx/conf.d
docker nginx docker-compose reverse-proxy
1个回答
0
投票

我们拥有所有参数。

使用angular-cli并使用ng-build,这会生成一个静态文件,您无需投放他们与代理路径。您只需要将位置设置为文件夹如果使用index.html,则无需使用http-server,一切都可以单独运行

NGinx:

server {
    listen 443 ssl default_server;
    server_name website.dev _ default_server;
    ssl_certificate /etc/letsencrypt/live/www.website.dev/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.website.dev/privkey.pem;

    location / {
        root /path/to/dist/website; # where ng build put index.html with all .js and assets
        index index.htm index.html;
    }
}

docker-compose NGinx:

version: "3.5"
services:
  rproxy:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
      - 443:443
    volumes:
      - '/etc/letsencrypt:/etc/letsencrypt'
      - '/host/path/shared:/path/to' # <-- Add this line. (host: /host/path/shared)
    networks:
      - main
networks:
  main:
    name: main_network

docker-compose网站:

version: '3.5'
services:
    website:
    image: registry.website.dev/frontendcontainer:latest
    command: npm run deploy
    volumes:
      - '/host/path/shared:/path/to' # <-- Add this line. (host: /host/path/shared)
    networks:
      main:
        aliases:
          - website
networks:
    main:
    external:
      name: main_network

现在ng build --prod将在其中创建index.html和资产/host/path/shared/dist/website(内部:/path/to/dist/website)。

然后NGinx将在内部访问这些文件不使用/path/to/dist/websitehttp-server。角度是前端客户端,不需要在生产模式下启动

© www.soinside.com 2019 - 2024. All rights reserved.