Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Docker: nginx + letsencrypt


Препоръчан отговор

Здравейте :) 

Имам нужда от помощ. Под Докер върху Линукс искам да си направя nginx proxy reverse, който да даде сертификат на някои сървиси. 

В директория proxy-confs имам примерни конфизи - transmission.subdomain.conf.sample и transmission.subfolder.conf.sample

Кой от двата трябва да използвам и каква е разликата между тях?

Как мога да изкарам примерно transmission навън през 443 порт и със сертификат?

Ето един сървис, който искам да пусна с примерен конфиг, обаче тук се различава с тези примери горе, които имам. 
https://github.com/silverwind/droppy/wiki/Nginx-reverse-proxy

Иначе слагам този конфиг, показвам пътя до файловете за ключовете, но нищо не става. 
 В Докер на този сървис има порт - 8989. Трябва ли да сложа и 443? При положение, че 443 е за nginx... 

Имам dns редирект кък мой IP адрес от суперхостинг.бг и nginx успешно излиза през https.

Благодаря предварително ;) Ако имате въпроси и не сте разбрали нещо от това, което съм написал, питайте.
 

Линк към коментара
Сподели в други сайтове

преди 7 минути, RudeBoy написа:

Следя темата - само от любопитство да видя изобщо някой нещо разбрал ли е ... :D 

Следя само от любопитство, ако някой е разбрал, какво ще направиш ;) 

Линк към коментара
Сподели в други сайтове

NGINX трябва да се рестартира и да се обнови image

https://www.linode.com/docs/web-servers/nginx/use-nginx-reverse-proxy/

Нещо такова трябва да е

Линк към коментара
Сподели в други сайтове

преди 2 часа, kre10 написа:

petie1, мерси че се включи. Ще пробвам с nodejs.

Първо го направи пък после ще благодариш на включилите се в темата

Линк към коментара
Сподели в други сайтове

преди 1 час, petie1 написа:

Първо го направи пък после ще благодариш на включилите се в темата

Двете нямат общо, затова благодарих за включването.

Сложих nodejs и вдигнах сървър.

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 11
ETag: W/"b-Ck1VqNd45QIvq3AZd8XYQLvEhtA"
Date: Thu, 07 May 2020 10:06:12 GMT
Connection: keep-alive
Hello World



В конфига на nginx сложих това
server {
  listen 80;
  listen [::]:80;

  server_name example.com;

  location / {
      proxy_pass http://localhost:3000/;
  }
}

След рестарт на nginx, в лога има грешка:

 nginx: [emerg] “server” directive is not allowed here 


Този location каква роля играе? Нали идеята е да пренасоча сървис към поддомейн,не поддиректория.
Линк към коментара
Сподели в други сайтове

Здравей, kre10!

Разгледа ли какво пишат по въпроса из нета? Гледам, че има много примери. На български няма да намериш много или въобще ако има.

https://stackoverflow.com/questions/41766195/nginx-emerg-server-directive-is-not-allowed-here/41766811

https://www.scaleway.com/en/docs/how-to-configure-nginx-reverse-proxy/

Линк към коментара
Сподели в други сайтове

Здравей, vpvelev!

Разгледах и стигнах до stackoverflow.com  опитвам да направя конфига именно по този начин.

Ще видя какво ще стане и ще пиша. 

Благодаря ти много!

Ето го оригиналния конфиг:
https://pastebin.com/6j5XXRm1

Добре, сега друга грешка:

nginx: [emerg] open() "/run/nginx/nginx.pid" failed (2: No such file or directory)

app-a от nodejs излиза през домейна ми, но без https. На него трябва ли да изкарвам 443 порт в контейнера? 

Линк към коментара
Сподели в други сайтове

преди 1 час, kre10 написа:

Добре, сега друга грешка:

nginx: [emerg] open() "/run/nginx/nginx.pid" failed (2: No such file or directory)

Явно не е създало директорията. Виж какви са пътищата с:

nginx -V

Линк към коментара
Сподели в други сайтове

