ProxyPass: Przekieruj adres URL katalogu do niestandardowego portu

13

Szukałem w Google i nie miałem wielkiego sukcesu w znalezieniu odpowiedzi. Używam serwera na Ubuntu i mam zainstalowane programy korzystające z różnych niestandardowych portów. Każdy używa innego portu, w moim przypadku są to 9090, 9091, 9092, 9093 i 9094. Skonfigurowałem serwer Apache i mam nazwę domeny, która może teraz połączyć się z moim serwerem zamiast wpisywać mój adres IP. To, czego szukam, to sposób na utworzenie katalogów, które mogą wskazywać na wymienione przeze mnie porty. Chcę coś takiego:

https://www.mydomain.com/app1
https://www.mydomain.com/app2
http://www.mydomain.com/app3

Niektóre porty obsługują protokół SSL, inne nie. Po prostu uporządkowałem je (9090-9094), aby ułatwić sobie korzystanie z mojej strony. Chciałbym, aby / app1 wskazywał na port 9090 SSL, / app2 wskazywał na port 9091 SSL i / app3 wskazywał na port 9092 inny niż SSL. Czy istnieje prosty sposób to zrobić? Próbowałem dodać ProxyPass i tym podobne w oparciu o inne posty, ale nic nie działało. Czy muszę dodać nową stronę?

Ponadto, jeśli wiąże się to z edycją plików, co, jak się spodziewam, będzie bardzo mile widziane, gdybyś mógł podać domyślną lokalizację pliku i miejsce dodawania rzeczy. Wciąż widziałem posty mówiące o dodaniu ProxyPass, więc po prostu założyłem, że weszło do VirtualHost, ale nie byłem do końca pewien. Zasadniczo wiem bardzo niewiele na temat konfiguracji serwera WWW i muszę być traktowany jako taki.

Przepraszam za wszelkie nieprawidłowe tagi i doceniam czas poświęcony na przeczytanie posta oraz wszelką pomoc, którą możesz udzielić.

EDYCJA: Dla wyjaśnienia, aplikacje są już dostępne poprzez https://www.mydomain.com:9090, itp. Chciałbym po prostu skorzystać z tego, https://www.mydomain.com/appNameaby dostać się do tej samej lokalizacji / strony opublikowanej przez te aplikacje.

EDYCJA 2: Z / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /app1 https://localhost:9090/
    ProxyPassReverse /app1 https://localhost:9090/
</VirtualHost>
Serneum
źródło
Czy możesz opublikować dane wyjściowe dyrektyw konfiguracyjnych użytych do skonfigurowania tego? Jeśli są w vhostach, czy możesz opublikować cały vhost?
Marcos Velazquez
Skonfiguruj co? Porty? Wszystkie porty są konfigurowane za pomocą interfejsu użytkownika odpowiednich programów i szukam sposobu na uniknięcie konieczności wpisywania portów podczas uzyskiwania dostępu do każdej aplikacji na moim serwerze. Mogę przeglądać aplikacje, aby zobaczyć, co mogę znaleźć, ale porty są zwykle po prostu przechowywane w pliku config.ini
Serneum
Nie, nie to. Miałem na myśli to, że jeśli używasz ProxyPass i innych rzeczy, musiałeś umieścić je w vhostie, prawda? Jeśli tak, czy możesz opublikować całą zawartość vhost, jeśli to możliwe? tj. <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost>
Marcos Velazquez,
Cofnąłem większość moich zmian, aby uzyskać czyste konto, zanim poprosiłem o pomoc. Właśnie dodałem / etc / apache2 / sites-available / default plik, który posiadam i na końcu dodałem pliki proxy na podstawie tego, co widziałem w różnych innych witrynach / wyszukiwaniach
Serneum

Odpowiedzi:

13

Upewnij się, że następujące moduły Apache są zainstalowane i załadowane:

mod_proxy
mod_proxy_http
mod_ssl

Możesz to sprawdzić, uruchamiając następującą komendę jako root (zakładając, że httpd znajduje się w $ PATH)

httpd -t -D DUMP_MODULES

Następnie spróbuj zmienić konfigurację na:

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Proxy>
SSLProxyEngine on
ProxyPass /app1 https://localhost:9090
ProxyPassReverse /app1 https://localhost:9090

Serwer proxy powinien teraz działać, jeśli odwiedzasz http://localhost/app1lub http://mydomain.com/app1zakładasz, że mydomain.com wskazuje na localhost.

Marcos Velazquez
źródło
Ten sam problem jak poprzednio, nie mam pojęcia jak zainstalować mod_proxy, a a2enmod mod_proxy mówi, że mod_proxy nie istnieje. Będę szukał sposobu na zdobycie tych 3 modów, abym mógł zacząć działać. To powiedziawszy, mam teraz proxy, proxy_http i ssl. Jeśli tego właśnie potrzebuję, to rozwiązanie nadal nie działa. Otrzymuję komunikat o
zakazaniu,
Na marginesie, mydomain.com wskazuje na mój zewnętrzny adres IP, a nie localhost. Próbowałem zmienić localhost: 9090 na mój ip: 9090, ale bezskutecznie. Czy „Zezwalaj na” i „ localhost ” obok ProxyPass są względne w stosunku do serwera, czy w stosunku do tego, co próbuje uzyskać do niego dostęp?
Serneum
Uruchom to, wykonując tymczasowo Allow from all. Minusem jest to, że na stronie nie pojawia się css itp., Ale to jest osobna kwestia, na którą przyjrzę się samemu. Dzięki.
Serneum
Do którego pliku konfiguracyjnego muszę dodać ProxyRequests Off <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy> SSLProxyEngine on ProxyPass /app1 https://localhost:9090 ProxyPassReverse /app1 https://localhost:9090?
kiltek
Zasoby strony nie są wyświetlane, może to nie być osobny problem. Dyrektywa ProxyPass tutaj dotyczy tylko dokumentu (app1). Do katalogu Proxy app1 z całą zawartością dodaj ukośniki końcowe. ProxyPass /app1/ https://localhost:9090/i to samo dla ProxyPassReverse, jeśli jest używane. Po drugie, dodaj przekierowanie RewriteRule: RewriteRule ^/app1$ /app1/ [R]as / app1 nie byłby wtedy proxy.
papo