Nginx In Docker: конфигурация местоположения не работает - PullRequest
1 голос
/ 15 октября 2019

Присоединение файла Docker.

FROM nginx:1.17.4-alpine

# copy artifact build from the 'build environment'
COPY ./dist /usr/share/nginx/html/
COPY ./default.conf /etc/nginx/conf.d/
# expose port 4202
EXPOSE 80

# run nginx
CMD ["nginx", "-g", "daemon off;"]

Конфигурация nginx (default.conf) показана ниже

server {
    listen       80;
    server_name  localhost;

    location / {     
        root   /usr/share/nginx/html/;
        index  index.html index.htm;
    }

    location /site {
        alias   /usr/share/nginx/html;
        index  index.html;  
    }

}

Я успешно построил и выполнил Docker-контейнер, используя docker run -p 4202:80 imageprocessor:v1

Но всякий раз, когда я пытаюсь просмотреть localhost: 4203 / site, он перенаправляет на localhost / site

Почему это происходит? Пожалуйста, помогите.

1 Ответ

1 голос
/ 15 октября 2019

Nginx не знает, что вы подключаете порт 4202 к порту 80.

Когда вы предоставляете URI /site, Nginx будет перенаправлять извне на /site/. Этот последний URI затем обрабатывается в соответствии с директивой index.

У вас есть два варианта:

1) избегать внешних перенаправлений, генерируемых Nginx

location /site {
    alias   /usr/share/nginx/html;
    index  index.html;  

    rewrite ^/site$ /site/ last;
}

Thisдолжен генерировать внутреннее перенаправление для URI /site. Возможно, вам придется добавить более общее решение, если у вас есть другие каталоги под этим. Кроме того, относительные URI (если применимо) не будут работать правильно, так как завершающий / будет отсутствовать.

2) явно создаст перенаправление с требуемым номером порта

location /site {
    alias   /usr/share/nginx/html;
    index  index.html;  

    location ~ [^/]$ {
        if (-d $request_filename) {
            return 302 http://$http_host$uri/$is_args$args;
        }
    }
}

Еслизапрошенный URI указывает на каталог, создайте внешний редирект со всеми необходимыми параметрами, включая завершающий /. Значение $http_host должно включать порт в исходном запросе. См. этот документ для всех переменных Nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...