我在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
我们拥有所有参数。
使用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/website
的http-server
。角度是前端客户端,不需要在生产模式下启动