Nginx с docker: обратный прокси не работает - PullRequest
0 голосов
/ 11 марта 2020

Я недавно хочу установить обратный прокси-сервер. Я вытащил изображение nginx docker и запустил контейнер docker с помощью этой команды:

docker run -d --name ngtest -p 4080:80 nginx

Затем я обновил /etc/nginx/nginx.conf, как показано ниже:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server{
        listen 80;
        location /nexus/ {
            proxy_pass    http://192.168.0.30:8081/;
        }
    }
}

Контейнер работает после перезапуска, когда я пытался открыть страницу http://192.168.0.30: 4080 , я получил страницу по умолчанию Nginx.

Однако, когда я попробовал этот URL: http://192.168.0.30: 4080 / nexus , я получил страницу 404 с ошибками.

Из журнала выглядит, что nginx не пересылал URL на страницу, которую я установил в nginx .conf, вместо этого он пытался просмотреть страницу в локальном каталоге:

2020/03/11 16:10:34 [error] 6#6: *251 open() "/usr/share/nginx/html/nexus" failed (2: No such file or directory), client: 192.168.0.153, server: localhost, request: "GET /nexus HTTP/1.1", host: "192.168.0.30:4080"
192.168.0.153 - - [11/Mar/2020:16:10:34 +0000] "GET /nexus HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"

Что-то не так в моих шагах?

Спасибо,

Алекс

1 Ответ

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

Проблема в том, что даже с вашей обновленной конфигурацией вы все еще делаете:

include /etc/nginx/conf.d/*.conf;

Какие загружает /etc/nginx/conf.d/default.conf, который будет сервером по умолчанию, если имя сервера не предоставлено на основе правил определения сервера, который будет использоваться, если имя сервера не найдено.

Вы должны сделать что-то вроде:

Сохраните в файле конфигурации определение вашего сервера:

server{
    listen 80;
    location /nexus/ {
        proxy_pass    http://192.168.0.30:8081/;
    }
}

Затем запустите

docker run -d -p 4080:80 -v (path_to_your_config):/etc/nginx/conf.d/default.conf nginx

Это заменит конфигурацию по умолчанию на вашу. Затем, если вам нужно внести изменения, просто внесите их и перезапустите контейнер.

...