Mailu с docker на Raspberry Pi с "нативным" nginx веб-сервером - PullRequest
0 голосов
/ 18 марта 2020

Я настроил Nextcloud на Raspberry Pi 4 под управлением Ubuntu Server 18.04.4 64-bit, следуя Руководству Carsten Rieger , так что теперь на Pi установлено и работает nginx. Затем с помощью Mailu конфигурации я установил почтовый сервер с Docker Compose. Я изменил стандартную конфигурацию, потому что конфликтующие порты 80 и 443 используются "native" nginx и "docker container" nginx, поэтому в контейнере я использую 8080 и 8443.

Как мне настроить native nginx так, когда я захожу на мой mail.mydomain.com редирект на порты 8080 и 8443? Как получить сертификаты для HTTPS для mail.mydomain.com с Let's Encrypt?

1 Ответ

0 голосов
/ 18 апреля 2020

Если я правильно понимаю вашу проблему, вы хотите использовать nginx на хосте в качестве прокси-сервера для перенаправления трафика c в контейнер docker.

Расширьте свой nginx .conf на хосте:

http {

...


  # redirect http to https from your domain
  server {
      listen 80;
      server_name localhost, <your domain>, <secondary domain>;
      return 301 https://<your domain>$request_uri;
  }

  # simple reverse-proxy
  server {
    listen 443;
    server_name  localhost, <your domain>, <secondary domain>;

    ssl on;
    # if you use let's encrypt (certbot) /etc/letsencrypt/live/<your domain>/fullchain.pem
    ssl_certificate      <path to certificate>;
    # if you use let's encrypt (certbot) /etc/letsencrypt/live/<your domain>/privkey.pem
    ssl_certificate_key  <path to key>;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don’t use SSLv3 ref: POODLE

    client_max_body_size 200M;

    # pass requests for dynamic content to rails/turbogears/zope, et al
    location / {
      proxy_pass      http://localhost:8080;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $http_host;

      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forward-Proto http;
      proxy_set_header X-Nginx-Proxy true;

      proxy_redirect off;
    }
  }

... 

}

На Ваш второй вопрос, да, вы можете использовать Let's Encrypt для получения сертификата. Либо отдельно, либо с плагином nginx.

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx

Получите сертификат без плагина nginx (сначала необходимо остановить nginx, потому что certbot использует порт 80)

$ sudo certbot certonly --standalone -d <your domain> -d <secondary domain>

Получите сертификат с помощью nginx plugin

$ sudo certbot --nginx -d <your domain> -d <secondary domain>

В любом случае вам необходимо перезагрузить nginx после получения или возобновления сертификата:

$ sudo service nginx reload 
...