Panowie/Panie, pomóżcie rozwizać problem.
Mam VPS'a a na nim zainstalowany i działajcy SSL, problem pojawił się kiedy odpaliłęm DOCKER w którym mam uruchomiony serwer do przetwarzania zdjęć,
resize, crop, fill według zadanych parametrów.
I nie powiem,działa bardzo dobrze ale tylko po http, nie mogę sobie poradzić a próbowałem już chyba wszystkiego. Przeczytałem trochę na temat PROXY, próbowałem poustawiać w/g
proponowanych wzorców ale to za diabła nie działa.
system: CentOS 7..., httpd 2.4 (Apache2.4), OpenSSL oczywiście i utknałem ....
nie rozumiem do końca jak działa Proxy w takim przypadku.
konfiguracja serwera VPS:
<VirtualHost *:80> # Redirect any HTTP request to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] ServerAdmin root@imgproxy.mojserver.net DocumentRoot /var/www/html/imgproxy ServerName imgproxy.mojserver.net </VirtualHost> # Virtual Host 1 <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key <Directory /var/www/html/imgproxy> AllowOverride All </Directory> ServerAdmin root@imgproxy.mojserver.net DocumentRoot /var/www/html/imgproxy ServerName imgproxy.mojserver.net </VirtualHost>
# HTTP <VirtualHost *:80> ServerName imgproxy.mojserver.net ServerAlias imgproxy.mojserver.net www.imgproxy.mojserver.net # Redirect any HTTP request to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] # Logging LogLevel warn ErrorLog imgproxy.mojserver.net-error_log CustomLog imgproxy.mojserver.net-access_log combined </VirtualHost> # HTTPS <VirtualHost *:443> ServerName imgproxy.mojserver.net # Logging LogLevel warn ErrorLog imgproxy.mojserver.net-error_log CustomLog imgproxy.mojserver.net-access_log combined # SSL Configuration - uses strong cipher list - these might need to be downgraded if you need to support older browsers/devices SSLEngine on SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 # -TLSv1 -TLSv1.1 SSLHonorCipherOrder On SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key #SSLCertificateChainFile /path/to/your/certificate/chainfile.crt # HSTS (optional) Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;" # Remove this if you need to use frames or iframes # Header always set X-Frame-Options DENY # Prevent MIME based attacks Header set X-Content-Type-Options "nosniff" # Reverse proxy configuration < Location / > ProxyPass imgproxy.mojserver.net/ ProxyPassReverse imgproxy.mojserver.net:8080/ < /Location > </VirtualHost>
Nie musisz mieć proxy, wystarczy że do swojego apache dorzucisz certyfikat, i zbindujesz nie tylko port 80 ale i 443. Jak potrzebujesz proxy to polecam: https://github.com/docker/dockercloud-haproxy ale tutaj również będziesz musiał podpiąć certyfikat, lub zbudować obraz z certyfikatem. Podpiąć certyfikat możesz via volumeny.
Kolega widze zorientowany w temacie, super, dzięki za podpowiedz, jednak w dalszym ciagu nie wiele mi to powiedziało.
Może rozszerze nieco o co mi chodzi na wszelki wypadek, to że VPS i Docker a w nim kontener to już wiesz. Serwer imgproxy działa na porcie 8080
i nie wiem jak właśnie spowodować żeby ten odpalony na porcie 8080 był secure.
Piszac "podpiać certyfikat do Apacha" co masz na myśli, już jeden certyfikat na apachu smiga i jest https i w przeglądarce widzę "Secure" ale tylko jak dobieram się do httpd po HTTPS (port 443) albo przekierowuję zapytania HTTP (port 80) na HTTPS.
Nie kumam co mam zrobić z tym kontenerem.
I jak mam doczepić kolejny certyfikat do Apacha ? (Centos httpd (apache 2.4))
Jak zbindować port 8080 z kontenera żeby mi go Apache/httpd widział jako "Secure" ?
Ten imgproxy to gotowy obraz pociągnięty z github'a. Osobnik który go przygotował (DarthSim) przygotował go do odpalenia bez podawania jakichkolwiek szczegółów dotyczących konfiguracji https niestety, stąd problem i moje pytanie.
Ustawiasz w Apache HTTPS na adres tego img parsera.
Robisz proxy_pass do dockera na port http (bez cert).
i tyle.
No właśnie Pytonku tak zrobiłem
zobacz:
# HTTP <VirtualHost *:80> ServerName imgproxy.mojserver.net ServerAlias imgproxy.mojserver.net www.imgproxy.mojserver.net # Redirect any HTTP request to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] # Logging LogLevel warn ErrorLog imgproxy.mojserver.net-error_log CustomLog imgproxy.mojserver.net-access_log combined </VirtualHost> # HTTPS <VirtualHost *:443> ServerName imgproxy.mojserver.net # Logging LogLevel warn ErrorLog imgproxy.mojserver.net-error_log CustomLog imgproxy.mojserver.net-access_log combined # SSL Configuration - uses strong cipher list - these might need to be downgraded if you need to support older browsers/devices SSLEngine on SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 # -TLSv1 -TLSv1.1 SSLHonorCipherOrder On SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key #SSLCertificateChainFile /path/to/your/certificate/chainfile.crt # HSTS (optional) Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;" # Remove this if you need to use frames or iframes # Header always set X-Frame-Options DENY # Prevent MIME based attacks Header set X-Content-Type-Options "nosniff" # Reverse proxy configuration < Location / > ProxyPass imgproxy.mojserver.net/ ProxyPassReverse imgproxy.mojserver.net:8080/ < /Location > </VirtualHost>
No i to jest ok. A przynajmniej tak mi się wydaje (Ja bardziej Nginxowy jestem)
I teraz co dalej Ci nie działa?
No własnie nie ;(
Dlatego pytam
No ale co nie działa konkretnie.
Konkretnie to nie działa ....... imgproxy
Jak zaglądam do kodu żródłowego strony widzę wygenerowane linki ale nie wyświetla mi obrazów a jak skopiuje te linki do przeglądarki dostaję 404
albo This site can’t provide a secure connection
imgproxy.mojserver.net sent an invalid response.
Try running Windows Network Diagnostics.
ERR_SSL_PROTOCOL_ERROR
aha i spodziewałem się, jak już odpaliłem proxy, że url się zmieni i nie będzie mi zwracał .....:8080 tylko https://imgproxy.mojserver.net/...i tu nazwa/url obrazka
https://imgproxy.mojserver.net:8080/obqevbu8bTcBNi3nkBux6AtNcYbOEcqflcgiriuigl0/fit/235/187/no/0/aHR0cHM6Ly9lZHBhLWRldi5zaXRlL3N0YWdlL2Jzci9tZWRpYS9jYXRhbG9nL3Byb2R1Y3QvL20vdS9tdW5jaGtpbl9taWNyb3dhdmVfc3RlcmlsaXNlcl9iYWdzLmpwZw.png
a przecież jak https no to nie :8080 ?
poza tym jak proxy to adres chyba powinien wyglądać inaczej ?
ustaw
ProxyPassReverse imgproxy.mojserver.net/
[Edited]
Albo
ProxyPass / imgproxy.mojserver.net:8080/
ProxyPassReverse / imgproxy.mojserver.net:8080/
Nie pomaga ale chyba coś źle mam skonfigurowane jeśli chodzi o VS'y.
W sumie też nie wiem czy powinienem skonfigurować kontener jako VS ?
Nadać mu jakąś nazwę ... kontener.imgproxy.mojserver.net ?
..... ale coś się dzieje bo już nie wywala mi błędów, zamiast tego wygenerowany url po wklejeniu do przeglądarki pokazuje .... "not found"
i ....
# apachectl configtest
AH00526: Syntax error on line 48 of /etc/httpd/conf.d/imager.conf:
ProxyPass|ProxyPassMatch can not have a path when defined in a location.
A to nie masz? Ok. No to zamień tą "domenę" w PP na 127.0.0.1:8080
Zacznijmy jeszcze raz
Pokażę ci może httpd.conf -> imgproxy.conf (ten chyba ważniejszy bo "główny" VS jest tutaj)
<VirtualHost *:80> # Redirect any HTTP request to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] ServerAdmin root@imgproxy.mojserver.net DocumentRoot /var/www/html/imgproxy ServerName imgproxy.mojserver.net </VirtualHost> <VirtualHost imgproxy.mojserver.net:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key <Directory /var/www/html/imgproxy> AllowOverride All </Directory> ServerAdmin root@imgproxy.mojserver.net DocumentRoot /var/www/html/imgproxy ServerName imgproxy.mojserver.net </VirtualHost>
# HTTP <VirtualHost *:80> ServerName imgproxy.mojserver.net ServerAlias imgproxy.mojserver.net www.imgproxy.mojserver.net # Redirect any HTTP request to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] # Logging LogLevel warn ErrorLog imgproxy.mojserver.net-error_log CustomLog imgproxy.mojserver.net-access_log combined </VirtualHost> # HTTPS <VirtualHost *:443> ServerName imgproxy.mojserver.net # Logging LogLevel warn ErrorLog imgproxy.mojserver.net-error_log CustomLog imgproxy.mojserver.net-access_log combined # SSL Configuration - uses strong cipher list - these might need to be downgraded if you need to support older browsers/devices SSLEngine on SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 # -TLSv1 -TLSv1.1 SSLHonorCipherOrder On SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key #SSLCertificateChainFile /path/to/your/certificate/chainfile.crt # HSTS (optional) Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;" # Remove this if you need to use frames or iframes # Header always set X-Frame-Options DENY # Prevent MIME based attacks Header set X-Content-Type-Options "nosniff" # Reverse proxy configuration <Location /> ProxyPass http://127.0.0.1:8080/ ProxyPassReverse 127.0.0.1:8080/ </Location> </VirtualHost>
To ja może inaczej
Aplikacje w Docker odpalasz sobie na port 80 czyli po "http"
Odpalasz apkę i robisz mapowanie portów 80->8080
Na serwerze robisz vhost już normalnie z 80 i 443 z czego 443 robi proxyPass na 127.0.0.1:8080
Czyli w Docker nie potrzebnie masz mapowanie 443. tam dajesz bez certa.
Jeśli w Dockerze aplikacja ma wiedzieć czy to https czy nie to do ProxyPass dodajesz:
Czekaj czekaj, w dockerze nie mam 443 wogóle niemam nic tylko apkę którą odpalam na 8080
Wszystko co robię robię na VPS'ie nie na dockerze/kontenerze
....
chyba coś mi zaczyna świtać .... chociaż nie do końca
Tak dokładnie. W dockerze masz tylko apkę po :80.
https załatwiasz po stronie Klient -> LoadBalancer (W twoim przypadku Apache z ProxyPass)
OK, to już krok bliżej, jednak kiedy odpalam/próbuję na porcie 80 dostaję coś takiego:
"docker run -e IMGPROXY_KEY=943b2c86009268de4e532ba2ee2eab8247c6da0881 -e IMGPROXY_SALT=520f986b99f3c1203f22de2374a3d53cb7a7fe9fea309c5 -p 80:80 -t imgproxy
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint goofy_shockley (0e2fd1184210aff6cf464663b595a8351f8415ab9ac3da8712b293807b43f310): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use."
probujesz odpalic kontener na porcie 80 ale ten port jest juz zajety przez nginx/apache hosta.
Skoro na porcie 80 chodzi ci teraz proxy, to kontener odpal na inny porcie i w proxy przekierowuj na ten inny port
Napisałem że port 80 z kontenera masz przekierować na 8080 na Host
czyli:
########################################### ## V I R T U A L S E R V E R 1 ## ########################################### # HTTP <VirtualHost *:80> # Redirect any HTTP request to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] ServerAdmin root@imgproxy.mojserver.net DocumentRoot /var/www/html/imgproxy ServerName imgproxy.mojserver.net </VirtualHost> # HTTPS <VirtualHost imgproxy.mojserver.net:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key <Directory /var/www/html/imgproxy> AllowOverride All </Directory> ServerAdmin root@imgproxy.mojserver.net DocumentRoot /var/www/html/imgproxy ServerName imgproxy.mojserver.net </VirtualHost> ########################################### ## V I R T U A L S E R V E R 2 ## ########################################### # HTTPS <VirtualHost *:443> <Location /> ProxyPass h t t p ://127.0.0.1:8080/ ProxyPassReverse 127.0.0.1:8080/ </Location> </VirtualHost>
Tu masz VHost który masz wpakować DO kontenera:
Jeszcze tylko nie wiem jak się dobrać do kontenera, wcześniej używałem "portainera" ale po tym zamieszaniu nic już nie działa
więc nie wiem jeszcze jak to zrobić
Aaaa i jeszcze jedno, nie działa, wywala błąd w lini xxx którejś tam, zmieniłem na :
<Proxy *>
Allow from localhost
</Proxy>
# Reverse proxy configuration
# <Location />
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / 127.0.0.1:8080/
# </Location>
</VirtualHost>
i przestało
Pisząc "DO" kontenera masz na myśli w kontenerze musi być także odpalony apache ?
Chol...y docker, w tym kontenerze niema niczego, ani yum'a ani rpm'a, dobrze, że wget jest
tak, w kontenerze masz mieć odpalonego apache/nginx co tam sobie chcesz. możesz nawet odpalić php -S na porcie 80
Miałem na myśli, jak zainstalować brakujące rzeczy, np apacha albo ngixa jak sugerował Pyton, odpaliłem konsole a tam nic, ani yum'a ani rpm'a nijak nie wiem jak się za to zabrać.
Czyli jak zmusić go do zainstalowania tych właśnie elementów. próbowałem wgetem ściągnąć rpmy ale potem się okazało, że niema rpm'a i du..a.
Muszę znaleźć jakieś łopatologiczne wyjaśnienie jak to się robi. To co miało być tak proste okazało się okropnie zamotane.
Edyta:
Narazie jeszcze nie zrobiłem apacha w kontenerze ale dzisiaj postaram się to uzupełnić. Póki co mam:
"Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /.
Reason: Error reading from remote server"
Czyli wygląda że już proxuje ale nie znajduje celu. To chyba dobrze ?
Czyli co, jak mówisz każdy kontener to nie "Maszyna Wirtualna" tylko proces, więc mogę dodać image z Apachem i już ?
Nie do końca rozumiem jak to działa, każdy kontener ma własne IP, więc jak to się będzie "widziało" ?
Możesz cos więcej na temat napisać ?
Sprawa druga to czy lepiej Apache czy Ngix ? jeśli Ngix to nowocześniejszy/przyszłościowy serwer to może powinienem użyć Ngixa ?
Czy ponieważ na hoście już jest Apache/httpd to może poprostu Apache'a?
Zeby nie komplikować niepotrzebnie .....
Inaczej... Jakiego obrazu dockera używasz?
Jeśli dobrze kombinuje to ten: https://github.com/DarthSim/imgproxy
jeśli tak to odpal kontener z mapowaniem `-p 8080:8080` i dodaj tylko vhosty które pokazałem ale dla Hosta. Ten dla Dockera olej.
Hej Pyton_ooo,
Aaaaa właściwie to chyba tak właśnie jest w tej chwili
poczekaj, nie uciekaj, sprawdzam.....aaaaaaaaaaaaa hurrrrraaaaaaaaa
działa
Dziękuję Pytonnnnnoooo
Gites majonez
Dzięki dzięki dzięki
A idąc tą drogą, mam jeszcze jeden "proces" kontener z programem do zarządzania kontenerami "portainer" który lata na porcie 9000.
Nie mam do niego dostępu teraz po domenie (działa po IP).
Co muszę zrobić żeby działało po DNSie ?
Dodać kolejny VirtualServer tylko z proxy na 9000 ?
Ok, spróbuję
To całkiem fajne rozwiązanie, bardzo elastyczne, przynajmniej na takie wygląda okiem "laika"
no dobra, może nie "laika" ale mimo tego , że idea "dockera" jest dość stara nie miałem z nim do tej pory kontaktu.
Będę się bawił, najważniejsze że powoli zaczynam rozumieć o co kaman.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)