Как настроить файл конфигурации Nginx для прокси-сервера для моего Docker-контейнера и letsencrypt? - PullRequest
0 голосов
/ 19 января 2019

У меня есть сервер Ubuntu под управлением Nginx и Docker. Мой док-контейнер работает на порту 4200.

docker run -d -p4200:4200 my-app:latest

Я могу убедиться, что он работает

CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                            NAMES
f5be8856b9e2        my-app:latest   "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        80/tcp, 0.0.0.0:4200->4200/tcp   hopeful_diffie

Я настроил свой конфигурационный файл Nginx по умолчанию так:

server {

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name my-app.com;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        proxy_pass http://localhost:4200/;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/my-app.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/my-app.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name www.my-app.com; # managed by Certbot


    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        proxy_pass http://localhost:4200/;
    }

    listen [::]:443 ssl ; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/my-app.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/my-app.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = my-app.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;
    listen [:

:]:80 default_server;

    server_name my-app.com;
    return 404; # managed by Certbot


}
server {
    if ($host = www.my-app.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 ;
    listen [::]:80 ;
    server_name www.my-app.com;
    return 404; # managed by Certbot
}

Прежде чем я попытался добавить proxy_pass (переключение строк proxy_pass на try_files $ uri $ uri / = 404;) я получал страницу nginx по умолчанию. Я ожидаю, что добавление строк proxy_pass перенаправит запрос на порт 4200 сервера, на котором работает докер-контейнер. Вместо этого я получаю 502 Bad Gateway. Я предполагаю, что проблема заключается в моей конфигурации Ngnix, но я не уверен, что я делаю неправильно? Любая помощь будет отличной.

1 Ответ

0 голосов
/ 19 января 2019

Это была глупая ошибка с моей стороны, но, возможно, это поможет кому-то в будущем. Это было в моей команде запуска докера.

docker run -d -p 4200:80 my-app:latest

Внутри моего докера контейнер слушал 80, но я отправлял его 4200.

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