Сложих това в конфига:
include /config/nginx/proxy-confs/*.subdomain.conf;`

Сега намира конфига за transmission, но отново грешка.

nginx: [emerg] "server" directive is not allowed here in /config/nginx/proxy-confs/transmission.subdomain.conf:13

Правя всичко, както е описано в README файла.
 
Без този ред include /config/nginx/proxy-confs/*.subdomain.conf;` няма грешка, но не излиза през https.
Каквото и да направя, не става.
 
преди 9 минути, vpvelev написа:

Явно не е създало директорията. Виж какви са пътищата с:

Това не е такъв проблем....

Линк към коментара
Сподели в други сайтове

Линк към коментара
Сподели в други сайтове

kre10, не е толкова лесно ;)

Цитат

Онзи ден исках бързо да стартирам nginx сървър със сертификати Let's Encrypt. Очаквах задачата да е лесна и ясна. Оказва се: сгреших, отне значително време и е доста по-сложно.

https://medium.com/@pentacent/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71

 

Линк към коментара
Сподели в други сайтове

преди 18 минути, vpvelev написа:

kre10, не е толкова лесно ;)

Знам, дори започвам да се отказвам. Това съм го правил под ubuntu сървър, но сега ми е много по-трудно с Докер. Уж всичко е оптимизирано, но не мога да направя трафика да минава през letsencrypt контейнера. И не мога да го направя с готовите конфизи, които имам. Представи си дали ще успея сам да си направя конфиг за реалния сървис, който искам да пусна - https://github.com/silverwind/droppy/wiki/Nginx-reverse-proxy

 

преди 26 минути, petie1 написа:

Това е добро. Ще се мъча сега с този гайд. Иначе точно тези контейнери използвам.

Линк към коментара
Сподели в други сайтове

преди 1 минута, kre10 написа:

Това е добро. Ще се мъча сега с този гайд. Иначе точно тези контейнери използвам.

Ама нагласяй нещата спрямо твоята ситуация не само копи пейст

:)

Линк към коментара
Сподели в други сайтове

преди 1 минута, petie1 написа:

Ама нагласяй нещата спрямо твоята ситуация не само копи пейст

:)

Именно това правя. Това е най-големия проблем, че повечето неща в интернет не се отнасят за моя случай. Ще опитам сега с този гайд. Дано да стане. Мерси още веднъж :) 

Линк към коментара
Сподели в други сайтове

преди 4 минути, kre10 написа:

Именно това правя. Това е най-големия проблем, че повечето неща в интернет не се отнасят за моя случай. Ще опитам сега с този гайд. Дано да стане. Мерси още веднъж :) 

То в интернет никой не пише за конкретен случай а за общия случай и вече се гласиш според твоя случай де

Линк към коментара
Сподели в други сайтове

преди 12 минути, kre10 написа:

Знам, дори започвам да се отказвам.

Не се отказвай. Ако имаш време и ти трябва това - действай. Ще стане.

Лошото е, че както казваш, трябва да е точно за твоя случай, съврър и сертификат, така че трудно ще може от тук да ти помогнем като ти кажем "напиши това, смени това ...".

Ти си знаеш най-добре, кое как е и ще се справиш.

Линк към коментара
Сподели в други сайтове

Домейна и сертификата работят, но не мога да накарам някой сървис да мине през nginx. Правя точно това:

 First let's make sure that we have a CNAME for ombi set up on our dns provider (a wildcard CNAME * will also cover this) and it is pointing to our A record that points to our server IP. If we are using the docker cli method, we also need to create the user defined bridge network (here named lsio) as described above. We also need to make sure that port 443 on our router is forwarded to the correct port on our server. [/qupte]


Накратко: правя поддомейн запис към моя адрес с името на контейнера. Отворил съм 443 порт. 

 Once our containers up and running (and we confirm we can reach the placeholder page at https://linuxserver-test.com), we simply rename the file ombi.subdomain.conf.sample under /config/nginx/proxy-confs/ to ombi.subdomain.conf and we restart the letsencrypt container. Now when we browser to https://ombi.linuxserver-test.com we should see the Ombi gui.


Накратко: главния домейн ми работи и е през https. Преименувам файла transmission.subdomain.conf.sample на transmisson.subdomain.conf и рестартирам letsencrypt контейнера. Но в браузъра не ми отваря уеб интерфейса на transmission-a. 

Сещам се само за едно нещо, което не съм направил и не знам какво да правя:

 set $upstream_heimdall heimdall; proxy_pass https://$upstream_heimdall:443; 


 This is a bit of a tricky part. Normally, we could just put in the directive proxy_pass https://heimdall:443; and expect nginx to connect to Heimdall via its container name used as a dns hostname. Although it works for the most part, nginx has an annoying habit. During start, nginx checks all dns hostnames used in proxy_pass statements and if any one of them is not accessible, it refuses to start. We really don't want a stopped proxied container to prevent our webserver from starting up, so we use a trick.

 If the proxy_pass statement contains a variable instead of a dns hostname, nginx doesn't check whether it's accessible or not during start. So here we are setting a variable named upstream_heimdall with the value of heimdall, and then use the variable $upstream_heimdall as the address in the proxy_pass directive. That way, if the heimdall container is down for any reason, nginx can still start. When using a variable this way, we also have to set the resolver to docker dns in the previous line.

Тук съм сигурен, че са в една мрежа и няма нужда да го пипам това:

 If the proxied container is not in the same user defined bridge network as letsencrypt (could be on a remote host, could be using host networking or macvlan), we can change the proxy_pass directive to use an IP address instead: proxy_pass https://192.168.1.10:443;

Де факто първите два цитата са ми по-сложни.

Ако имате идеи, казвайте. Дори и да объркам, лесно мога да се върна в стартова позиция. 

Още веднъж ви благоаря и на двамата :)

Линк към коментара
Сподели в други сайтове

Отговори ли си на този въпрос:

преди 22 часа, kre10 написа:

В Докер на този сървис има порт - 8989. Трябва ли да сложа и 443? При положение, че 443 е за nginx... 

 

Линк към коментара
Сподели в други сайтове

преди 16 минути, vpvelev написа:

Отговори ли си на този въпрос:

 

Да. Не трябва да правя нищо на сървиса, защото порта на контейнера си е правилен.

Успях да изкарам сървис, който е с примерен конфиг от тяхното хранилище. Сега остава да си създам мой конфиг за този сървис, който искам да направя. 

Линк към коментара
Сподели в други сайтове

Не мога да изкарам сървиса, който искам. Правя същия конфиг файл като другите:

https://pastebin.com/0Fng0SPq

Разликата е, че на proxy pass слагам локалния адрес на устройството, където е проксито. Иначе, ако са в една мрежа(тези от linuxserver.io са lsio), няма нужда да се пише адреса, а това   proxy_pass $upstream_proto://$upstream_app:$upstream_port;

Всичко е прекрасно - на поддомейна имам https, но нямам сървис - 500 Internal Server Error. Тоест пренасочило е поддомейна през https, но не е и сървиса. 

Опитах да променя порта в конфига, но не знам дали ще стане.

 set $upstream_port 8989;
Това би действало, ако използвам   proxy_pass $upstream_proto://$upstream_app:$upstream_port; 
 set $upstream_port 8989;

Някъде тук се крие ключът, но не успявам. Засега ще спра и ще изпия една бира. Ако имате идеи, казвайте. 

 

Линк към коментара
Сподели в други сайтове

Затова те попитах по-горе за двата порта и че тук ги слагат и двата. Може би си го направил, но пак да попитам за всеки случай :)

Цитат
server {
    listen 80;
    server_name example.org;    location / {
        return 301 https://$host$request_uri;
    }    
}server {
    listen 443 ssl;
    server_name example.org;
    
    location / {
        proxy_pass http://example.org; #for demo purposes
    }
}

Това е в това, което пратих по-горе.

преди 53 минути, kre10 написа:

Засега ще спра и ще изпия една бира.

Това ще помогне ;)

 

Не помня, но някъде около 2016 май беше правихме подобно или даже същото на един познат. Също като теб пробвахме, сменяхме и не тръгва. Пробваме друга настройка и пак не тръгва. И изведнъж без никаква промяна да правим - пускаме и тръгна. Много се ядосвам на такива ситуации, ама така се получава понякога :) 

Линк към коментара
Сподели в други сайтове

преди 5 минути, vpvelev написа:

Не помня, но някъде около 2016 май беше правихме подобно или даже същото на един познат. Също като теб пробвахме, сменяхме и не тръгва. Пробваме друга настройка и пак не тръгва. И изведнъж без никаква промяна да правим - пускаме и тръгна. Много се ядосвам на такива ситуации, ама така се получава понякога :) 

Сега остана да си изпия бирата и да тръгне само :D 

Има ясен знак, че съм на прав път, но нещо не правя както трябва. Ще видим ;) 

 

Линк към коментара
Сподели в други сайтове

Според мен ей тук е ключа за палатката

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name heimdall.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    # enable for ldap auth, fill in ldap details in ldap.conf
    #include /config/nginx/ldap.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable the next two lines for ldap auth
        #auth_request /auth;
        #error_page 401 =200 /login;

        include /config/nginx/proxy.conf;
        resolver 127.0.0.11 valid=30s;
        set $upstream_heimdall heimdall;
        proxy_pass https://$upstream_heimdall:443;
    }
}

 

По точно ей тва

server_name heimdall.*;		

 

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване