将 /my-service 请求重定向到 nginx 上的自定义端口

将 /my-service 请求重定向到 nginx 上的自定义端口

我正在尝试设置一个 nginx 映像,该映像根据 URL 将请求重定向到服务端口。我正在使用 docker-compose,这是我的 docker-compose.yml:

version: '3.3'

services:

  nginx:
    image: nginx:latest
    build: .
    container_name: nginx
    depends_on:
        - service-1
    ports:
      - "80:80"

  service-1:
    image: dockerhub/image:latest
    container_name: service-1
    ports:
      - "8080:8080"
    restart: on-failure

用于构建nginx的dockerfile包含以下内容:

FROM nginx:latest
COPY ./nginx-html-template/ /usr/share/nginx/html/
COPY ./nginx.conf /etc/nginx/conf.d/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

最后但同样重要的是 nginx.config:

server {
    listen [::]:80;
    listen 80 default_server;
    server_name localhost;

    location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri $uri/ =404;
    }

    location /service-1 {
        proxy_pass http://service-1:8080/;
     }
}

如果我点击 localhost/service-1,我期望 nginx 将请求重定向到端口 8080。但我得到的是 404。如果我点击 localhost:8080,那么它工作正常。我做错了什么?提前致谢

答案1

尝试像这样修改它:

    location /service-1/ {
        proxy_pass http://127.0.0.1:8080/;
     }

答案2

如果您使用 docker compose,则不需要为 service-1 映射端口(除非您希望它独立于 nginx 服务器可访问),但需要在 nginx 服务描述中添加以下元素docker-compose.yml

links:
  - service-1

那么一切都会顺利进行。

事情是通过链接块 docker compose 为 nginx 容器建立内部名称解析,然后当您使用“service-1”作为主机时,它会将其路由到另一个容器。

相关内容